DynamoDB リソースベースのポリシーの例
リソースベースのポリシーの Resource
フィールドで ARN を指定した場合は、その ARN がアタッチ先の DynamoDB リソースの ARN と一致する場合にのみ、ポリシーが有効になります。
イタリック体
のテキストを、リソース固有の情報に必ず置き換えてください。
テーブルのリソースベースのポリシー
次のリソースベースのポリシーは、MusicCollection
という名前の DynamoDB テーブルにアタッチされています。IAM ユーザーの John
と Jane
に対して、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 ユーザーの John
と Jane
に対して、2024-02-12T18:57:26.492
リソースで GetRecords、GetShardIterator、DescribeStream の 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
の項目のみに該当ユーザーがアクセスして、属性 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::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 エンティティが MusicCollection
と MusicCollection
の 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
/*"
]
}
]
}