【AWS】iam:PassRole と sts:AssumeRole の違いについて詳しく

iam:PassRolests:AssumeRole は、同じ IAM ロールを扱いますが、役割がまったく違います。

権限意味主な利用者
iam:PassRole「このロールをAWSサービスに使わせる設定をしてよい」人、Terraform、AWS Configなどの設定実行者
sts:AssumeRole「実際にそのロールになり、一時的な認証情報を取得してよい」SSM、EC2、Lambda、人、別のIAMロールなど

一言で表すと、

iam:PassRole は「ロールを使うサービスを指定する権限」
sts:AssumeRole は「実際にそのロールとして動く権限」

です。

会社の制服に例えると

IAMロールを「特定の作業をするための制服」と考えてみます。

たとえば、次の制服があります。

SSM自動修復担当の制服
この制服を着ると、CloudTrailを有効化できる

このとき、3人の登場人物がいます。

  1. AWS Config
    • SSMに自動修復を依頼する人
  2. Systems Manager Automation
    • 実際に自動修復を行う人
  3. Automation実行ロール
    • CloudTrailを修復する権限が入った制服

流れは次のようになります。

AWS Config
   │
   │ iam:PassRole
   │ 「SSMさん、この制服を使って作業してください」 ← ConfigがSSMに制服を渡す
   ▼
Systems Manager Automation
   │
   │ sts:AssumeRole
   │ 「この制服を実際に着用します」 ← SSMが制服を着れる
   ▼
Automation実行ロール
   │
   │ cloudtrail:StartLogging
   ▼
CloudTrailを修復

iam:PassRole では、AWS Config自身がそのロールになるわけではありません。

AWS Configは、

「Systems Managerに、この実行ロールを使用させてもよい」

という許可を持っているだけです。

実際に実行ロールを引き受けるのは、Systems Managerです。