

# DynamoDB 用のリソースベースのポリシーを使用する
<a name="access-control-resource-based"></a>

DynamoDB では、テーブル、インデックス、ストリームに対してリソースベースのポリシーを利用できます。リソースベースのポリシーでは、各リソースにアクセスできるユーザーと、各リソースに対して実行できるアクションを指定することで、アクセス許可を定義できます。

リソースベースのポリシーを DynamoDB リソース (テーブルやストリームなど) にアタッチできます。このポリシーでは、Identity and Access Management (IAM) [プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)に対して、該当する DynamoDB リソースで特定のアクションを実行するためのアクセス許可を指定します。例えば、テーブルにアタッチされたポリシーでは、そのテーブルとそのインデックスへのアクセス許可を指定します。そのため、リソースベースのポリシーを使用すれば、リソース単位でアクセス許可を定義することで、DynamoDB のテーブル、インデックス、ストリームへのアクセスを簡単に制御できます。DynamoDB リソースにアタッチできるポリシーの最大サイズは 20 KB です。

リソースベースのポリシーを使用する大きな利点は、さまざまな AWS アカウント で IAM プリンシパルにクロスアカウントアクセスを許可するための、クロスアカウントアクセス制御が簡単になることです。詳細については、「[クロスアカウントアクセスのリソースベースのポリシー](rbac-examples.md#rbac-examples-cross-account)」を参照してください。

リソースベースのポリシーは、[IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) の外部アクセスアナライザーや[ブロックパブリックアクセス (BPA)](rbac-bpa-rbp.md) 機能と統合することもできます。IAM Access Analyzer は、リソースベースのポリシーで指定された外部エンティティへのクロスアカウントアクセスについて報告します。また、情報を可視化してくれるので、アクセス許可を調整し、最小特権の原則を守るうえでも役立ちます。BPA では、DynamoDB のテーブル、インデックス、ストリームへのパブリックアクセスを阻止できます。BPA は、リソースベースのポリシーの作成と変更のワークフローで自動的に有効になります。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/q9sBxrVgq4U?si=0cR4TJIlKvH9Wlu5/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/q9sBxrVgq4U?si=0cR4TJIlKvH9Wlu5)


**Topics**
+ [リソースベースのポリシーを指定してテーブルを作成する](rbac-create-table.md)
+ [DynamoDB の既存のテーブルにポリシーをアタッチする](rbac-attach-resource-based-policy.md)
+ [リソースベースのポリシーを DynamoDB ストリームにアタッチする](rbac-attach-resource-policy-streams.md)
+ [リソースベースのポリシーを DynamoDB テーブルから削除する](rbac-delete-resource-based-policy.md)
+ [DynamoDB でリソースベースのポリシーを使用したクロスアカウントアクセス](rbac-cross-account-access.md)
+ [DynamoDB でリソースベースのポリシーでパブリックアクセスをブロックする](rbac-bpa-rbp.md)
+ [リソースベースのポリシーでサポートされる DynamoDB API オペレーション](rbac-iam-actions.md)
+ [IAM アイデンティティベースのポリシーと DynamoDB リソースベースのポリシーによる認可](rbac-auth-iam-id-based-policies-DDB.md)
+ [DynamoDB リソースベースのポリシーの例](rbac-examples.md)
+ [DynamoDB リソースベースのポリシーの考慮事項](rbac-considerations.md)
+ [DynamoDB リソースベースのポリシーに関するベストプラクティス](rbac-best-practices.md)

# リソースベースのポリシーを指定してテーブルを作成する
<a name="rbac-create-table"></a>

DynamoDB コンソール、[CreateTable API](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html)、AWS CLI、[AWS SDK](rbac-attach-resource-based-policy.md#rbac-attach-policy-java-sdk)、または CloudFormation テンプレートを使用して、テーブルの作成時にリソースベースのポリシーを追加できます。

## AWS CLI
<a name="rbac-create-table-CLI"></a>

次の例では、`create-table` AWS CLI コマンドを使用して、*MusicCollection* という名前のテーブルを作成します。このコマンドでは、そのテーブルにリソースベースのポリシーを追加する `resource-policy` パラメータも指定されています。このポリシーは、ユーザー *John* に対して、該当のテーブルで [RestoreTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableToPointInTime.html)、[GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)、[PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) の API アクションを実行することを許可しています。

*イタリック体*のテキストを、リソース固有の情報に必ず置き換えてください。

```
aws dynamodb create-table \
    --table-name MusicCollection \
    --attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \
    --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
    --resource-policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::123456789012:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:RestoreTableToPointInTime\",
                        \"dynamodb:GetItem\",
                        \"dynamodb:DescribeTable\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection\"
                }
            ]
        }"
```

## AWS マネジメントコンソール
<a name="rbac-create-table-console"></a>

1. AWS マネジメントコンソール にサインインして DynamoDB コンソール ([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)) を開きます。

1. ダッシュボードで、**[テーブルの作成]** を選択します。

1. **[テーブルの詳細]** に、テーブル名、パーティションキー、ソートキーの詳細を入力します。

1. **[テーブル設定]** セクションで **[設定をカスタマイズ]** を選択します。

1. (オプション) **[テーブルクラス]**、**[キャパシティー計算ツール]**、**[読み込み/書き込みキャパシティーの設定]**、**[セカンダリインデックス]**、**[保管時の暗号化]**、**[削除保護]** のオプションを指定します。

1. **[リソースベースのポリシー]** で、テーブルとそのインデックスへのアクセス許可を定義するポリシーを追加します。このポリシーでは、これらのリソースにアクセスできるユーザーと、各リソースに対して実行できるアクションを指定します。ポリシーを追加するには、以下のいずれかを実行します。
   + JSON ポリシードキュメントを入力するか貼り付けます。IAM ポリシー言語の詳細については、「IAM ユーザーガイド**」の「[JSON エディターを使用したポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)」を参照してください。
**ヒント**  
「Amazon DynamoDB デベロッパーガイド」のリソースベースのポリシーの例を確認するには、**[ポリシーの例]** を選択してください。
   + **[新しいステートメントを追加]** を選択して新しいステートメントを追加し、提示されたフィールドに情報を入力します。このステップを、追加するステートメントの数だけ繰り返します。
**重要**  
セキュリティ警告、エラー、提案がある場合は、ポリシーを保存する前に解決してください。

   次の IAM ポリシーの例では、ユーザー *John* に対して、テーブル *MusicCollection* で [RestoreTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableToPointInTime.html)、[GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)、[PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) の API アクションを実行することを許可しています。

   *イタリック体*のテキストを、リソース固有の情報に必ず置き換えてください。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::123456789012:user/username"
         },
         "Action": [
           "dynamodb:RestoreTableToPointInTime",
           "dynamodb:GetItem",
           "dynamodb:PutItem"
         ],
         "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
       }
     ]
   }
   ```

------

1. (オプション) 新しいポリシーがリソースへのパブリックアクセスおよびクロスアカウントアクセスにどのように影響するかをプレビューするには、**[外部アクセスをプレビュー]** を選択します。ポリシーを保存する前に、新しい IAM Access Analyzer の結果が導入されているかどうかや、既存の結果を解決するかどうかを確認できます。アクティブなアナライザーが表示されない場合は、**[Access Analyzer へ移動]** を選択し、[[IAM Access Analyzer]](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling) でアカウントアナライザーを作成します。詳細については、「[アクセスのプレビュー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html)」を参照してください。

1. **[テーブルの作成]** を選択します。

## AWS CloudFormation テンプレート
<a name="rbac-create-table-cfn"></a>

------
#### [ Using the AWS::DynamoDB::Table resource ]

次の CloudFormation テンプレートでは、[AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html) リソースを使用して、ストリームを有効にしたテーブルを作成します。このテンプレートでは、該当するテーブルとストリームの両方にアタッチされたリソースベースのポリシーも指定しています。

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "MusicCollectionTable": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "AttributeDefinitions": [
                    {
                        "AttributeName": "Artist",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "Artist",
                        "KeyType": "HASH"
                    }
                ],
                "BillingMode": "PROVISIONED",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 5
                },
                "StreamSpecification": {
                  "StreamViewType": "OLD_IMAGE",
                  "ResourcePolicy": {
                    "PolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                        {
                            "Principal": {
                                "AWS": "arn:aws:iam::111122223333:user/John"
                            },
                            "Effect": "Allow",
                            "Action": [
                                "dynamodb:GetRecords",
                                "dynamodb:GetShardIterator",
                                "dynamodb:DescribeStream"
                            ],
                            "Resource": "*"
                        }
                      ]
                    }
                  }
                },
                "TableName": "MusicCollection",
                "ResourcePolicy": {
                    "PolicyDocument": {
                        "Version": "2012-10-17",		 	 	 
                        "Statement": [
                            {
                                "Principal": {
                                    "AWS": [
                                        "arn:aws:iam::111122223333:user/John"
                                    ]
                                },
                                "Effect": "Allow",
                                "Action": "dynamodb:GetItem",
                                "Resource": "*"
                            }
                        ]
                    }
                }
            }
           
        }
    }
}
```

