翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon DynamoDB へのクロスアカウントアクセスを設定する
作成者: Shashi Dalmia (AWS)、Esteban Serna Parra (AWS)、Imhoertha Ojior (AWS)
概要
このパターンでは、リソースベースのポリシーを使用して Amazon DynamoDB へのクロスアカウントアクセスを設定する手順について説明します。DynamoDB を使用するワークロードでは、ワークロード分離戦略
DynamoDB のリソースベースのポリシーは、クロスアカウントワークロードのセキュリティ体制を大幅に簡素化します。このパターンでは、別のアカウントの DynamoDB データベーステーブルにデータを書き込む AWS アカウント ように AWS Lambda 関数を 1 つに設定する方法を示すステップとサンプルコードを示します。
前提条件と制限
前提条件
制約事項
一部の AWS のサービス は、すべてで利用できるわけではありません AWS リージョン。リージョンの可用性については、AWS のサービス 「リージョン別
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」ページを参照して、サービスのリンクを選択します。
アーキテクチャ
次の図は、単一アカウントアーキテクチャを示しています。 AWS Lambda、Amazon Elastic Compute Cloud (Amazon EC2)、DynamoDB はすべて同じアカウントにあります。このシナリオでは、Lambda 関数と Amazon EC2 インスタンスが DynamoDB にアクセスできます。DynamoDB テーブルへのアクセスを許可するには、IAM でアイデンティティベースのポリシーを作成するか、DynamoDB でリソースベースのポリシーを作成できます。

次の図は、マルチアカウントアーキテクチャを示しています。1 つの のリソースが別のアカウントの DynamoDB テーブルにアクセス AWS アカウント する必要がある場合は、DynamoDB でリソースベースのポリシーを設定して、必要なアクセスを許可する必要があります。たとえば、次の図では、リソースベースのポリシーを使用して、アカウント A の DynamoDB テーブルへのアクセスがアカウント B の Lambda 関数に許可されています。

このパターンでは、Lambda と DynamoDB 間のクロスアカウントアクセスについて説明します。両方のアカウントに適切なアクセス許可 AWS のサービス が設定されている場合は、他の にも同様の手順を使用できます。たとえば、アカウント A の Amazon Simple Storage Service (Amazon S3) バケットへのアクセスを Lambda 関数に許可する場合は、Amazon S3 でリソースベースのポリシーを作成し、アカウント B の Lambda 実行ロールにアクセス許可を追加できます。
ツール
AWS のサービス
Amazon DynamoDB は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
AWS Identity and Access Management (IAM) は、AWS リソースの使用を認証および許可されているユーザーを制御することで、AWS リソースへのアクセスを安全に管理します。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
コード
このパターンには、「追加情報」セクションのサンプルコードが含まれており、アカウント A の DynamoDB テーブルに書き込むようにアカウント B の Lambda 関数を設定する方法を示しています。コードは、説明とテストの目的でのみ提供されています。このパターンを本番環境に実装する場合は、コードを参照として使用し、独自の環境に合わせてカスタマイズします。
ベストプラクティス
DynamoDB ドキュメントのリソースベースのポリシーのベストプラクティスに従ってください。
最小特権の原則に従い、タスクの実行に必要な最小限のアクセス許可を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
アカウント B でポリシーを作成します。 | この IAM ポリシーは、アカウント A の DynamoDB テーブルの PutItem アクションを許可します。
| AWS 全般 |
アカウント B でロールを作成します。 | アカウント B の Lambda 関数は、この IAM ロールを使用してアカウント A の DynamoDB テーブルにアクセスします。
ロールの作成の詳細については、「IAM ドキュメント」を参照してください。 | AWS 全般 |
ロールの ARN を書き留めておきます。 |
| AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
DynamoDB テーブルを作成します。 | DynamoDB テーブルを作成するには、次の AWS CLI コマンドを使用します。
このコードサンプルで以下を置き換えます。
注記
テーブルの作成の詳細については、「DynamoDB のドキュメント」を参照してください。 | AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
DynamoDB にデータを書き込むLambda 関数を作成します。 |
Lambda 関数の作成についての詳細は、「Lambda ドキュメント」を参照してください。 | AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
リソースの削除 | このパターンで作成されたリソースに関連するコストが発生しないようにするには、次の操作を実行してこれらのリソースを削除します。
| AWS 全般 |
トラブルシューティング
問題 | ソリューション |
---|---|
Lambda 関数を作成すると、 | アカウント A の AWS リージョン と ID が正しく入力されていることを確認します。これらは DynamoDB テーブルの ARN の一部です。 |
関連リソース
「DynamoDB の使用を開始する」(DynamoDB ドキュメント)
Lambda の開始方法 (Lambda ドキュメント)
DynamoDB のリソースベースのポリシーの使用 (DynamoDB ドキュメント)DynamoDB
「IAM ポリシーの作成」(IAM ドキュメント)
「クロスアカウントポリシーの評価ロジック」(IAM ドキュメント)
「IAM JSON ポリシー要素のリファレンス」(IAM ドキュメント)
追加情報
「サンプルコード」
import boto3 from datetime import datetime dynamodb_client = boto3.client('dynamodb') def lambda_handler(event, context): now = datetime.now().isoformat() data = dynamodb_client.put_item(TableName='arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": now}}) return data
注記
DynamoDB クライアントがインスタンス化されると、テーブル名の代わりに DynamoDB テーブルの ARN が提供されます。これは、Lambda 関数が実行時に正しい DynamoDB テーブルに接続するために必要です。