DynamoDB细粒度访问控制和二级索引

时间:2018-06-13 11:32:21

标签: amazon-web-services amazon-dynamodb amazon-iam

因此,我目前正在制作一个包含多个索引的DynamoDB表,并尝试管理访问控制。

我有一个我不想用作二级索引分区或排序键的密钥(organizationId),因为它在查询方面几乎没有意义。

DynamoDB表

  • 表名:执行
  • 分区键:OrganizationId(String)

DynamoDB二级索引

  • 主分区键:processId(String)
  • 主要排序键:状态(数字)

以下IAM策略条件是否会根据organizationId

有效地限制对二级索引的访问
"Condition": {
    "ForAllValues:StringEquals": {
        "dynamodb:LeadingKeys": [
            "anOrganizationId / Variable"
        ]
    }
}

2 个答案:

答案 0 :(得分:0)

以下权限策略允许使用dynamodb:Attributes条件键对二级索引(此处为示例索引名称:TopScoreDateTimeIndex)进行查询。该策略还将查询限制为仅请求已投影到索引中的特定属性。 请注意“资源和条件”部分

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "QueryOnlyProjectedIndexAttributes",
            "Effect": "Allow",
            "Action": [
                "dynamodb:Query"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:Attributes": [
                        "TopScoreDateTime",
                        "GameTitle",
                        "Wins",
                        "Losses",
                        "Attempts"
                    ]
                },
                "StringEquals": {
                    "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
                }
            }
        }
    ]
}

答案 1 :(得分:0)

好吧,我的建议是-您实际上可以将第二个索引设为“ OrganizationId#processId”-搜索时应始终知道组织ID-因为您计划我猜测要搜索具有特定过程的组织中的所有项目ID?

这应该为您解决(在索引上,而不是在表上)

"Condition": {
                "ForAllValues:StringLike": {
                    "dynamodb:LeadingKeys": "${aws:PrincipalTag/organizationId}#*"
                },

如果我假设标签带有组织ID