IAMロールの責務分離
クラウドインフラにおいて、「実行基盤が必要とする権限」と「アプリケーションが必要とする権限」を別々のIAMロールに分けるパターン。最小権限の原則を実現するための設計手法。
パターンの動機
単一のロールにすべての権限を付与すると:
- 不要な権限が増え、攻撃面が拡大する
- 何がどの目的で必要な権限なのか把握しにくくなる
- コンテナを乗っ取られた場合にインフラ権限まで悪用される
ECSにおける適用例
ECS Fargateでは2種類のロールを使い分ける:
┌─────────────────────────────────────────────────┐
│ ECS Agent(AWS管理) │
│ └─ Task Execution Role を使用 │
│ ・ECRからイメージをpull │
│ ・CloudWatch Logsにログを送信 │
│ ・Secrets Managerから秘密情報を取得 │
├─────────────────────────────────────────────────┤
│ コンテナ(アプリケーション) │
│ └─ Task Role を使用 │
│ ・S3バケットへのアクセス │
│ ・DynamoDBの読み書き │
│ ・SQSへのメッセージ送信 │
└─────────────────────────────────────────────────┘
Task Execution Role: AWSのマネージドポリシー AmazonECSTaskExecutionRolePolicy を基本とし、Secrets Manager等を追加。
Task Role: アプリケーション固有のリソースアクセス権限のみ付与。
一般化
このパターンはECS固有ではなく、より広い文脈でも適用される:
| レイヤー | 権限の主体 |
|---|---|
| インフラ基盤(オーケストレーター) | 実行基盤ロール |
| アプリケーション | アプリロール |
| CI/CDパイプライン | デプロイロール |
責務の分離(関心の分離)をIAM設計にも適用することで、各レイヤーが「自分に必要な権限だけ」を持つ構造になる。