DynamoDB リソースベースのポリシーの例 - Amazon DynamoDB

DynamoDB リソースベースのポリシーの例

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

注記

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

テーブルのリソースベースのポリシー

次のリソースベースのポリシーは、MusicCollection という名前の DynamoDB テーブルにアタッチされています。IAM ユーザーの JohnJane に対して、MusicCollection リソースで GetItem アクションと BatchGetItem アクションを実行する権限を付与します。

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

ストリームのリソースベースのポリシー

次のリソースベースのポリシーは、2024-02-12T18:57:26.492 という名前の DynamoDB ストリームにアタッチされています。IAM ユーザーの JohnJane に対して、2024-02-12T18:57:26.492 リソースで GetRecordsGetShardIteratorDescribeStream の API アクションを実行する権限を付与します。

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

指定されたリソースに対するあらゆるアクションの実行権限を付与するリソースベースのポリシー

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

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

クロスアカウントアクセスのリソースベースのポリシー

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

重要

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::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 アドレス条件を指定したリソースベースのポリシー

条件を適用して、発信元の 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":"arn:aws:iam::111111111111:user/", "Action":"dynamodb:*", "Resource":"*", "Condition": { "IpAddress": { "aws:SourceIp": [ "54.240.143.0/24", "2001:DB8:1234:5678::/64" ] } } } ] }

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

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

IAM ロールを使用するリソースベースのポリシー

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

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

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