あなたの会社はマルチテナントSaaSアプリケーションを提供しており、各テナントにAmazon S3バケット内の専用プレフィックス(例: s3://data-bucket/tenant-001/)への一時的なアクセス権を付与する必要があります。以下の要件があります。 ・基盤となるIAMロール(AppServerRole)はS3バケット全体への読み書き権限を持つ ・各テナントには自分のプレフィックスにのみアクセスできる一時クレデンシャルを動的に発行する ・テナントの追加・削除のたびにIAMポリシーやIAMロールを変更したくない ・アプリケーションサーバーがトークンブローカーとして動作する この要件を最もセキュアかつスケーラブルに実現する方法はどれですか?
STSのAssumeRole(またはAssumeRoleWithWebIdentity)呼び出し時にPolicy引数としてセッションポリシーを渡すことで、発行される一時クレデンシャルの権限を動的に制限できます。セッションの有効権限は「ロールポリシー AND セッションポリシー」の積集合となるため、AppServerRoleの広範なS3権限をテナント固有のプレフィックスに絞り込めます。テナントが増減してもIAMロールやポリシーの変更は不要であり、スケーラブルです。 選択肢AのIAMロール個別作成は、テナント数に比例してIAMリソースが増加します。AWSアカウントあたりのIAMロール数に上限があり、スケールしません。 選択肢CのIAMインラインポリシー列挙は、テナント追加・変更のたびにIAMポリシーの更新が必要となり「ポリシーを変更したくない」という要件を満たしません。 選択肢DのCognitoはエンドユーザー向け認証・認可サービスです。テナントごとにユーザープールグループとIAMロールを管理する構成は複雑であり、サーバー間トークンブローカーパターンには適していません。