DynamoDB でリソースベースのポリシーを使用したクロスアカウントアクセス - Amazon DynamoDB

DynamoDB でリソースベースのポリシーを使用したクロスアカウントアクセス

リソースベースのポリシーを使用して、異なる AWS アカウント で利用可能なリソースへのクロスアカウントアクセスを許可できます。リソースベースのポリシーで許可されているクロスアカウントアクセスについては、IAM Access Analyzer が該当リソースと同じ AWS リージョン にある場合は、IAM Access Analyzer で外部アクセスの検出結果としてすべて報告されます。IAM Access Analyzer は、IAM ポリシーの文法ベストプラクティスに照らしてポリシーチェックを行います。これらのチェックにより、機能的でセキュリティのベストプラクティスに準拠したポリシーを作成するのに、役立つ結果と実行可能なレコメンデーションが示されます。IAM Access Analyzer のアクティブな検出結果を DynamoDB コンソール[アクセス許可] タブで表示できます。

IAM Access Analyzer を使用したポリシーの検証の詳細については、「IAM ユーザーガイド」の「IAM Access Analyzer ポリシーの検証」を参照してください。IAM Access Analyzer によって返される警告、エラー、および提案のリストを表示するには、「IAM Access Analyzer ポリシーチェックリファレンス」を参照してください。

アカウント A のユーザー A に、アカウント B のテーブル B にアクセスするための GetItem 権限を付与するには、以下の手順を実行します。

  1. GetItem アクションの実行権限をユーザー A に付与するリソースベースのポリシーを、テーブル B にアタッチします。

  2. テーブル B に対して GetItem アクションを実行する権限をユーザー A に付与するアイデンティティベースのポリシーを、ユーザー A にアタッチします。

DynamoDB コンソールにある [外部アクセスをプレビュー] オプションを使用すると、リソースへのパブリックアクセスとクロスアカウントアクセスに新しいポリシーがどのように影響するかをプレビューできます。ポリシーを保存する前に、新しい IAM Access Analyzer の結果が導入されているかどうかや、既存の結果を解決するかどうかを確認できます。アクティブなアナライザーが表示されない場合は、[Access Analyzer へ移動] を選択し、[IAM Access Analyzer] でアカウントアナライザーを作成します。詳細については、「アクセスのプレビュー」を参照してください。

DynamoDB のデータプレーンとコントロールプレーンの API のテーブル名パラメータには、クロスアカウントのオペレーションをサポートするため、テーブルの完全な Amazon リソースネーム (ARN) を指定できます。完全な ARN ではなくテーブル名パラメータのみを指定した場合、API オペレーションは、リクエスタが属するアカウントの該当テーブルに対して実行されます。クロスアカウントアクセスを使用するポリシーの例については、「クロスアカウントアクセスのリソースベースのポリシー」を参照してください。

リソース所有者のアカウントは、別のアカウントのプリンシパルが所有者のアカウントの DynamoDB テーブルに対して読み書きを実行している場合にも課金されます。テーブルにプロビジョンドスループットが指定されている場合、所有者アカウントと他のアカウントのリクエスタからのすべてのリクエストの合計によって、リクエストをスロットリングするか (自動スケーリングが無効な場合)、スケールアップ/スケールダウンするか (自動スケーリングが有効な場合) が決まります。

リクエストは所有者アカウントとリクエスタアカウントの両方の CloudTrail ログに記録されるため、2 つのアカウントはそれぞれ、どちらのアカウントがどのデータにアクセスしたかを追跡できます。

クロスアカウントの AWS Lambda 関数を使用したアクセスを共有する

アカウント A の Lambda 関数

  1. IAM コンソールに移動して、アカウント A のAWS Lambda 関数の Lambda 実行ロールとして使用される IAM ロールを作成します。必要な DynamoDB Streams と Lambda 呼び出しアクセス許可を持つマネージド IAM ポリシー AWSLambdaDynamoDBExecutionRole を追加します。このポリシーは、アカウント A でユーザーがアクセスする可能性のあるすべての DynamoDB Streams リソースへのアクセスも付与します。

  2. Lambda コンソールで、DynamoDB ストリーム内のレコードを処理する AWS Lambda 関数を作成し、実行ロールのセットアップ中に、前のステップで作成したロールを選択します。

  3. Lambda 関数の実行ロールをアカウント B の DynamoDB Streams の所有者に提供して、クロスアカウント読み取りアクセス用のリソースベースのポリシーを設定します。

  4. Lambda 関数のセットアップを完了します。

アカウント B の DynamoDB ストリーム

  1. Lambda 関数を呼び出すアカウント A からクロスアカウントの Lambda 実行ロールを取得します。

  2. アカウント B の Amazon DynamoDB コンソールで、Lambda クロスアカウントトリガーのテーブルを選択します。[エクスポートおよびストリーム] タブで、DynamoDB ストリーム ARN を見つけます。DynamoDB Streams のステータスがオンになっていることを確認し、リソースポリシーに必要なフルストリーム ARN を書き留めます。

  3. [アクセス許可] タブで、[ストリームポリシーを作成] ボタンをクリックしてビジュアルポリシーエディタを起動します。[新しいステートメントを追加] ボタンをクリックするか、既に存在する場合はポリシーを編集します。

  4. アカウント A の Lambda 実行ロールをプリンシパルとして指定するポリシーを作成し、必要な DynamoDB Streams アクションを付与します。dynamodb:DescribeStreamdynamodb:GetRecordsdynamodb:GetShardIteratordynamodb:ListShards アクションを必ず含めてください。DynamoDB Streams のリソースポリシーの例の詳細については、「DynamoDB リソースベースのポリシーの例」を参照してください。

注記

コントロールプレーン API のクロスアカウントアクセスでは、1 秒あたりのトランザクション数 (TPS) の上限が低く、500 リクエストです。