次の例は、タグを使用して属性ベースの条件を実装するいくつかのユースケースを示しています。
トピック
例 1: aws:ResourceTag を使用してアクションを許可
aws:ResourceTag/tag-key
条件キーを使用して、IAM ポリシーで指定されたタグのキーと値のペアを、DynamoDB テーブルにアタッチされているキーと値のペアと比較できます。例えば、タグ条件が IAM ポリシーとテーブルで一致する場合、PutItem などの特定のアクションを許可できます。これを作成するには、次のステップを実行します。
-
テーブルを作成します。次の例では、create-table AWS CLI コマンドを使用して、
myMusicTable
という名前のテーブルを作成します。aws dynamodb create-table \ --table-name myMusicTable \ --attribute-definitions AttributeName=id,AttributeType=S \ --key-schema AttributeName=id,KeyType=HASH \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --region
us-east-1
-
このテーブルにタグを追加します。次の tag-resource AWS CLI コマンドの例では、タグのキーと値のペア
Title: ProductManager
をmyMusicTable
に追加します。aws dynamodb tag-resource --region
us-east-1
--resource-arn arn:aws:dynamodb:us-east-1
:123456789012
:table/myMusicTable --tags Key=Title,Value=ProductManager -
次の例に示すように、インラインポリシーを作成し、AmazonDynamoDBReadOnlyAccess AWS マネージドポリシーがアタッチされたロールに追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "StringEquals": { "aws:ResourceTag/Title": "ProductManager" } } } ] }
このポリシーは、テーブルにアタッチされたタグキーと値がポリシーで指定されたタグと一致する場合に、テーブルに対する
PutItem
アクションを許可します。 -
ステップ 3 で説明したポリシーを使用してロールを引き受けます。
-
put-item AWS CLI コマンドを使用して、項目を
myMusicTable
に配置します。aws dynamodb put-item \ --table-name myMusicTable --region us-east-1 \ --item '{ "id": {"S": "2023"}, "title": {"S": "Happy Day"}, "info": {"M": { "rating": {"N": "9"}, "Artists": {"L": [{"S": "Acme Band"}, {"S": "No One You Know"}]}, "release_date": {"S": "2023-07-21"} }} }'
-
テーブルをスキャンして、項目がテーブルに追加されたかどうかを確認します。
aws dynamodb scan --table-name myMusicTable --region
us-east-1
ABAC がない場合
AWS アカウント で ABAC が有効になっていない場合、IAM ポリシーと DynamoDB テーブルのタグ条件が一致しません。結果として、AmazonDynamoDBReadOnlyAccess
ポリシーの影響により、PutItem
アクションは AccessDeniedException
を返します。
An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::123456789012:assumed-role/DynamoDBReadOnlyAccess/Alice is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable because no identity-based policy allows the dynamodb:PutItem action.
ABAC がある場合
AWS アカウントで ABAC が有効になっている場合、put-item
アクションは正常に完了し、テーブルに新しい項目を追加します。これは、IAM ポリシーとテーブルのタグ条件が一致すると、テーブルのインラインポリシーで PutItem
アクションが許可されるためです。
例 2: aws:RequestTag を使用してアクションを許可
aws:RequestTag/tag-key 条件キーを使用すると、リクエストで渡されたタグのキーと値のペアを、IAM ポリシーで指定されたタグペアと比較できます。例えば、タグ条件が一致しない場合は、aws:RequestTag
を使用して CreateTable
などの特定のアクションを許可できます。これを作成するには、次のステップを実行します。
-
次の例に示すように、インラインポリシーを作成し、AmazonDynamoDBReadOnlyAccess AWS マネージドポリシーがアタッチされたロールに追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:TagResource" ], "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "StringEquals": { "aws:RequestTag/Owner": "John" } } } ] }
-
"Owner": "John"
のタグのキーと値のペアを含むテーブルを作成します。aws dynamodb create-table \ --attribute-definitions AttributeName=ID,AttributeType=S \ --key-schema AttributeName=ID,KeyType=HASH \ --provisioned-throughput ReadCapacityUnits=1000,WriteCapacityUnits=500 \ --region
us-east-1
\ --tags Key=Owner,Value=John \ --table-name myMusicTable
ABAC がない場合
AWS アカウントで ABAC が有効になっていない場合、インラインポリシーと DynamoDB テーブルのタグ条件が一致しません。結果として、CreateTable
リクエストは失敗し、テーブルは作成されません。
An error occurred (AccessDeniedException) when calling the CreateTable operation: User: arn:aws:sts::123456789012:assumed-role/Admin/John is not authorized to perform: dynamodb:CreateTable on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable because no identity-based policy allows the dynamodb:CreateTable action.
ABAC がある場合
AWS アカウントで ABAC が有効になっている場合、テーブル作成リクエストは正常に完了します。"Owner": "John"
のタグのキーと値のペアが CreateTable
リクエスト内に存在するため、インラインポリシーはユーザー John
が CreateTable
アクションを実行することを許可します。
例 3: aws:TagKeys を使用してアクションを拒否
aws:TagKeys 条件キーを使用すると、リクエスト内のタグキーを IAM ポリシーで指定されたキーと比較できます。例えば、リクエストに特定のタグキーが存在しない場合、aws:TagKeys
を使用して CreateTable
などの特定のアクションを拒否できます。これを作成するには、次のステップを実行します。
-
次の例に示すように、AmazonDynamoDBFullAccess AWS 管理ポリシーがアタッチされているロールにカスタマー管理ポリシーを追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "dynamodb:CreateTable", "dynamodb:TagResource" ], "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "Null": { "aws:TagKeys": "false" }, "ForAllValues:StringNotEquals": { "aws:TagKeys": "CostCenter" } } } ] }
-
ポリシーがアタッチされたロールを引き受け、タグキー
Title
を使用してテーブルを作成します。aws dynamodb create-table \ --attribute-definitions AttributeName=ID,AttributeType=S \ --key-schema AttributeName=ID,KeyType=HASH \ --provisioned-throughput ReadCapacityUnits=1000,WriteCapacityUnits=500 \ --region
us-east-1
\ --tags Key=Title,Value=ProductManager \ --table-name myMusicTable
ABAC がない場合
AWS アカウントで ABAC が有効になっていない場合、DynamoDB は create-table
コマンドのタグキーを IAM に送信しません。Null
条件は、リクエストにタグがない場合に条件が false
と評価されることを保証します。Deny
ポリシーが一致しないため、create-table
コマンドは正常に完了します。
ABAC がある場合
AWS アカウントで ABAC が有効になっている場合、create-table
コマンドで渡されたタグキーは IAM に渡されます。タグキー Title
は、Deny
ポリシーに存在する条件ベースのタグキー CostCenter
に照らして評価されます。StringNotEquals
演算子のため、タグキー Title
は Deny
ポリシーに存在するタグキーと一致しません。そのため、CreateTable
アクションは失敗し、テーブルは作成されません。create-table
コマンドを実行すると、AccessDeniedException
が返されます。
An error occurred (AccessDeniedException) when calling the CreateTable operation: User: arn:aws:sts::123456789012:assumed-role/DynamoFullAccessRole/ProductManager is not authorized to perform: dynamodb:CreateTable on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable with an explicit deny in an identity-based policy.