

# DynamoDB でリソースベースのポリシーを使用したクロスアカウントアクセス
<a name="rbac-cross-account-access"></a>

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

IAM Access Analyzer を使用したポリシーの検証の詳細については、「IAM ユーザーガイド**」の「[IAM Access Analyzer ポリシーの検証](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)」を参照してください。IAM Access Analyzer によって返される警告、エラー、および提案のリストを表示するには、「[IAM Access Analyzer ポリシーチェックリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html)」を参照してください。

アカウント A のユーザー A に、アカウント B のテーブル B にアクセスするための [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) 権限を付与するには、以下の手順を実行します。

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

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

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

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

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

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

## クロスアカウントの AWS Lambda 関数を使用したアクセスを共有する
<a name="rbac-analyze-cross-account-lambda-access"></a>

**アカウント A の Lambda 関数**

1. [IAM コンソール](https://console.aws.amazon.com/iam/)に移動して、アカウント A のAWS Lambda 関数の [Lambda 実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)として使用される IAM ロールを作成します。必要な DynamoDB Streams と Lambda 呼び出しアクセス許可を持つマネージド IAM ポリシー `AWSLambdaDynamoDBExecutionRole` を追加します。このポリシーは、アカウント A でユーザーがアクセスする可能性のあるすべての DynamoDB Streams リソースへのアクセスも付与します。

1. [Lambda コンソール](https://console.aws.amazon.com/lambda/)で、DynamoDB ストリーム内のレコードを処理する AWS Lambda 関数を作成し、実行ロールのセットアップ中に、前のステップで作成したロールを選択します。

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

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

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

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

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

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

1. アカウント A の Lambda 実行ロールをプリンシパルとして指定するポリシーを作成し、必要な DynamoDB Streams アクションを付与します。`dynamodb:DescribeStream`、`dynamodb:GetRecords`、`dynamodb:GetShardIterator`、`dynamodb:ListShards` アクションを必ず含めてください。DynamoDB Streams のリソースポリシーの例の詳細については、「[DynamoDB リソースベースのポリシーの例](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html)」を参照してください。

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