【问题标题】:how to create a policy for DynamoDB where the user id is equal to DyanmoDB table name?如何为用户 id 等于 DynamoDB 表名的 DynamoDB 创建策略?
【发布时间】:2023-03-19 08:30:02
【问题描述】:

我正在尝试创建一个 DDB 策略,其中 Cognito 用户 ID(子)应等于 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}
    ]
}   

【问题讨论】:

    标签: amazon-dynamodb amazon-cognito policy


    【解决方案1】:

    很遗憾,您目前无法使用 DynamoDB 执行此操作。这是因为 DynamoDB 的表资源不支持任何条件键(请参阅https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html#amazondynamodb-resources-for-iam-policies)。

    您唯一可以做的就是使用dynamodb:LeadingKeys 条件限制每个前导键的访问。这再次仅适用于 Query 操作。不适用于Scan(显然)。您的政策将如下所示:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "dynamodb:GetItem",
                    "dynamodb:Query"
                ],
                "Resource": ["arn:aws:dynamodb:*:*:table/MyTable"],
                "Condition": {
                    "ForAllValues:StringEquals": {
                        "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"]
                    }
                }
            }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-01
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2012-10-04
      • 2017-08-10
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      相关资源
      最近更新 更多