0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS IAM PassRole 概要

Posted at

概要

  • ユーザーやサービスが別のAWSサービス(例: EC2, ECS, Lambda, CodeBuild, CloudFormationなど)に対して「このIAMロールを使って実行してほしい」と“ロールを渡す”ための権限。

  • 各AWSサービスで、サービスが何かしらの操作を行う際に特定のIAMロールを代わりに引き受ける(assumeする)必要がある。

  • その際に、ユーザーもしくは呼び出し元が「どのロールをそのサービスに渡せるか」を制御するのが PassRole となる。

  • もしユーザーやサービスがAWS上で何らかのリソースを作成・実行し、そのリソースが指定したIAMロールを利用して操作を行う場合(例:ECSタスクを実行して、そのタスクがS3などの別サービスにアクセスする)、呼び出し元には「iam:PassRole」の権限が必要となる。

用途

  1. AWSサービスがロールを使用できるようにする
    例えば下記のようなシナリオで、呼び出し元(ユーザー/サービス)が該当のロールを「渡す (pass)」必要がある。

    • EC2インスタンス作成時に、EC2インスタンスプロファイルとしてIAMロールを関連付ける
    • ECSタスク定義でタスクが利用するIAMロールを指定する
    • Lambda関数が実行に使用するロールを設定する
    • CodeBuildやCodePipelineでビルドやデプロイを実行するためのロールを渡す
    • CloudFormationがスタックの作成・更新時に使用するロールを指定する
  2. ロールごとにパスさせる権限を分離する
    ユーザーやサービスが不適切なロールを渡せないように制御が可能。「iam:PassRole」で指定できるロールや、条件付き(IAMのConditionでiam:PassedToServiceを使うなど)でパス可能なサービスを制限することで、セキュリティリスクを低減する

    • 例: 組織内で管理者権限を持つようなロールを間違って渡さないように、パス可能ロールを最小限に絞る

利用イメージ

例: AWSコンソールを介してECSにタスク定義を作成する場合

  1. ユーザーがAWSコンソールにログイン

  2. コンソール経由でECSにタスク(またはサービス)を作成しようとする

  3. タスクで使用するIAMロールを指定する

  4. ECSがそのロールをassumeするためにユーザーがECSサービスへロールを渡す (PassRole)

iam:PassRolests:AssumeRole の関係

  • AWS IAMには、iam:PassRolests: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サービス) に「このロールを使ってタスクやサービスを実行してほしい」と依頼するシナリオ
  1. ユーザー → ECSサービス
    • ユーザーがAWSコンソールやCLI経由で「このロール(RoleX)を使ってECSを実行したい」とリクエストする。
  2. ECSサービス → IAM
    • ECSはユーザーが**iam:PassRole** 権限を持っているかどうかをチェックする。
    • ここでDenyになると、ECSはロールを引き受けられないため処理は失敗する。
  3. ECSサービス → STS
    • PassRoleチェックで許可 (Allow) となった場合、ECSが**sts:AssumeRole** を実行してRoleXを引き受ける。
    • これにより一時的な認証情報がSTS (Security Token Service) から返され、ECSはRoleXが持つ権限で操作を行えるようになる。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?