如何为用户 id 等于 DynamoDB 表名的 DynamoDB 创建策略?

Posted

技术标签:

【中文标题】如何为用户 id 等于 DynamoDB 表名的 DynamoDB 创建策略?【英文标题】:how to create a policy for DynamoDB where the user id is equal to DyanmoDB table name? 【发布时间】:2020-11-02 07:35:38 【问题描述】:

我正在尝试创建一个 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
    ]
   

【问题讨论】:

【参考方案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"]
                
            
        
    ]

【讨论】:

以上是关于如何为用户 id 等于 DynamoDB 表名的 DynamoDB 创建策略?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 DynamoDB 创建 GraphQL 查询

如何在perl中绑定表名的值?

如何检查刀片中是不是存在记录?

Oracle18获取数据库当前用户下所有表名和表名的注释

如何为没有用户名的用户创建唯一 ID - PHP

如何为java准备好的语句插入使用表名变量[重复]