------
#### [ Using the AWS::DynamoDB::GlobalTable resource ]

次の CloudFormation テンプレートでは、[AWS::DynamoDB::GlobalTable](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html) リソースを使用してテーブルを作成し、リソースベースのポリシーを該当テーブルとそのストリームにアタッチします。

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "GlobalMusicCollection": {
            "Type": "AWS::DynamoDB::GlobalTable",
            "Properties": {
                "TableName": "MusicCollection",
                "AttributeDefinitions": [{
                    "AttributeName": "Artist",
                    "AttributeType": "S"
                }],
                "KeySchema": [{
                    "AttributeName": "Artist",
                    "KeyType": "HASH"
                }],
                "BillingMode": "PAY_PER_REQUEST",
                "StreamSpecification": {
                    "StreamViewType": "NEW_AND_OLD_IMAGES"
                },
                "Replicas": [
                    {
                        "Region": "us-east-1",
                        "ResourcePolicy": {
                            "PolicyDocument": {
                                "Version": "2012-10-17",		 	 	 
                                "Statement": [{
                                    "Principal": {
                                        "AWS": [
                                            "arn:aws:iam::111122223333:user/John"
                                        ]
                                    },
                                    "Effect": "Allow",
                                    "Action": "dynamodb:GetItem",
                                    "Resource": "*"
                                }]
                            }
                        },
                        "ReplicaStreamSpecification": {
                            "ResourcePolicy": {
                                "PolicyDocument": {
                                    "Version": "2012-10-17",		 	 	 
                                    "Statement": [{
                                        "Principal": {
                                            "AWS": "arn:aws:iam::111122223333:user/John"
                                        },
                                        "Effect": "Allow",
                                        "Action": [
                                            "dynamodb:GetRecords",
                                            "dynamodb:GetShardIterator",
                                            "dynamodb:DescribeStream"
                                        ],
                                        "Resource": "*"
                                    }]
                                }
                            }
                        }
                    }
                ]
            }
        }
    }
}
```

------

# DynamoDB の既存のテーブルにポリシーをアタッチする
<a name="rbac-attach-resource-based-policy"></a>

DynamoDB コンソール、[PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html) API、AWS CLI、AWS SDK、または [CloudFormation テンプレート](rbac-create-table.md#rbac-create-table-cfn)を使用して、リソースベースのポリシーを既存のテーブルにアタッチしたり、既存のポリシーを変更したりできます。

## AWS CLI の例: 新しいポリシーをアタッチする
<a name="rbac-attach-policy-CLI"></a>

次の IAM ポリシーの例では、`put-resource-policy` AWS CLI コマンドを使用して、リソースベースのポリシーを既存のテーブルにアタッチします。この例では、ユーザー *John* に対して、*MusicCollection* という名前の既存のテーブルで [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)、[PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)、[UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html)、[UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html) の API アクションを実行することを許可しています。

*イタリック体*のテキストを、リソース固有の情報に必ず置き換えてください。

```
aws dynamodb put-resource-policy \
    --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \
    --policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::111122223333:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:GetItem\",
                        \"dynamodb:PutItem\",
                        \"dynamodb:UpdateItem\",
                        \"dynamodb:UpdateTable\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection\"
                }
            ]
        }"
```

## AWS CLI の例: 既存のポリシーを条件に従って更新する
<a name="rbac-update-policy-CLI"></a>

テーブルの既存のリソースベースポリシーを条件に従って更新する場合は、オプションの `expected-revision-id` パラメータを使用できます。次の例では、ポリシーが DynamoDB に存在し、現在のリビジョン ID が `expected-revision-id` パラメータに指定された値と一致する場合にのみ、ポリシーを更新します。

```
aws dynamodb put-resource-policy \
    --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \
    --expected-revision-id 1709841168699 \ 
    --policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::111122223333:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:GetItem\",
                        \"dynamodb:UpdateItem\",
                        \"dynamodb:UpdateTable\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection\"
                }
            ]
        }"
```

## AWS マネジメントコンソール
<a name="rbac-attach-policy-console"></a>

1. AWS マネジメントコンソール にサインインして DynamoDB コンソール ([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)) を開きます。

1. ダッシュボードから、既存のテーブルを選択します。

1. **[アクセス許可]** タブに移動し、**[テーブルポリシーを作成]** を選択します。

1. [リソースベースのポリシー] エディターで、アタッチするポリシーを追加し、**[ポリシーを作成]** を選択します。

   次の IAM ポリシーの例では、ユーザー *John* に対して、*MusicCollection* という名前の既存のテーブルで [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)、[PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)、[UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html)、[UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html) の API アクションを実行することを許可しています。

   *イタリック体*のテキストを、リソース固有の情報に必ず置き換えてください。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::111122223333:user/username"
         },
         "Action": [
           "dynamodb:GetItem",
           "dynamodb:PutItem",
           "dynamodb:UpdateItem",
           "dynamodb:UpdateTable"
         ],
         "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
       }
     ]
   }
   ```

------

## AWS SDK for Java 2.x
<a name="rbac-attach-policy-java-sdk"></a>

次の IAM ポリシーの例では、`putResourcePolicy` メソッドを使用して、リソースベースのポリシーを既存のテーブルにアタッチしています。このポリシーは、既存のテーブルで [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) API アクションを実行することをユーザーに許可します。

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.PutResourcePolicyRequest;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * [Get started with the AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html)
 */
public class PutResourcePolicy {

