ある企業が、Amazon ECS(Fargate)上で複数のマイクロサービスを運用している。各マイクロサービスはそれぞれ異なる AWS リソース(S3、DynamoDB、SQS 等)にアクセスする。最小権限の原則に従い、各マイクロサービスに必要最小限の権限のみを付与したい。また、権限の設定はインフラストラクチャーコード(IaC)で管理したい。最も適切なアプローチはどれか。
- A. ECS クラスター全体に 1 つの IAM ロール(ECS タスクロール)を設定し、すべてのマイクロサービスが使用するリソースへの権限をすべて含める。
- B. 各マイクロサービスの ECS タスク定義ごとに個別のタスクロール(Task Role)を作成し、そのサービスが必要とするリソースへの権限のみを付与する。CloudFormation または CDK で各タスクロールを定義して IaC 管理する。
- C. すべてのマイクロサービスを同一の EC2 インスタンス上に配置し、インスタンスロールで権限を一元管理する。
- D. ECS タスクのネットワークモードを host に設定し、EC2 インスタンスのメタデータサービスから認証情報を取得する。
解答と解説を見る
正解: B
ECS Fargate ではタスク定義の taskRoleArn で各タスク(コンテナ)に個別の IAM ロールを付与できる。これにより、サービスAには S3 アクセス権限のみ、サービスBには DynamoDB アクセス権限のみ、というように最小権限を実現できる。CloudFormation や CDK でタスク定義とロールを一緒にコードで管理できるため、IaC 管理の要件も満たす。選択肢Aは単一タスクロールで全権限を集約する方法で、最小権限の原則に反する。あるサービスの侵害が全権限の悪用につながるリスクがある。選択肢Cはすべてのサービスを同一インスタンスに集約してインスタンスロールで管理する方法で、Fargate ではなくEC2 前提の設計になり、かつ最小権限の実現が困難になる。選択肢DはFargate のネットワークモード host は使用できず(Fargate は awsvpc モードが必須)、技術的に誤った選択肢である。
📚 関連サービスの解説: Amazon ECS ・ AWS CloudFormation