Amazon dynamodb 如何为DynamoDB创建一个用户id等于DyanmoDB表名的策略?

Amazon dynamodb 如何为DynamoDB创建一个用户id等于DyanmoDB表名的策略?,amazon-dynamodb,amazon-cognito,Amazon Dynamodb,Amazon Cognito,我试图创建一个DDB策略,其中Cognito用户id(sub)应该等于DynamoDB表名。DDB中的表名是用户的id(sub)。 因此,策略应仅限制该用户对用户表的访问。 下面是我创建的一个伪策略 我不清楚的是如何指定用户id(sub)应等于DDB表名 { "Version": "2020-11-01", "Statement": [ { "Sid": "

我试图创建一个DDB策略,其中Cognito用户id(sub)应该等于DynamoDB表名。DDB中的表名是用户的id(sub)。 因此,策略应仅限制该用户对用户表的访问。 下面是我创建的一个伪策略

我不清楚的是如何指定用户id(sub)应等于DDB表名

{
 "Version": "2020-11-01",
    "Statement": [
        {
            "Sid": "xxxxxxxxxxxxxx",
            "Effect": "Allow",
            "Action": [
                "dynamodb:Scan",
                "dynamodb:Query",
            ],
             
            "Resource": [ "arn:aws:dynamodb:<REGION>:<ACCOUNT_ID>:table/<${www.amazon.com:user_id}>"]
        }  
         
      DDB TABLE NAME SHOULD MATCH USER ID HERE ${www.amazon.com:user_id}
    ]
}   
{
“版本”:“2020-11-01”,
“声明”:[
{
“Sid”:“XXXXXXXXXXXXX”,
“效果”:“允许”,
“行动”:[
“dynamodb:扫描”,
“dynamodb:Query”,
],
“资源”:[“arn:aws:dynamodb:::table/”]
}  
DDB表名应与此处的用户ID匹配${www.amazon.com:USER_ID}
]
}   

不幸的是,您目前无法使用DynamoDB执行此操作。这是因为DynamoDB的表资源不支持任何条件键(请参阅)

您唯一可以做的就是使用
dynamodb:LeadingKeys
条件限制每个前导键的访问。这同样只适用于
查询
操作。在
扫描上不起作用(显然)。您的策略将如下所示:

{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“dynamodb:GetItem”,
“dynamodb:查询”
],
“资源”:[“arn:aws:dynamodb:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,
“条件”:{
“ForAllValues:StringEquals”:{
“dynamodb:LeadingKeys”:[“${cognito identity.amazonaws.com:sub}”]
}
}
}
]
}