Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

DynamoDB テーブルとインデックスで ABAC を使用する例

フォーカスモード
DynamoDB テーブルとインデックスで ABAC を使用する例 - Amazon DynamoDB

次の例は、タグを使用して属性ベースの条件を実装するいくつかのユースケースを示しています。

例 1: aws:ResourceTag を使用してアクションを許可

aws:ResourceTag/tag-key 条件キーを使用して、IAM ポリシーで指定されたタグのキーと値のペアを、DynamoDB テーブルにアタッチされているキーと値のペアと比較できます。例えば、タグ条件が IAM ポリシーとテーブルで一致する場合、PutItem などの特定のアクションを許可できます。これを作成するには、次のステップを実行します。

Using the AWS CLI
  1. テーブルを作成します。次の例では、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
  2. このテーブルにタグを追加します。次の tag-resource AWS CLI コマンドの例では、タグのキーと値のペア Title: ProductManagermyMusicTable に追加します。

    aws dynamodb tag-resource --region us-east-1 --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable --tags Key=Title,Value=ProductManager
  3. 次の例に示すように、インラインポリシーを作成し、AmazonDynamoDBReadOnlyAccess AWS マネージドポリシーがアタッチされたロールに追加します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "StringEquals": { "aws:ResourceTag/Title": "ProductManager" } } } ] }

    このポリシーは、テーブルにアタッチされたタグキーと値がポリシーで指定されたタグと一致する場合に、テーブルに対する PutItem アクションを許可します。

  4. ステップ 3 で説明したポリシーを使用してロールを引き受けます。

  5. 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"} }} }'
  6. テーブルをスキャンして、項目がテーブルに追加されたかどうかを確認します。

    aws dynamodb scan --table-name myMusicTable --region us-east-1
Using the AWS SDK for Java 2.x
  1. テーブルを作成します。次の例では、CreateTable API を使用して myMusicTable という名前のテーブルを作成します。

    DynamoDbClient dynamoDB = DynamoDbClient.builder().region(region).build(); CreateTableRequest createTableRequest = CreateTableRequest.builder() .attributeDefinitions( Arrays.asList( AttributeDefinition.builder() .attributeName("id") .attributeType(ScalarAttributeType.S) .build() ) ) .keySchema( Arrays.asList( KeySchemaElement.builder() .attributeName("id") .keyType(KeyType.HASH) .build() ) ) .provisionedThroughput(ProvisionedThroughput.builder() .readCapacityUnits(5L) .writeCapacityUnits(5L) .build() ) .tableName("myMusicTable") .build(); CreateTableResponse createTableResponse = dynamoDB.createTable(createTableRequest); String tableArn = createTableResponse.tableDescription().tableArn(); String tableName = createTableResponse.tableDescription().tableName();
  2. このテーブルにタグを追加します。次の例の TagResource API は、タグのキーと値のペア Title: ProductManagermyMusicTable に追加します。

    TagResourceRequest tagResourceRequest = TagResourceRequest.builder() .resourceArn(tableArn) .tags( Arrays.asList( Tag.builder() .key("Title") .value("ProductManager") .build() ) ) .build(); dynamoDB.tagResource(tagResourceRequest);
  3. 次の例に示すように、インラインポリシーを作成し、AmazonDynamoDBReadOnlyAccess AWS マネージドポリシーがアタッチされたロールに追加します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "StringEquals": { "aws:ResourceTag/Title": "ProductManager" } } } ] }

    このポリシーは、テーブルにアタッチされたタグキーと値がポリシーで指定されたタグと一致する場合に、テーブルに対する PutItem アクションを許可します。

  4. ステップ 3 で説明したポリシーを使用してロールを引き受けます。

  5. PutItem API を使用して、項目を myMusicTable に配置します。

    HashMap<String, AttributeValue> info = new HashMap<>(); info.put("rating", AttributeValue.builder().s("9").build()); info.put("artists", AttributeValue.builder().ss(List.of("Acme Band","No One You Know").build()); info.put("release_date", AttributeValue.builder().s("2023-07-21").build()); HashMap<String, AttributeValue> itemValues = new HashMap<>(); itemValues.put("id", AttributeValue.builder().s("2023").build()); itemValues.put("title", AttributeValue.builder().s("Happy Day").build()); itemValues.put("info", AttributeValue.builder().m(info).build()); PutItemRequest putItemRequest = PutItemRequest.builder() .tableName(tableName) .item(itemValues) .build(); dynamoDB.putItem(putItemRequest);
  6. テーブルをスキャンして、項目がテーブルに追加されたかどうかを確認します。

    ScanRequest scanRequest = ScanRequest.builder() .tableName(tableName) .build(); ScanResponse scanResponse = dynamoDB.scan(scanRequest);
Using the AWS SDK for Python (Boto3)
  1. テーブルを作成します。次の例では、CreateTable API を使用して myMusicTable という名前のテーブルを作成します。

    create_table_response = ddb_client.create_table( AttributeDefinitions=[ { 'AttributeName': 'id', 'AttributeType': 'S' }, ], TableName='myMusicTable', KeySchema=[ { 'AttributeName': 'id', 'KeyType': 'HASH' }, ], ProvisionedThroughput={ 'ReadCapacityUnits': 5, 'WriteCapacityUnits': 5 }, ) table_arn = create_table_response['TableDescription']['TableArn']
  2. このテーブルにタグを追加します。次の例の TagResource API は、タグのキーと値のペア Title: ProductManagermyMusicTable に追加します。

    tag_resouce_response = ddb_client.tag_resource( ResourceArn=table_arn, Tags=[ { 'Key': 'Title', 'Value': 'ProductManager' }, ] )
  3. 次の例に示すように、インラインポリシーを作成し、AmazonDynamoDBReadOnlyAccess AWS マネージドポリシーがアタッチされたロールに追加します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "StringEquals": { "aws:ResourceTag/Title": "ProductManager" } } } ] }

    このポリシーは、テーブルにアタッチされたタグキーと値がポリシーで指定されたタグと一致する場合に、テーブルに対する PutItem アクションを許可します。

  4. ステップ 3 で説明したポリシーを使用してロールを引き受けます。

  5. PutItem API を使用して、項目を myMusicTable に配置します。

    put_item_response = client.put_item( TableName = 'myMusicTable' Item = { 'id': '2023', 'title': 'Happy Day', 'info': { 'rating': '9', 'artists': ['Acme Band','No One You Know'], 'release_date': '2023-07-21' } } )
  6. テーブルをスキャンして、項目がテーブルに追加されたかどうかを確認します。

    scan_response = client.scan( TableName='myMusicTable' )
  1. テーブルを作成します。次の例では、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
  2. このテーブルにタグを追加します。次の tag-resource AWS CLI コマンドの例では、タグのキーと値のペア Title: ProductManagermyMusicTable に追加します。

    aws dynamodb tag-resource --region us-east-1 --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable --tags Key=Title,Value=ProductManager
  3. 次の例に示すように、インラインポリシーを作成し、AmazonDynamoDBReadOnlyAccess AWS マネージドポリシーがアタッチされたロールに追加します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "StringEquals": { "aws:ResourceTag/Title": "ProductManager" } } } ] }

    このポリシーは、テーブルにアタッチされたタグキーと値がポリシーで指定されたタグと一致する場合に、テーブルに対する PutItem アクションを許可します。

  4. ステップ 3 で説明したポリシーを使用してロールを引き受けます。

  5. 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"} }} }'
  6. テーブルをスキャンして、項目がテーブルに追加されたかどうかを確認します。

    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 などの特定のアクションを許可できます。これを作成するには、次のステップを実行します。

