同じ AWS アカウントで DynamoDB 環境を分離する IAM ポリシー
たとえば、各環境で、ProductCatalog
という名前のテーブルを独自のバージョンで維持するとします。2 つの ProductCatalog
テーブルを同じ AWS アカウントから作成する場合、許可の設定方法により、片方の環境での動作が他の環境に影響を与える可能性があります。例えば、同時制御プレーンオペレーション (CreateTable
など) の数に対するクォータは AWS アカウントレベルで設定されます。
その結果、1 つの環境内の各アクションによって、もう一方の環境で利用可能なオペレーションの数が減少します。また、片方の環境内のコードが他の環境内のテーブルに偶然にアクセスしてしまう危険性もあります。
注記
本番ワークロードとテストワークロードを分離して、イベントの潜在的な「爆発半径」を制御する場合、ベストプラクティスは、テストワークロードと本番ワークロード用に別々の AWS アカウントを作成することです。詳細については、AWS アカウントの管理および分離を参照してください。
さらに、Amit と Alice という 2 人のデベロッパーが ProductCatalog
テーブルをテストしているとします。デベロッパーごとに別々の AWS アカウントを作成する代わりに、デベロッパー間で同じテスト AWS アカウントを共有することができます。このテスト用アカウントでは、Alice_ProductCatalog
や Amit_ProductCatalog
など、対象のデベロッパーごとに、同じテーブルのコピーを作成できます。この場合、テスト環境用に作成した AWS アカウント内で、ユーザーの Alice と Amit を作成できます。次に、所有するテーブルに対して DynamoDB アクションを実行できるように、これらのユーザーに許可を付与することができます。
これらの IAM ユーザーの許可を付与するには、次のいずれかを実行します。
-
各ユーザーに別々のポリシーを作成し、各ポリシーをユーザーごとに個別にアタッチします。たとえば、以下のポリシーをユーザーである Alice にアタッチすることで、
Alice_ProductCatalog
テーブルに対する DynamoDB アクションへのアクセスをすべて許可することができます。次に、ユーザー Amit に対して、同様のポリシーを異なるリソース (
Amit_ProductCatalog
テーブル) で作成できます。 -
個々のユーザーにポリシーを付与する代わりに、IAM ポリシー変数を使用して単一のポリシーを記述し、グループに付与することができます。この例では、グループを作成し、そのグループにユーザー Alice とユーザー Amit の両者を追加する必要があります。次の例では、
${aws:username}_ProductCatalog
テーブルのすべての DynamoDB アクションを実行できる許可を付与します。ポリシーが評価されると、ポリシー変数${aws:username}
はリクエスターのユーザー名に置き換えられます。たとえば、Alice が項目の追加要求を送信する場合、Alice がAlice_ProductCatalog
テーブルにアイテムを追加する場合にのみ、そのアクションが許可されます。
注記
IAM ポリシー変数を使用する場合、ポリシーで明示的に IAM ポリシー言語の 2012-10-17
バージョンを指定する必要があります。IAM ポリシー言語のデフォルトバージョン (2008-10-17
) では、ポリシー変数をサポートしていません。
通常のように具体的なテーブルをリソースとして特定する代わりに、ワイルドカード文字 (*) を使用して、すべてのテーブルに許可を付与することができます。次の例に示すように、テーブル名の先頭には、リクエストを行っているユーザーの名前が付きます。
"Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_*"