概要
-
ユーザーやサービスが別のAWSサービス(例: EC2, ECS, Lambda, CodeBuild, CloudFormationなど)に対して「このIAMロールを使って実行してほしい」と“ロールを渡す”ための権限。
-
各AWSサービスで、サービスが何かしらの操作を行う際に特定のIAMロールを代わりに引き受ける(assumeする)必要がある。
-
その際に、ユーザーもしくは呼び出し元が「どのロールをそのサービスに渡せるか」を制御するのが PassRole となる。
-
もしユーザーやサービスがAWS上で何らかのリソースを作成・実行し、そのリソースが指定したIAMロールを利用して操作を行う場合(例:ECSタスクを実行して、そのタスクがS3などの別サービスにアクセスする)、呼び出し元には「
iam:PassRole
」の権限が必要となる。
用途
-
AWSサービスがロールを使用できるようにする
例えば下記のようなシナリオで、呼び出し元(ユーザー/サービス)が該当のロールを「渡す (pass)」必要がある。- EC2インスタンス作成時に、EC2インスタンスプロファイルとしてIAMロールを関連付ける
- ECSタスク定義でタスクが利用するIAMロールを指定する
- Lambda関数が実行に使用するロールを設定する
- CodeBuildやCodePipelineでビルドやデプロイを実行するためのロールを渡す
- CloudFormationがスタックの作成・更新時に使用するロールを指定する
-
ロールごとにパスさせる権限を分離する
ユーザーやサービスが不適切なロールを渡せないように制御が可能。「iam:PassRole
」で指定できるロールや、条件付き(IAMのConditionでiam:PassedToService
を使うなど)でパス可能なサービスを制限することで、セキュリティリスクを低減する- 例: 組織内で管理者権限を持つようなロールを間違って渡さないように、パス可能ロールを最小限に絞る
利用イメージ
例: AWSコンソールを介してECSにタスク定義を作成する場合
-
ユーザーがAWSコンソールにログイン
-
コンソール経由でECSにタスク(またはサービス)を作成しようとする
-
タスクで使用するIAMロールを指定する
-
ECSがそのロールをassumeするためにユーザーがECSサービスへロールを渡す (PassRole)
iam:PassRole
と sts:AssumeRole
の関係
- AWS IAMには、
iam:PassRole
とsts:AssumeRole
という2つの異なるアクションがある。しばしば混同されることがあるが、目的と使用タイミングが異なる-
iam:PassRole
: ユーザー(またはサービス)が「他のサービスにロールを引き受けさせたい」ときに必要 -
sts:AssumeRole
: 「ロール自身になりたい」(ロールの権限を直接行使したい)側が使用
-
項目 |
PassRole (iam:PassRole ) |
AssumeRole (sts:AssumeRole ) |
---|---|---|
目的 | 「他のAWSサービスにロールを利用させる」ために、「このロールをあなたが使って良い」と渡す(パス)行為 | 「自分自身またはAWSサービスがロールを引き受ける(スイッチする)」行為 |
主な呼び出し元 | ユーザーや別のAWSサービスが「サービスXにロールを渡す」際に使う | 実際にロールを使って動作したい主体(例: ECS, Lambda, ユーザーなど) |
例 | - AWSコンソールやCLIでECSタスク作成時に「実行ロールをこのロールにしたい」と指定する - CloudFormationで「この実行ロールを使用させたい」と指定する |
- ECSが実行時にロールを引き受ける - ユーザーがCLIで aws sts assume-role を実行してロールの権限に切り替える |
- 下記はユーザーがAWSコンソールなどを通じて ECS (あるいは他のAWSサービス) に「このロールを使ってタスクやサービスを実行してほしい」と依頼するシナリオ
- ユーザー → ECSサービス
- ユーザーがAWSコンソールやCLI経由で「このロール(RoleX)を使ってECSを実行したい」とリクエストする。
- ECSサービス → IAM
- ECSはユーザーが**
iam:PassRole
** 権限を持っているかどうかをチェックする。 - ここでDenyになると、ECSはロールを引き受けられないため処理は失敗する。
- ECSはユーザーが**
- ECSサービス → STS
- PassRoleチェックで許可 (Allow) となった場合、ECSが**
sts:AssumeRole
** を実行してRoleXを引き受ける。 - これにより一時的な認証情報がSTS (Security Token Service) から返され、ECSはRoleXが持つ権限で操作を行えるようになる。
- PassRoleチェックで許可 (Allow) となった場合、ECSが**