リソースベースのポリシーを指定してテーブルを作成する - Amazon DynamoDB

リソースベースのポリシーを指定してテーブルを作成する

DynamoDB コンソール、CreateTable API、AWS CLI、AWS SDK、または AWS CloudFormation テンプレートを使用して、テーブルの作成時にリソースベースのポリシーを追加できます。

次の例では、create-table AWS CLI コマンドを使用して、MusicCollection という名前のテーブルを作成します。このコマンドでは、そのテーブルにリソースベースのポリシーを追加する resource-policy パラメータも指定されています。このポリシーは、ユーザー John に対して、該当のテーブルで RestoreTableToPointInTimeGetItemPutItem の 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\" } ] }"
  1. AWS Management Console にサインインして DynamoDB コンソール (https://console.aws.amazon.com/dynamodb/) を開きます。

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

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

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

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

  6. [リソースベースのポリシー] で、テーブルとそのインデックスへのアクセス許可を定義するポリシーを追加します。このポリシーでは、これらのリソースにアクセスできるユーザーと、各リソースに対して実行できるアクションを指定します。ポリシーを追加するには、以下のいずれかを実行します。

    • JSON ポリシードキュメントを入力するか貼り付けます。IAM ポリシー言語の詳細については、「IAM ユーザーガイド」の「JSON エディターを使用したポリシーの作成」を参照してください。

      ヒント

      「Amazon DynamoDB デベロッパーガイド」のリソースベースのポリシーの例を確認するには、[ポリシーの例] を選択してください。

    • [新しいステートメントを追加] を選択して新しいステートメントを追加し、提示されたフィールドに情報を入力します。このステップを、追加するステートメントの数だけ繰り返します。

    重要

    セキュリティ警告、エラー、提案がある場合は、ポリシーを保存する前に解決してください。

    次の IAM ポリシーの例では、ユーザー John に対して、テーブル MusicCollectionRestoreTableToPointInTimeGetItemPutItem の API アクションを実行することを許可しています。

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/John" }, "Action": [ "dynamodb:RestoreTableToPointInTime", "dynamodb:GetItem", "dynamodb:PutItem" ], "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection" } ] }
  7. (オプション) 新しいポリシーがリソースへのパブリックアクセスおよびクロスアカウントアクセスにどのように影響するかをプレビューするには、[外部アクセスをプレビュー] を選択します。ポリシーを保存する前に、新しい IAM Access Analyzer の結果が導入されているかどうかや、既存の結果を解決するかどうかを確認できます。アクティブなアナライザーが表示されない場合は、[Access Analyzer へ移動] を選択し、[IAM Access Analyzer] でアカウントアナライザーを作成します。詳細については、「アクセスのプレビュー」を参照してください。

  8. [Create table (テーブルの作成)] を選択します。

Using the AWS::DynamoDB::Table resource

次の CloudFormation テンプレートでは、AWS::DynamoDB::Table リソースを使用して、ストリームを有効にしたテーブルを作成します。このテンプレートでは、該当するテーブルとストリームの両方にアタッチされたリソースベースのポリシーも指定しています。

{ "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 リソースを使用してテーブルを作成し、リソースベースのポリシーを該当テーブルとそのストリームにアタッチします。

{ "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": "*" }] } } } } ] } } } }