我正试图使用Lambda IAM角色策略限制对基于Cognito用户池的Dynamo DB表中项目的访问。
在这个过程中,我很难找到真正设置为"${cognito identity.aamazonaws.com:aud}"在下面的Lambda IAM政策中。
{
"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-bbb-cccc-123456789012";,但是有没有一种方法可以输出实际设置为"0"的内容${cognito identity.aamazonaws.com:aud}"在运行时确认?
我是AWS的新手。
更新-附加信息
就在通过API网关调用Lambda之前,我可以看到类似于;xxxxxxxx nv0ff03e9joqh3om3h";(我的应用程序客户端ID(使用以下内容:
const session = await Auth.currentSession();
alert(session.idToken.payload.aud); //something like "xxxxxxxxnv0ff03e9joqh3om3h"
然而,我在Lambda DynamoDB查询中使用应用程序客户端ID得到AccessDeniedException。
ExpressionAttributeValues: {
":partitionkey": "xxxxxxxxnv0ff03e9joqh3om3h",
},
我可以通过将IAM策略更改为:来避免AccessDeniedException错误
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": "123abc"
}
},
我的Lambda DynamoDB查询到:
ExpressionAttributeValues: {
":partitionkey": "123abc",
},
我也试过Cognito身份池ID,但没有成功。
aud
和sub
的映射值是特定于提供程序的,并在文档中列出。
在Cognito用户池联盟的情况下,它将被设置为客户端ID。