【发布时间】: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,但没有成功。
【问题讨论】:
-
没有真正的方法来查看它的价值/输出 - 您首先希望/期望在哪里看到输出?
-
我正在尝试查看要调试的内容。 Lambda 中用于获取 DynamoDB 项目的查询必须与 IAM 策略匹配以避免权限错误。但是,我使用应用程序客户端 ID 或身份池 ID 都没有成功匹配。谢谢。
标签: javascript aws-lambda amazon-cognito amazon-iam