Using the AWS CLI
  1. 次の例に示すように、インラインポリシーを作成し、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" } } } ] }
  2. "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
Using the AWS SDK for Python (Boto3)
  1. 次の例に示すように、インラインポリシーを作成し、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" } } } ] }
  2. "Owner": "John" のタグのキーと値のペアを含むテーブルを作成します。

    ddb_client = boto3.client('dynamodb') create_table_response = ddb_client.create_table( AttributeDefinitions=[ { 'AttributeName': 'id', 'AttributeType': 'S' }, ], TableName='myMusicTable', KeySchema=[ { 'AttributeName': 'id', 'KeyType': 'HASH' }, ], ProvisionedThroughput={ 'ReadCapacityUnits': 1000, 'WriteCapacityUnits': 500 }, Tags=[ { 'Key': 'Owner', 'Value': 'John' }, ], )
  1. 次の例に示すように、インラインポリシーを作成し、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" } } } ] }
  2. "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 リクエスト内に存在するため、インラインポリシーはユーザー JohnCreateTable アクションを実行することを許可します。

例 3: aws:TagKeys を使用してアクションを拒否

aws:TagKeys 条件キーを使用すると、リクエスト内のタグキーを IAM ポリシーで指定されたキーと比較できます。例えば、リクエストに特定のタグキーが存在しない場合、aws:TagKeys を使用して CreateTable などの特定のアクションを拒否できます。これを作成するには、次のステップを実行します。

Using the AWS CLI
  1. 次の例に示すように、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" } } } ] }
  2. ポリシーがアタッチされたロールを引き受け、タグキー 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
Using the AWS SDK for Python (Boto3)
  1. 次の例に示すように、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" } } } ] }
  2. ポリシーがアタッチされたロールを引き受け、タグキー Title を使用してテーブルを作成します。

    ddb_client = boto3.client('dynamodb') create_table_response = ddb_client.create_table( AttributeDefinitions=[ { 'AttributeName': 'id', 'AttributeType': 'S' }, ], TableName='myMusicTable', KeySchema=[ { 'AttributeName': 'id', 'KeyType': 'HASH' }, ], ProvisionedThroughput={ 'ReadCapacityUnits': 1000, 'WriteCapacityUnits': 500 }, Tags=[ { 'Key': 'Title', 'Value': 'ProductManager' }, ], )
  1. 次の例に示すように、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" } } } ] }
  2. ポリシーがアタッチされたロールを引き受け、タグキー 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 演算子のため、タグキー TitleDeny ポリシーに存在するタグキーと一致しません。そのため、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.
プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.