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設計にも適用することで、各レイヤーが「自分に必要な権限だけ」を持つ構造になる。

関連