如何找出 AWS IAM 策略中实际设置为“$ ... ”的内容?
Posted
技术标签:
【中文标题】如何找出 AWS IAM 策略中实际设置为“$ ... ”的内容?【英文标题】:How do I find out what is actually set to "$ ... " in AWS IAM policy?如何找出 AWS IAM 策略中实际设置为“$ ... ”的内容? 【发布时间】:2021-09-15 15:23:46 【问题描述】:我正在尝试使用 Lambda IAM 角色策略基于 Cognito 用户池限制对 Dynamo 数据库表中项目的访问。
在此过程中,我很难在下面的 Lambda IAM 政策中找到实际设置为“$cognito-identity.amazonaws.com:aud”的内容。
"Effect": "Allow",
"Action": [
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:DescribeTable"
],
"Condition":
"ForAllValues:StringEquals":
"dynamodb:LeadingKeys": "$cognito-identity.amazonaws.com:aud"
,
"Resource": "arn:aws:dynamodb:ap-southeast-2:*:*"
我假设它是应用程序客户端 ID 或身份池 ID,例如“ap-southeast-2:xxxxxxxx-aaaa-bbbb-cccc-123456789012”,但有没有办法输出实际设置为“$ cognito-identity.amazonaws.com:aud”在运行时确认?
我对 AWS 比较陌生。
更新 - 附加信息
就在通过 API 网关调用 Lambda 之前,我可以看到类似“xxxxxxxxnv0ff03e9joqh3om3h”(我的应用程序客户端 ID)之类的内容:
const session = await Auth.currentSession();
alert(session.idToken.payload.aud); //something like "xxxxxxxxnv0ff03e9joqh3om3h"
但是,我在使用应用程序客户端 ID 的 Lambda DynamoDB 查询中遇到 AccessDeniedException。
ExpressionAttributeValues:
":partitionkey": "xxxxxxxxnv0ff03e9joqh3om3h",
,
我可以通过将 IAM 政策更改为:
"Condition":
"ForAllValues:StringEquals":
"dynamodb:LeadingKeys": "123abc"
,
我的 Lambda DynamoDB 查询:
ExpressionAttributeValues:
":partitionkey": "123abc",
,
我也尝试过 Cognito 身份池 ID,但没有成功。
【问题讨论】:
docs.aws.amazon.com/cognito/latest/developerguide/… 似乎是身份池。 没有真正的方法来查看它的价值/输出 - 您首先希望/期望在哪里看到输出? 我正在尝试查看要调试的内容。 Lambda 中用于获取 DynamoDB 项目的查询必须与 IAM 策略匹配以避免权限错误。但是,我使用应用程序客户端 ID 或身份池 ID 都没有成功匹配。谢谢。 【参考方案1】:aud
和 sub
的映射值是特定于提供商的,outlined in the documentation.
在 Cognito 用户池联合的情况下,它将设置为客户端 ID。
【讨论】:
谢谢,这是最相关的文档。但是,我无法让我的 DynamoDB 查询使用 App Client ID。 @Taka 啊,你只是 AWS 令人困惑的文档的最新受害者。他们无法区分用户池和身份池。为了在您的角色中使用字符串插值机制,您需要在您的 api 网关上使用身份池以及 IAM 授权方。 感谢@Andrew,如果可能的话,我将尝试使用自定义 Lambda 授权器根据登录的用户池动态创建策略。 @Taka 哦,那里也要小心。自定义授权方返回的策略仅用于 API Gateway 授权。您正在寻找的是严格意义上的身份池功能。 感谢@Andrew 的提醒,是的,在尝试自定义授权方后,我意识到了你的意思。我现在回到 IAM 身份验证并再次尝试了许多不同的组合。但是,我仍然不知道实际为 aud 或 sub 设置了什么。以上是关于如何找出 AWS IAM 策略中实际设置为“$ ... ”的内容?的主要内容,如果未能解决你的问题,请参考以下文章
创建 AWS IAM 策略,将正在运行的实例限制为特定安全组