

# 将 ABAC 与 DynamoDB 表和索引结合使用
<a name="abac-implementation-ddb-tables"></a>

以下步骤显示如何使用 ABAC 设置权限。在此示例场景中，您将向 DynamoDB 表添加标签，并使用包含基于标签的条件的策略创建一个 IAM 角色。然后，您将通过匹配标签条件来测试 DynamoDB 表支持的权限。

**Topics**
+ [步骤 1：向 DynamoDB 表添加标签](#abac-add-table-tags)
+ [步骤 2：使用包含基于标签的条件的策略创建 IAM 角色](#abac-create-iam-role)
+ [步骤 3：测试支持的权限](#abac-test-permissions)

## 步骤 1：向 DynamoDB 表添加标签
<a name="abac-add-table-tags"></a>

可以使用 AWS 管理控制台、AWS API、AWS Command Line Interface（AWS CLI）或 AWS SDK 或 AWS CloudFormation 向新的或现有的 DynamoDB 表添加标签。例如，以下 [tag-resource](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/tag-resource.html) CLI 命令向名为 `MusicTable` 的表添加一个标签。

```
aws dynamodb tag-resource —resource-arn arn:aws:dynamodb:{{us-east-1}}:{{123456789012}}:table/MusicTable —tags Key=environment,Value=staging
```

## 步骤 2：使用包含基于标签的条件的策略创建 IAM 角色
<a name="abac-create-iam-role"></a>

使用 [aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 条件键[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)，以便将在 IAM 策略中指定的标签键值对与附加到表中的键值对进行比较。如果表中包含标签键值对 `"environment": "staging"`，则以下示例策略支持用户在这些表中放置或更新项目。如果表没有指定的标签键值对，则这些操作将被拒绝。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:UpdateItem"
            ],
            "Resource": "arn:aws:dynamodb:*:*:table/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/environment": "staging"
                }
            }
        }
    ]
}
```

------

## 步骤 3：测试支持的权限
<a name="abac-test-permissions"></a>

1. 将 IAM 策略附加到 AWS 账户中的 IAM 用户或角色。确保您使用的 IAM 主体尚不具有通过其它策略访问 DynamoDB 表的权限。

1. 确保 DynamoDB 表包含值为 `"staging"` 的 `"environment"` 标签键。

1. 对带标签的表执行 `dynamodb:PutItem` 和 `dynamodb:UpdateItem` 操作。如果 `"environment": "staging"` 标签键值对存在，则这些操作应该会成功。

   如果您对没有 `"environment": "staging"` 标签键值对的表执行这些操作，则您的请求将失败，并引发 `AccessDeniedException`。

还可以查看下一节中介绍的其它[示例用例](abac-example-use-cases.md)，以实施 ABAC 并执行更多测试。