    public static void main(String[] args) {
        final String usage = """

                Usage:
                    <tableArn> <allowedAWSPrincipal>

                Where:
                    tableArn - The Amazon DynamoDB table ARN to attach the policy to. For example, arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection.
                    allowedAWSPrincipal - Allowed AWS principal ARN that the example policy will give access to. For example, arn:aws:iam::123456789012:user/John.
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String tableArn = args[0];
        String allowedAWSPrincipal = args[1];
        System.out.println("Attaching a resource-based policy to the Amazon DynamoDB table with ARN " +
                tableArn);
        Region region = Region.US_WEST_2;
        DynamoDbClient ddb = DynamoDbClient.builder()
                .region(region)
                .build();

        String result = putResourcePolicy(ddb, tableArn, allowedAWSPrincipal);
        System.out.println("Revision ID for the attached policy is " + result);
        ddb.close();
    }

    public static String putResourcePolicy(DynamoDbClient ddb, String tableArn, String allowedAWSPrincipal) {
        String policy = generatePolicy(tableArn, allowedAWSPrincipal);
        PutResourcePolicyRequest request = PutResourcePolicyRequest.builder()
                .policy(policy)
                .resourceArn(tableArn)
                .build();

        try {
            return ddb.putResourcePolicy(request).revisionId();
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }

        return "";
    }

    private static String generatePolicy(String tableArn, String allowedAWSPrincipal) {
        return "{\n" +
                "    \"Version\": \"2012-10-17\",\n" +,		 	 	 
                "    \"Statement\": [\n" +
                "        {\n" +
                "            \"Effect\": \"Allow\",\n" +
                "            \"Principal\": {\"AWS\":\"" + allowedAWSPrincipal + "\"},\n" +
                "            \"Action\": [\n" +
                "                \"dynamodb:GetItem\"\n" +
                "            ],\n" +
                "            \"Resource\": \"" + tableArn + "\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";
    }
}
```

# リソースベースのポリシーを DynamoDB ストリームにアタッチする
<a name="rbac-attach-resource-policy-streams"></a>

DynamoDB コンソール、[PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html) API、AWS CLI、AWS SDK、または [CloudFormation テンプレート](rbac-create-table.md#rbac-create-table-cfn)を使用して、リソースベースのポリシーを既存のテーブルのストリームにアタッチしたり、既存のポリシーを変更したりできます。

**注記**  
[CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) API や [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html) API で作成中のストリームには、ポリシーをアタッチできません。ただし、テーブルの削除後にポリシーを変更または削除することはできます。また、無効になっているストリームのポリシーは変更または削除できます。



## AWS CLI
<a name="rbac-attach-policy-stream-CLI"></a>

次の IAM ポリシーの例では、`put-resource-policy` AWS CLI コマンドを使用して、*MusicCollection* という名前のテーブルのストリームにリソースベースのポリシーをアタッチしています。この例では、ユーザー *John* に対して、該当ストリームで [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html)、[GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html)、[DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html) の API アクションを実行することを許可しています。

*イタリック体*のテキストを、リソース固有の情報に必ず置き換えてください。

```
aws dynamodb put-resource-policy \
    --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492 \
    --policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::111122223333:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:GetRecords\",
                        \"dynamodb:GetShardIterator\",
                        \"dynamodb:DescribeStream\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492\"
                }
            ]
        }"
```

## AWS マネジメントコンソール
<a name="rbac-attach-policy-stream-console"></a>

1. AWS マネジメントコンソール にサインインして DynamoDB コンソール ([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)) を開きます。

1. DynamoDB コンソールのダッシュボードで **[テーブル]** を選択し、既存のテーブルを選択します。

   ストリームが有効になっているテーブルを選択してください。テーブルのストリームを有効にする方法については、「[ストリームの有効化](Streams.md#Streams.Enabling)」を参照してください。

1. **[アクセス許可]** タブを選択します。

1. **[アクティブストリームについてのリソースベースのポリシー]** で、**[ストリームポリシーを作成]** を選択します。

1. **[リソースベースのポリシー]** エディターで、ストリームに対するアクセス許可を定義するポリシーを追加します。このポリシーでは、ストリームにアクセスできるユーザーと、ストリームに対して実行できるアクションを指定します。ポリシーを追加するには、以下のいずれかを実行します。
   + JSON ポリシードキュメントを入力するか貼り付けます。IAM ポリシー言語の詳細については、「IAM ユーザーガイド**」の「[JSON エディターを使用したポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)」を参照してください。
**ヒント**  
「Amazon DynamoDB デベロッパーガイド」のリソースベースのポリシーの例を確認するには、**[ポリシーの例]** を選択してください。
   + **[新しいステートメントを追加]** を選択して新しいステートメントを追加し、提示されたフィールドに情報を入力します。このステップを、追加するステートメントの数だけ繰り返します。
**重要**  
セキュリティ警告、エラー、提案がある場合は、ポリシーを保存する前に解決してください。

1. (オプション) 新しいポリシーがリソースへのパブリックアクセスおよびクロスアカウントアクセスにどのように影響するかをプレビューするには、**[外部アクセスをプレビュー]** を選択します。ポリシーを保存する前に、新しい IAM Access Analyzer の結果が導入されているかどうかや、既存の結果を解決するかどうかを確認できます。アクティブなアナライザーが表示されない場合は、**[Access Analyzer へ移動]** を選択し、[[IAM Access Analyzer]](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling) でアカウントアナライザーを作成します。詳細については、「[アクセスのプレビュー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html)」を参照してください。

1. [**Create policy**] (ポリシーの作成) を選択します。

次の IAM ポリシーの例では、*MusicCollection* という名前のテーブルのストリームにリソースベースのポリシーをアタッチします。この例では、ユーザー *John* に対して、該当ストリームで [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html)、[GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html)、[DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html) の API アクションを実行することを許可しています。

*イタリック体*のテキストを、リソース固有の情報に必ず置き換えてください。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/username"
      },
      "Action": [
        "dynamodb:GetRecords",
        "dynamodb:GetShardIterator",
        "dynamodb:DescribeStream"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492"
      ]
    }
  ]
}
```

------

# リソースベースのポリシーを DynamoDB テーブルから削除する
<a name="rbac-delete-resource-based-policy"></a>

DynamoDB コンソール、[DeleteResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteResourcePolicy.html) API、AWS CLI、AWS SDK、または CloudFormation テンプレートを使用して、既存のテーブルからリソースベースのポリシーを削除できます。

## AWS CLI
<a name="rbac-delete-policy-CLI"></a>

次の例では、`delete-resource-policy` AWS CLI コマンドを使用して、*MusicCollection* という名前のテーブルからリソースベースのポリシーを削除しています。

*イタリック体*のテキストを、リソース固有の情報に必ず置き換えてください。

```
aws dynamodb delete-resource-policy \
    --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection
```

## AWS マネジメントコンソール
<a name="rbac-delete-policy-console"></a>

1. AWS マネジメントコンソール にサインインして DynamoDB コンソール ([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)) を開きます。

1. DynamoDB コンソールのダッシュボードで **[テーブル]** を選択し、既存のテーブルを選択します。

1. **[アクセス許可]** を選択します。

1. **[ポリシーを管理]** ドロップダウンから **[ポリシーを削除]** を選択します。

1. **[テーブルについてのリソースベースのポリシーを削除]** ダイアログボックスで、「**confirm**」と入力して削除アクションを確定します。

1. **[削除]** を選択します。

# DynamoDB でリソースベースのポリシーを使用したクロスアカウントアクセス
<a name="rbac-cross-account-access"></a>

リソースベースのポリシーを使用して、異なる AWS アカウント で利用可能なリソースへのクロスアカウントアクセスを許可できます。リソースベースのポリシーで許可されているクロスアカウントアクセスについては、IAM Access Analyzer が該当リソースと同じ AWS リージョン にある場合は、IAM Access Analyzer で外部アクセスの検出結果としてすべて報告されます。IAM Access Analyzer は、IAM [ポリシーの文法](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)と[ベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)に照らしてポリシーチェックを行います。これらのチェックにより、機能的でセキュリティのベストプラクティスに準拠したポリシーを作成するのに、役立つ結果と実行可能なレコメンデーションが示されます。IAM Access Analyzer のアクティブな検出結果を [DynamoDB コンソール](https://console.aws.amazon.com/dynamodb/)の **[アクセス許可]** タブで表示できます。

IAM Access Analyzer を使用したポリシーの検証の詳細については、「IAM ユーザーガイド**」の「[IAM Access Analyzer ポリシーの検証](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)」を参照してください。IAM Access Analyzer によって返される警告、エラー、および提案のリストを表示するには、「[IAM Access Analyzer ポリシーチェックリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html)」を参照してください。

アカウント A のユーザー A に、アカウント B のテーブル B にアクセスするための [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) 権限を付与するには、以下の手順を実行します。

1. `GetItem` アクションの実行権限をユーザー A に付与するリソースベースのポリシーを、テーブル B にアタッチします。

1. テーブル B に対して `GetItem` アクションを実行する権限をユーザー A に付与するアイデンティティベースのポリシーを、ユーザー A にアタッチします。

[DynamoDB コンソール](https://console.aws.amazon.com/dynamodb/)にある **[外部アクセスをプレビュー]** オプションを使用すると、リソースへのパブリックアクセスとクロスアカウントアクセスに新しいポリシーがどのように影響するかをプレビューできます。ポリシーを保存する前に、新しい IAM Access Analyzer の結果が導入されているかどうかや、既存の結果を解決するかどうかを確認できます。アクティブなアナライザーが表示されない場合は、**[Access Analyzer へ移動]** を選択し、[[IAM Access Analyzer]](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling) でアカウントアナライザーを作成します。詳細については、「[アクセスのプレビュー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html)」を参照してください。

DynamoDB のデータプレーンとコントロールプレーンの API のテーブル名パラメータには、クロスアカウントのオペレーションをサポートするため、テーブルの完全な Amazon リソースネーム (ARN) を指定できます。完全な ARN ではなくテーブル名パラメータのみを指定した場合、API オペレーションは、リクエスタが属するアカウントの該当テーブルに対して実行されます。クロスアカウントアクセスを使用するポリシーの例については、「[クロスアカウントアクセスのリソースベースのポリシー](rbac-examples.md#rbac-examples-cross-account)」を参照してください。

リソース所有者のアカウントは、別のアカウントのプリンシパルが所有者のアカウントの DynamoDB テーブルに対して読み書きを実行している場合にも課金されます。テーブルにプロビジョンドスループットが指定されている場合、所有者アカウントと他のアカウントのリクエスタからのすべてのリクエストの合計によって、リクエストをスロットリングするか (自動スケーリングが無効な場合)、スケールアップ/スケールダウンするか (自動スケーリングが有効な場合) が決まります。

リクエストは所有者アカウントとリクエスタアカウントの両方の CloudTrail ログに記録されるため、2 つのアカウントはそれぞれ、どちらのアカウントがどのデータにアクセスしたかを追跡できます。

## クロスアカウントの AWS Lambda 関数を使用したアクセスを共有する
<a name="rbac-analyze-cross-account-lambda-access"></a>

**アカウント A の Lambda 関数**

1. [IAM コンソール](https://console.aws.amazon.com/iam/)に移動して、アカウント A のAWS Lambda 関数の [Lambda 実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)として使用される IAM ロールを作成します。必要な DynamoDB Streams と Lambda 呼び出しアクセス許可を持つマネージド IAM ポリシー `AWSLambdaDynamoDBExecutionRole` を追加します。このポリシーは、アカウント A でユーザーがアクセスする可能性のあるすべての DynamoDB Streams リソースへのアクセスも付与します。

1. [Lambda コンソール](https://console.aws.amazon.com/lambda/)で、DynamoDB ストリーム内のレコードを処理する AWS Lambda 関数を作成し、実行ロールのセットアップ中に、前のステップで作成したロールを選択します。

1. Lambda 関数の実行ロールをアカウント B の DynamoDB Streams の所有者に提供して、クロスアカウント読み取りアクセス用のリソースベースのポリシーを設定します。

1. Lambda 関数のセットアップを完了します。

**アカウント B の DynamoDB ストリーム**

1. Lambda 関数を呼び出すアカウント A からクロスアカウントの Lambda 実行ロールを取得します。

1. アカウント B の Amazon DynamoDB コンソールで、Lambda クロスアカウントトリガーのテーブルを選択します。**[エクスポートおよびストリーム]** タブで、DynamoDB ストリーム ARN を見つけます。DynamoDB Streams のステータスがオンになっていることを確認し、リソースポリシーに必要なフルストリーム ARN を書き留めます。

1. **[アクセス許可]** タブで、**[ストリームポリシーを作成]** ボタンをクリックしてビジュアルポリシーエディタを起動します。**[新しいステートメントを追加]** ボタンをクリックするか、既に存在する場合はポリシーを編集します。

1. アカウント A の Lambda 実行ロールをプリンシパルとして指定するポリシーを作成し、必要な DynamoDB Streams アクションを付与します。`dynamodb:DescribeStream`、`dynamodb:GetRecords`、`dynamodb:GetShardIterator`、`dynamodb:ListShards` アクションを必ず含めてください。DynamoDB Streams のリソースポリシーの例の詳細については、「[DynamoDB リソースベースのポリシーの例](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html)」を参照してください。

**注記**  
[コントロールプレーン API](HowItWorks.API.md#HowItWorks.API.ControlPlane) のクロスアカウントアクセスでは、1 秒あたりのトランザクション数 (TPS) の上限が低く、500 リクエストです。

# DynamoDB でリソースベースのポリシーでパブリックアクセスをブロックする
<a name="rbac-bpa-rbp"></a>

[ブロックパブリックアクセス (BPA)](#rbac-bpa-rbp) は、[Amazon Web Services (AWS)](https://aws.amazon.com/) アカウント全体で DynamoDB のテーブル、インデックス、ストリームへのパブリックアクセスを許可するリソースベースのポリシーを特定し、アタッチされないように防ぐ機能です。BPA を使用すると、DynamoDB リソースへのパブリックアクセスを阻止できます。BPA はリソースベースのポリシーの作成時や変更時にチェックを行い、DynamoDB のセキュリティ体制の改善に貢献します。

BPA は[自動推論](https://aws.amazon.com/what-is/automated-reasoning/)を活用して、リソースベースのポリシーで許可されるアクセスを分析し、該当するアクセス許可がリソースベースのポリシーの管理時に見つかった場合は警告します。分析では、リソースベースのポリシーのステートメント、アクション、ポリシーで使用されている条件キーセットをすべてまたいでアクセスを検証します。

**重要**  
BPA は、DynamoDB リソース (テーブル、インデックス、ストリームなど) に直接アタッチされたリソースベースのポリシーによってパブリックアクセスが許可されることがないように防いで、リソースを保護します。BPA を利用したうえでさらに、次のポリシーを注意深く調べて、パブリックアクセスが許可されていないことを確かめてください。  
関連する AWS プリンシパル (IAM ロールなど) にアタッチされているアイデンティティベースのポリシー
関連する AWS リソース (AWS Key Management Service (KMS) キーなど) にアタッチされているリソースベースのポリシー

[プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)に `*` エントリを含めないでください。または、指定された条件キーのいずれかでプリンシパルからリソースへのアクセスが制限されていることを確認する必要があります。リソースベースのポリシーが AWS アカウント 全体でテーブル、インデックス、またはストリームへのパブリックアクセスを許可している場合、ポリシー内の指定内容が修正され、非パブリックと判断されない限り、そのポリシーの作成または変更は阻止されます。

`Principal` ブロック内に 1 つ以上のプリンシパルを指定することで、ポリシーを非パブリックにすることができます。次のリソースベースのポリシーの例では、2 つのプリンシパルを指定することで、パブリックアクセスをブロックしています。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "123456789012",
      "111122223333"
    ]
  },
  "Action": "dynamodb:*",
  "Resource": "*"
}
```

特定の条件キーを指定してアクセスを制限するポリシーも、パブリックとは見なされません。リソースベースのポリシーで指定されているプリンシパルを評価するほかに、以下の[信頼できる条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)も、リソースベースのポリシーが付与するアクセスが非パブリックであるという評価の補足に使用できます。
+ `aws:PrincipalAccount`
+ `aws:PrincipalArn`
+ `aws:PrincipalOrgID`
+ `aws:PrincipalOrgPaths`
+ `aws:SourceAccount`
+ `aws:SourceArn`
+ `aws:SourceVpc`
+ `aws:SourceVpce`
+ `aws:UserId`
+ `aws:PrincipalServiceName`
+ `aws:PrincipalServiceNamesList`
+ `aws:PrincipalIsAWSService`
+ `aws:Ec2InstanceSourceVpc`
+ `aws:SourceOrgID`
+ `aws:SourceOrgPaths`

さらに、リソースベースのポリシーが非パブリックとなるには、Amazon リソースネーム (ARN) と文字列キーの値にワイルドカードや変数が含まれていてはいけません。リソースベースのポリシーで `aws:PrincipalIsAWSService` キーが使用されている場合は、キー値を true に設定する必要があります。

次のポリシーでは、指定されたアカウントのユーザー `John` にアクセスが限定されています。この条件により `Principal` が制限されるため、パブリックとは見なされません。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "*"
  },
  "Action": "dynamodb:*",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "aws:PrincipalArn": "arn:aws:iam::123456789012:user/John"
    }
  }
}
```

次の例は非パブリックのリソースベースのポリシーです。`StringEquals` 演算子を使用して `sourceVPC` を制限しています。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "dynamodb:*",
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
      "Condition": {
        "StringEquals": {
          "aws:SourceVpc": [
            "vpc-91237329"
          ]
        }
      }
    }
  ]
}
```

------

# リソースベースのポリシーでサポートされる DynamoDB API オペレーション
<a name="rbac-iam-actions"></a>

このトピックでは、リソースベースのポリシーでサポートされる API オペレーションを示します。ただし、クロスアカウントアクセスの場合、リソースベースのポリシーで使用できる DynamoDB API は特定のセットに限られます。リソースベースのポリシーをリソースタイプ (バックアップやインポートなど) にアタッチすることはできません。これらのリソースタイプで動作する API に対応する IAM アクションは、リソースベースのポリシーでサポートされる IAM アクションからは除外されます。テーブル管理者は同一アカウント内で内部テーブル設定を構成するため、[UpdateTimeToLive](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTimeToLive.html) や [DisableKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DisableKinesisStreamingDestination.html) などの API は、リソースベースのポリシーによるクロスアカウントアクセスに対応していません。

クロスアカウントアクセスに対応した DynamoDB データプレーン API とコントロールプレーン API では、テーブル名のオーバーロードにも対応しています。そのため、テーブル名の代わりにテーブル ARN を指定することができます。これらの API の `TableName` パラメータにテーブル ARN を指定できます。ただし、これらの API がすべてクロスアカウントアクセスに対応しているわけではありません。

**Topics**
+ [データプレーンの API オペレーション](#rbac-data-plane-actions)
+ [PartiQL API オペレーション](#rbac-partiql-actions)
+ [コントロールプレーンの API オペレーション](#rbac-control-plane-actions)
+ [バージョン 2019.11.21 (現行) のグローバルテーブルの API オペレーション](#rbac-current-global-table-actions)
+ [バージョン 2017.11.29 (レガシー) のグローバルテーブルの API オペレーション](#rbac-legacy-global-table-actions)
+ [タグの API オペレーション](#rbac-tags-actions)
+ [バックアップと復元の API オペレーション](#rbac-backup-restore-actions)
+ [継続的バックアップ/復元 (PITR) の API オペレーション](#rbac-continuous-backup-restore-actions)
+ [寄稿者のインサイトの API オペレーション](#rbac-contributor-insights-actions)
+ [エクスポートの API オペレーション](#rbac-export-actions)
+ [インポートの API オペレーション](#rbac-import-actions)
+ [Amazon Kinesis Data Streams の API オペレーション](#rbac-kinesis-actions)
+ [リソースベースのポリシーの API オペレーション](#rbac-rbp-actions)
+ [Time-to-Live の API オペレーション](#rbac-ttl-actions)
+ [その他の API オペレーション](#rbac-other-actions)
+ [DynamoDB Streams の API オペレーション](#rbac-ds-actions)

## データプレーンの API オペレーション
<a name="rbac-data-plane-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[データプレーン](HowItWorks.API.md#HowItWorks.API.DataPlane)の API オペレーションが提供する API レベルのサポートをまとめています。


| データプレーン - テーブル/インデックス API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DeleteItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html)   | あり | はい | 
|   [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)   | あり | はい | 
|   [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)   | あり | はい | 
|   [クエリ](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html):   | あり | はい | 
|   [Scan](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html)   | あり | はい | 
|   [UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html)   | あり | はい | 
|   [TransactGetItems](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactGetItems.html)   | あり | はい | 
|   [TransactWriteItems](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html)   | あり | はい | 
|   [BatchGetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html)   | あり | はい | 
|   [BatchWriteItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html)   | あり | はい | 

## PartiQL API オペレーション
<a name="rbac-partiql-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[PartiQL](HowItWorks.API.md#HowItWorks.API.DataPlane.partiql) API オペレーションが提供する API レベルのサポートをまとめています。


| PartiQL API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [BatchExecuteStatement](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchExecuteStatement.html)   | はい | なし | 
|   [ExecuteStatement](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html)   | はい | なし | 
|   [ExecuteTransaction](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteTransaction.html)   | はい | なし | 

## コントロールプレーンの API オペレーション
<a name="rbac-control-plane-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[コントロールプレーン](HowItWorks.API.md#HowItWorks.API.ControlPlane)の API オペレーションが提供する API レベルのサポートをまとめています。


| コントロールプレーン - テーブル API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html)   | いいえ | いいえ | 
|   [DeleteTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteTable.html)   | あり | はい | 
|   [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html)   | あり | はい | 
|   [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html)   | あり | はい | 

## バージョン 2019.11.21 (現行) のグローバルテーブルの API オペレーション
<a name="rbac-current-global-table-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[バージョン 2019.11.21 (現行) のグローバルテーブル](GlobalTables.md)の API オペレーションが提供する API レベルのサポートをまとめています。


| バージョン 2019.11.21 (現行) のグローバルテーブル API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeTableReplicaAutoScaling](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTableReplicaAutoScaling.html)   | はい | なし | 
|   [UpdateTableReplicaAutoScaling](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTableReplicaAutoScaling.html)   | はい | なし | 

## バージョン 2017.11.29 (レガシー) のグローバルテーブルの API オペレーション
<a name="rbac-legacy-global-table-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[バージョン 2017.11.29 (レガシー) のグローバルテーブル](globaltables.V1.md)の API オペレーションが提供する API レベルのサポートをまとめています。


| バージョン 2017.11.29 (レガシー) のグローバルテーブル API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [CreateGlobalTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateGlobalTable.html)   | いいえ | いいえ | 
|   [DescribeGlobalTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeGlobalTable.html)   | いいえ | いいえ | 
|   [DescribeGlobalTableSettings](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeGlobalTableSettings.html)   | いいえ | いいえ | 
|   [ListGlobalTables](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListGlobalTables.html)   | いいえ | いいえ | 
|   [UpdateGlobalTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateGlobalTable.html)   | いいえ | いいえ | 
|   [UpdateGlobalTableSettings](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateGlobalTableSettings.html)   | いいえ | いいえ | 

## タグの API オペレーション
<a name="rbac-tags-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[タグ](Tagging.Operations.md)に関連する API オペレーションが提供する API レベルのサポートをまとめています。


| タグの API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [ListTagsOfResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListTagsOfResource.html)   | あり | はい | 
|   [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html)   | あり | はい | 
|   [UntagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UntagResource.html)   | あり | はい | 

## バックアップと復元の API オペレーション
<a name="rbac-backup-restore-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[バックアップと復元](Backup-and-Restore.md)に関連する API オペレーションが提供する API レベルのサポートをまとめています。


| バックアップと復元の API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [CreateBackup](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateBackup.html)   | はい | なし | 
|   [DescribeBackup](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeBackup.html)   | いいえ | いいえ | 
|   [DeleteBackup](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteBackup.html)   | いいえ | いいえ | 
|  [RestoreTableFromBackup](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableFromBackup.html)  | いいえ | いいえ | 

## 継続的バックアップ/復元 (PITR) の API オペレーション
<a name="rbac-continuous-backup-restore-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[継続的バックアップ/復元 (PITR)](Point-in-time-recovery.md) に関連する API オペレーションが提供する API レベルのサポートをまとめています。


| 継続的バックアップ/復元 (PITR) の API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeContinuousBackups](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeContinuousBackups.html)   | はい | なし | 
|   [RestoreTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableToPointInTime.html)   | はい | なし | 
|   [UpdateContinuousBackups](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateContinuousBackups.html)   | はい | なし | 

## 寄稿者のインサイトの API オペレーション
<a name="rbac-contributor-insights-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[継続的バックアップ/復元 (PITR)](Point-in-time-recovery.md) に関連する API オペレーションが提供する API レベルのサポートをまとめています。


| 寄稿者のインサイトの API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeContributorInsights](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeContributorInsights.html)   | はい | なし | 
|   [ListContributorInsights](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListContributorInsights.html)   | いいえ | いいえ | 
|   [UpdateContributorInsights](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateContributorInsights.html)   | はい | なし | 

## エクスポートの API オペレーション
<a name="rbac-export-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、エクスポートの API オペレーションが提供する API レベルのサポートをまとめています。


| エクスポート API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeExport](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeExport.html)   | いいえ | いいえ | 
|   [ExportTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExportTableToPointInTime.html)   | はい | なし | 
|   [ListExports](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListExports.html)   | いいえ | いいえ | 

## インポートの API オペレーション
<a name="rbac-import-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、インポートの API オペレーションが提供する API レベルのサポートをまとめています。


| インポート API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeImport](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeImport.html)   | いいえ | いいえ | 
|   [ImportTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ImportTable.html)   | いいえ | いいえ | 
|   [ListImports](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListImports.html)   | いいえ | いいえ | 

## Amazon Kinesis Data Streams の API オペレーション
<a name="rbac-kinesis-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、Kinesis Data Streams の API オペレーションが提供する API レベルのサポートをまとめています。


| Kinesis API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeKinesisStreamingDestination.html)   | はい | なし | 
|   [DisableKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DisableKinesisStreamingDestination.html)   | はい | なし | 
|   [EnableKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_EnableKinesisStreamingDestination.html)   | はい | なし | 
|   [UpdateKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateKinesisStreamingDestination.html)   | はい | なし | 

## リソースベースのポリシーの API オペレーション
<a name="rbac-rbp-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、リソースベースのポリシーの API オペレーションが提供する API レベルのサポートをまとめています。


| リソースベースのポリシーの API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [GetResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetResourcePolicy.html)   | はい | なし | 
|   [PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html)   | はい | なし | 
|   [DeleteResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteResourcePolicy.html)   | はい | なし | 

## Time-to-Live の API オペレーション
<a name="rbac-ttl-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、[Time to Live](TTL.md) (TTL) の API オペレーションが提供する API レベルのサポートをまとめています。


| TTL API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeTimeToLive](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTimeToLive.html)   | はい | なし | 
|   [UpdateTimeToLive](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTimeToLive.html)   | はい | なし | 

## その他の API オペレーション
<a name="rbac-other-actions"></a>

次の表は、リソースベースのポリシーとクロスアカウントアクセスに対して、その他の API オペレーションが提供する API レベルのサポートをまとめています。


| その他の API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeLimits](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeLimits.html)   | いいえ | いいえ | 
|   [DescribeEndpoint](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeEndpoints.html)   | いいえ | いいえ | 
|   [ListBackups](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListBackups.html)   | いいえ | いいえ | 
|   [ListTables](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListTables.html)   | いいえ | いいえ | 

## DynamoDB Streams の API オペレーション
<a name="rbac-ds-actions"></a>

次の表には、リソースベースのポリシーとクロスアカウントアクセスに対する DynamoDB Streams API の API レベルのサポートをまとめています。


| DynamoDB Streams API | リソースベースのポリシーのサポート | クロスアカウントのサポート | 
| --- | --- | --- | 
|   [DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html)   | あり | はい | 
|   [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html)   | あり | はい | 
|   [GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html)   | あり | はい | 
|   [ListStreams](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_ListStreams.html)   | いいえ | なし | 

# IAM アイデンティティベースのポリシーと DynamoDB リソースベースのポリシーによる認可
<a name="rbac-auth-iam-id-based-policies-DDB"></a>

**アイデンティティベースのポリシー**はアイデンティティ (IAM ユーザー、ユーザーグループ、ロールなど) にアタッチされます。これらは、アイデンティティが実行できるアクション、実行対象となるリソース、実行条件を制御する IAM ポリシードキュメントです。アイデンティティベースのポリシーには、[管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html)ポリシーまたは[インライン](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies)ポリシーがあります。

**リソースベースのポリシー**は、リソース (DynamoDB テーブルなど) にアタッチする IAM ポリシードキュメントです。これらのポリシーでは、そのリソースに対して特定のアクションを実行するために指定されたプリンシパルのアクセス許可を付与するとともに、このアクセス許可が適用される条件を定義します。例えば、DynamoDB テーブルのリソースベースのポリシーには、そのテーブルに関連付けられたインデックスも含まれます。リソースベースのポリシーはインラインポリシーです。マネージド型のリソースベースのポリシーはありません。

これらのポリシーの詳細については、「IAM ユーザーガイド**」の「[アイデンティティベースおよびリソースベースのポリシー」](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)を参照してください。

IAM プリンシパルがリソース所有者と同じアカウントに属している場合、そのリソースへのアクセス権限の指定には、リソースベースのポリシーで事足ります。さらに、IAM アイデンティティベースのポリシーをリソースベースのポリシーと併せて用意しておくこともできます。クロスアカウントアクセスの場合は、アイデンティティポリシーとリソースポリシーの両方でアクセスを明示的に許可する必要があります。詳細については、「[DynamoDB でリソースベースのポリシーを使用したクロスアカウントアクセス](rbac-cross-account-access.md)」に記載されています。両タイプのポリシーを併用する場合、「[アカウント内でのリクエストの許可または拒否の決定](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow)」の解説通りにポリシーが評価されます。

**重要**  
アイデンティティベースのポリシーが DynamoDB テーブルへの無条件アクセス (条件なしの `dynamodb:GetItem` など) を許可する場合、`dynamodb:Attributes` への条件付きアクセスを許可するリソースベースのポリシーは、そのアクセスを制限しません。アイデンティティベースのポリシーの無条件許可が優先され、リソースベースのポリシーの条件は制限として適用されません。特定の属性へのアクセスを制限するには、リソースベースのポリシーの条件付き `Deny` ステートメントのみに依存するのではなく、明示的な `Allow` ステートメントを使用します。

# DynamoDB リソースベースのポリシーの例
<a name="rbac-examples"></a>

リソースベースのポリシーの `Resource` フィールドで ARN を指定した場合は、その ARN がアタッチ先の DynamoDB リソースの ARN と一致する場合にのみ、ポリシーが有効になります。

**注記**  
*イタリック体*のテキストを、リソース固有の情報に必ず置き換えてください。

## テーブルのリソースベースのポリシー
<a name="rbac-examples-get"></a>

次のリソースベースのポリシーは、*MusicCollection* という名前の DynamoDB テーブルにアタッチされています。IAM ユーザーの *John* と *Jane* に対して、*MusicCollection* リソースで [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) アクションと [BatchGetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html) アクションを実行するアクセス許可を付与します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
        "Effect": "Allow",
        "Principal": {
          "AWS": [
            "arn:aws:iam::111122223333:user/username",
            "arn:aws:iam::111122223333:user/Jane"
          ]
        },
        "Action": [
          "dynamodb:GetItem",
          "dynamodb:BatchGetItem"
        ],
        "Resource": [
          "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
        ]
    }
  ]
}
```

------

## ストリームのリソースベースのポリシー
<a name="rbac-examples-streams"></a>

次のリソースベースのポリシーは、`2024-02-12T18:57:26.492` という名前の DynamoDB ストリームにアタッチされています。IAM ユーザーの *John* と *Jane* に対して、`2024-02-12T18:57:26.492` リソースで [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html)、[GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html)、[DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html) の API アクションを実行するアクセス許可を付与します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/username",
          "arn:aws:iam::111122223333:user/Jane"
        ]
      },
      "Action": [
        "dynamodb:DescribeStream",
        "dynamodb:GetRecords",
        "dynamodb:GetShardIterator"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492"
      ]
    }
  ]
}
```

------

## 指定されたリソースに対するあらゆるアクションの実行権限を付与するリソースベースのポリシー
<a name="rbac-examples-wildcard"></a>

テーブルと、テーブルに関連付けられたすべてのインデックスに対するすべてのアクションの実行をユーザーに許可する場合は、ワイルドカード (\$1) を使用して、テーブルに関連するアクションとリソースを表すことができます。リソースにワイルドカード文字を使用した場合、該当する DynamoDB テーブルとそのすべての関連インデックス (未作成のものも含む) へのアクセスがユーザーに許可されます。例えば、次のポリシーは、ユーザー *John* に対して、*MusicCollection* テーブルとそのすべてのインデックス (今後作成されるインデックスを含む) に対するあらゆるアクションの実行権限を付与します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/role-name"
      },
      "Action": "dynamodb:*",
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/index/index-name"
      ]
    }
  ]
}
```

------

## クロスアカウントアクセスのリソースベースのポリシー
<a name="rbac-examples-cross-account"></a>

クロスアカウントの IAM アイデンティティに対して、DynamoDB リソースへのアクセス権限を指定できます。例えば、信頼できるアカウントのユーザーが、特定の項目とその項目内の特定の属性のみにアクセスするという条件で、テーブルの内容の読み取り権限を取得できるようにする場合が考えられます。次のポリシーでは、信頼できる AWS アカウント ID *111111111111* のユーザー *John* に対して、[GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) API を使用してアカウント *123456789012* のテーブルのデータにアクセスすることを許可します。このポリシーでは、プライマリキーが *Jane* の項目のみに該当ユーザーがアクセスして、属性 `Artist` と `SongTitle` のみを取得可能であり、その他の属性は取得できないようになっています。

**重要**  
`SPECIFIC_ATTRIBUTES` 条件を指定しない場合は、返された項目のすべての属性が表示されます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountTablePolicy",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/John"
            },
            "Action": "dynamodb:GetItem",
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": "Jane",
                    "dynamodb:Attributes": [
                        "Artist",
                        "SongTitle"
                    ]
                },
                "StringEquals": {
                    "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
                }
            }
        }
    ]
}
```

------

前述のリソースベースのポリシーに加えて、クロスアカウントアクセスを実現するためには、ユーザー *John* にアタッチしたアイデンティティベースのポリシーでも `GetItem` API アクションを許可する必要があります。以下は、ユーザー *John* にアタッチする必要があるアイデンティティベースのポリシーの例です。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountIdentityBasedPolicy",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": "Jane",
                    "dynamodb:Attributes": [
                        "Artist",
                        "SongTitle"
                    ]
                },
                "StringEquals": {
                    "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
                }
            }
        }
    ]
}
```

------

ユーザー John は、アカウント *123456789012* のテーブル *MusicCollection* にアクセスするため、`table-name` パラメータにテーブル ARN を指定して `GetItem` リクエストを行うことができます。

```
aws dynamodb get-item \
    --table-name arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \
    --key '{"Artist": {"S": "Jane"}' \
    --projection-expression 'Artist, SongTitle' \
    --return-consumed-capacity TOTAL
```

## IP アドレス条件を指定したリソースベースのポリシー
<a name="rbac-examples-conditions"></a>

条件を適用して、発信元の IP アドレス、仮想プライベートクラウド (VPC)、VPC エンドポイント (VPCE) を制限できます。リクエストの発信元のアドレスに基づいてアクセス許可を指定できます。例えば、特定の IP ソース (企業の VPN エンドポイントなど) がアクセス元である場合に限り、ユーザーに DynamoDB リソースへのアクセスを許可したい場合が考えられます。これらの IP アドレスを `Condition` ステートメントに指定します。

次の例では、ユーザー *John* に対して、発信元 IP が `54.240.143.0/24` および `2001:DB8:1234:5678::/64` である場合に任意の DynamoDB リソースへのアクセスを許可します。

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

****  

```
{
  "Id":"PolicyId2",
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Sid":"AllowIPmix",
      "Effect":"Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:user/username"
      },
      "Action":"dynamodb:*",
      "Resource":"*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "54.240.143.0/24",
            "2001:DB8:1234:5678::/64"
          ]
        }
      }
    }
  ]
}
```

------

また、発信元が特定の VPC エンドポイント (*vpce-1a2b3c4d* など) 以外である場合に、DynamoDB リソースへのアクセスを一切拒否することもできます。

**重要**  
IPv6 専用の環境で IP ベースのリソースポリシーを持つ DynamoDB テーブルで DAX を使用する場合は、追加のアクセスルールを設定する必要があります。リソースポリシーがテーブルの IPv4 アドレス空間 `0.0.0.0/0` へのアクセスを制限する場合は、DAX クラスターに関連付けられた IAM ロールのアクセスを許可する必要があります。ポリシーに `ArnNotEquals` 条件を追加して、DAX が DynamoDB テーブルへのアクセスを維持できるようにします。詳細については、「[DAX と IPv6](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAX.create-cluster.DAX_and_IPV6.html)」を参照してください。

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

****  

```
{
  "Id":"PolicyId",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessToSpecificVPCEOnly",
      "Principal": "*",
      "Action": "dynamodb:*",
      "Effect": "Deny",
      "Resource": "*",
      "Condition": {
        "StringNotEquals":{
          "aws:sourceVpce":"vpce-1a2b3c4d"
        }
      }
    }
  ]
}
```

------

## IAM ロールを使用するリソースベースのポリシー
<a name="rbac-examples-iam"></a>

リソースベースのポリシーで IAM サービスロールを指定することもできます。このロールを引き受ける IAM エンティティは、そのロールに指定されているアクションのみを、リソースベースのポリシーで指定されているリソースセットに限定して実行できます。

次の例では、IAM エンティティが *MusicCollection* と *MusicCollection* の DynamoDB リソースですべての DynamoDB アクションを実行することを許可しています。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111122223333:role/role-name" },
      "Action": "dynamodb:*",
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/*"
      ]
    }
  ]
}
```

------

# DynamoDB リソースベースのポリシーの考慮事項
<a name="rbac-considerations"></a>

DynamoDB リソースに対してリソースベースのポリシーを定義する際には、以下の点を考慮してください。

**一般的な考慮事項**
+ リソースベースのポリシードキュメントでサポートされる最大サイズは 20 KB です。DynamoDB では、この上限に照らしてポリシーのサイズを計算する際に空白はカウントされません。
+ 特定のリソースのポリシーの更新が 2 回目以降の場合、同じリソースに対するそのポリシーの前回の更新が正常に終わってから 15 秒間は更新できません。
+ 現時点では、リソースベースのポリシーは既存のストリームにのみアタッチできます。作成中のストリームにポリシーをアタッチすることはできません。

**グローバルテーブルに関する考慮事項**
+ リソースベースのポリシーは、[グローバルテーブルバージョン 2017.11.29 (レガシー)](globaltables_HowItWorks.md) のレプリカではサポートされていません。
+ リソースベースのポリシー内で、グローバルテーブルのデータをレプリケートするアクションが DynamoDB のサービスにリンクされたロール (SLR) に対して拒否されている場合、レプリカの追加または削除はエラーで失敗します。
+ [AWS::DynamoDB::GlobalTable](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html) リソースでは、スタックの更新を行うリージョン以外のリージョンでは、スタックの更新時にレプリカの作成と、そのレプリカへのリソースベースのポリシーの追加を同時に行うことはできません。

**クロスアカウントに関する考慮事項**
+ リソースベースのポリシーを使用したクロスアカウントアクセスでは、AWS マネージドキーで暗号化したテーブルはサポートされません。AWS KMS のマネージドポリシーへのクロスアカウントアクセスは許可できないからです。

**CloudFormation に関する考慮事項**
+ リソースベースのポリシーは[ドリフト検出](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html#)には対応していません。AWS CloudFormation スタックテンプレートの外部でリソースベースのポリシーを更新した場合は、CloudFormation スタックに変更内容を反映させる必要があります。
+ リソースベースのポリシーは、アウトオブバンドの変更に対応していません。CloudFormation テンプレートの外部でポリシーを追加、更新、または削除しても、テンプレート内のポリシーに変更がない限り、変更は上書きされません。

  例えば、テンプレートに含まれているリソースベースのポリシーを、後からテンプレートの外部で更新したとします。テンプレート内のポリシーを変更しない限り、DynamoDB 内の更新済みポリシーはテンプレート内のポリシーと同期されません。

  逆に、テンプレートにリソースベースのポリシーは含まれていないが、テンプレートの外部でポリシーを追加したとします。このポリシーは、テンプレートに追加しない限りは、DynamoDB から削除されることはありません。テンプレートにポリシーを追加してスタックを更新すると、DynamoDB の既存のポリシーが、テンプレートで定義されているポリシーと一致するように更新されます。

# DynamoDB リソースベースのポリシーに関するベストプラクティス
<a name="rbac-best-practices"></a>

このトピックでは、DynamoDB リソースに対するアクセス許可と、それらのリソースに対して実行できるアクションを定義する際のベストプラクティスについて説明します。

## DynamoDB リソースへのアクセス制御を簡素化する
<a name="rbac-simplify-access-control"></a>

DynamoDB リソースにアクセスする必要がある AWS Identity and Access Management プリンシパルがリソース所有者と同じ AWS アカウント に属している場合、プリンシパルごとに IAM アイデンティティベースポリシーを用意する必要はありません。該当するリソースにリソースベースのポリシーをアタッチすれば十分です。このように構成すれば、アクセス制御が簡単になります。

## リソースベースのポリシーで DynamoDB リソースを保護する
<a name="rbac-protect"></a>

 DynamoDB のすべてのテーブルとストリームに対してリソースベースのポリシーを作成し、これらのリソースへのアクセスを制御します。リソースベースのポリシーのおかげで、アクセス許可をリソース単位で一元管理し、DynamoDB のテーブル、インデックス、ストリームへのアクセス制御を簡素化し、管理オーバーヘッドを削減できます。リソースベースのポリシーがテーブルまたはストリームに対して指定されていない場合、そのテーブルやストリームへのアクセスは、IAM プリンシパルに関連付けられたアイデンティティベースのポリシーでアクセスが許可されていない限り、暗黙的に拒否されます。

## 最小特権アクセス許可を適用する
<a name="rbac-least-privilege"></a>

DynamoDB リソースに対するリソースベースのポリシーでアクセス許可を設定するときは、アクションの実行に必要なアクセス許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。その際、ワークロードやユースケースに必要なアクセス許可を検討しながら、大まかなアクセス許可から始めるとよいでしょう。ユースケースが成熟してきたら、最小特権になるように付与する権限を減らしていくことができます。

## 最小特権ポリシーの生成のためにクロスアカウントアクセスアクティビティを分析する
<a name="rbac-analyze-cross-account-access"></a>

IAM Access Analyzer は、リソースベースのポリシーで指定された外部エンティティへのクロスアカウントアクセスを報告します。また、情報が可視化されるため、アクセス許可を調整し、最小特権の原則を守るうえでも役立ちます。ポリシー生成の詳細については、「[IAM Access Analyzer ポリシーの生成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html)」を参照してください。

## IAM Access Analyzer を使用して最小特権ポリシーを生成する
<a name="rbac-iam-access-analyzer"></a>

タスクの実行に必要なアクセス許可のみを付与するには、AWS CloudTrail にログインしているアクセスアクティビティに基づいてポリシーを生成することができます。IAM Access Analyzer は、ポリシーで使用されるサービスとアクションを分析します。