

# DynamoDB テーブルとインデックスでの ABAC の使用
<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 プリンシパルが、別のポリシーで DynamoDB テーブルに既にアクセスしていないことを確認します。

1. DynamoDB テーブルに、値が `"staging"` の `"environment"` タグキーが含まれていることを確認します。

1. タグ付きテーブルで `dynamodb:PutItem` および `dynamodb:UpdateItem` アクションを実行します。`"environment": "staging"` タグのキーと値のペアが存在する場合、これらのアクションは成功します。

   `"environment": "staging"` タグのキーと値のペアがないテーブルでこれらのアクションを実行すると、リクエストは `AccessDeniedException` で失敗します。

次のセクションで説明する他の[サンプルユースケース](abac-example-use-cases.md)を確認して、ABAC を実装し、さらにテストを実行することもできます。