🔐 IAM ロール:権限ポリシー vs 信頼ポリシー

ホテルのセキュリティで理解する2つのポリシーの違い

🎯 結論ファースト:30秒で理解!

🚪 信頼ポリシー(Trust Policy)

「誰が」「どんな条件で」 ロールを引き受けられるか?
→ ホテルの チェックイン受付 と同じ!
「身分証明 + MFA認証」をクリアして初めて鍵がもらえる

🗝️ 権限ポリシー(Permission Policy)

ロールを引き受けた 「後」に何ができるか?
→ ホテルの 部屋の鍵 と同じ!
どの施設(部屋・プール・ジム)にアクセスできるかを決める

🏨 ホテルのセキュリティで理解しよう!

🛎️

信頼ポリシー

チェックイン受付

確認すること:
・予約はあるか?(Principal)
・身分証明書は?(認証)
・本人確認コード(MFA)
➡️ 通過後
🗝️

権限ポリシー

ルームキー

アクセスできる場所:
・客室(S3バケット)
・プール(EC2)
・レストラン(DynamoDB)

💡 ポイント: チェックインを通過しないと、どんな高級なルームキーも意味がない!
逆に、チェックインしても、鍵がなければどこにも入れない!

🔄 ロール引き受けの流れ

1

👤 IAMユーザーがロール引き受けをリクエスト

「このロールを使いたいです!」とSTSに申請

リクエスト開始
2

📋 信頼ポリシーをチェック

「このユーザーは許可されている?条件は満たしている?」

🔶 信頼ポリシーで制御
3

🔐 MFA認証(設定されている場合)

「MFAコードを入力してください」→ 本人確認完了

🔶 信頼ポリシーで制御
4

✅ ロール引き受け成功!一時認証情報を取得

STSから一時的なアクセスキー・シークレットキー・トークンを受け取る

チェックイン完了 🎉
5

🗝️ AWSリソースへアクセス

「S3を読みたい」「EC2を起動したい」などの操作を実行

🔷 権限ポリシーで制御
6

📊 権限ポリシーで許可/拒否を判定

「この操作は許可されている?」→ 許可なら実行、拒否ならエラー

🔷 権限ポリシーで制御

📊 詳細比較表

🛎️ 信頼ポリシー(Trust Policy)

  • 役割 誰がこのロールを引き受けられるかを定義
  • タイミング ロール引き受け にチェック
  • 主な要素 Principal(誰が)、Condition(どんな条件で)
  • MFA ✅ ここで制御する
  • 設定場所 ロール自体に直接アタッチ(1つだけ)
  • たとえ ホテルのチェックイン受付 🏨

🗝️ 権限ポリシー(Permission Policy)

  • 役割 ロールを使って何ができるかを定義
  • タイミング ロール引き受け にチェック
  • 主な要素 Action(何を)、Resource(どこに)
  • MFA ❌ ここでは制御しない
  • 設定場所 ロールにアタッチ(複数可能)
  • たとえ ホテルのルームキー 🗝️

💻 実際のポリシー例

🛎️ 信頼ポリシー(AssumeRolePolicyDocument)
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      // 誰が引き受けられるか
      "AWS": "arn:aws:iam::123456789012:user/DevUser"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      // MFA必須の条件
      "Bool": {
        "aws:MultiFactorAuthPresent": "true"
      }
    }
  }]
}
🗝️ 権限ポリシー(IAM Policy)
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      // 何ができるか
      "s3:GetObject",
      "s3:PutObject"
    ],
    "Resource": [
      // どのリソースに対して
      "arn:aws:s3:::my-bucket/*"
    ]
  }]
}

🔐 MFAは信頼ポリシーで制御する!

なぜ信頼ポリシーでMFA?

MFAは「本人確認」の一部です。ホテルで言えば、チェックイン時に 「予約確認書 + 身分証明書 + ワンタイムコード」 を求めるようなもの。

ロールを引き受ける に認証を強化するため、 信頼ポリシー Condition ブロックで設定します。

"aws:MultiFactorAuthPresent": "true"
👤
Step 1: ユーザーがロール引き受けをリクエスト
📱
Step 2: MFAコード入力を要求
Step 3: 認証成功 → ロール引き受けOK!

🎯 よくあるユースケース

🔄 クロスアカウントアクセス

別のAWSアカウントからリソースにアクセスする

信頼ポリシー: アカウントB の特定ユーザーを許可
権限ポリシー: S3バケットの読み取りを許可

🤖 EC2からS3アクセス

EC2インスタンスがS3にファイルをアップロード

信頼ポリシー: EC2サービスを許可
権限ポリシー: 特定バケットへのPutObjectを許可

🔒 本番環境への管理者アクセス

MFA認証後のみ本番環境を操作可能

信頼ポリシー: Adminグループ + MFA必須
権限ポリシー: EC2の起動・停止を許可

⚙️ Lambda関数の実行

Lambda関数がDynamoDBにデータを書き込む

信頼ポリシー: Lambdaサービスを許可
権限ポリシー: DynamoDBテーブルへの書き込みを許可

❓ よくある質問

💭 Q: 信頼ポリシーと権限ポリシー、どちらが先にチェックされる?

A: 信頼ポリシーが先 です。まずロールを引き受けられるかチェックし、引き受けた後に権限ポリシーで各操作の可否が判定されます。ホテルで言えば、チェックインしてからルームキーが使えるのと同じです。

💭 Q: 権限ポリシーでMFAを設定することはできない?

A: 技術的には可能ですが、 一般的ではありません 。MFAは「誰がロールを使えるか」という認証の問題なので、信頼ポリシーで設定するのがベストプラクティスです。

💭 Q: 一つのロールに複数の権限ポリシーをつけられる?

A: はい! 権限ポリシーは複数アタッチ可能です。一方、信頼ポリシーはロールに1つだけです(ただし、その中に複数のStatementを書けます)。

💭 Q: サービスロール(EC2やLambda用)にも両方のポリシーが必要?

A: はい! サービスロールでも信頼ポリシーで「どのサービスがこのロールを使えるか」を定義し、権限ポリシーで「そのサービスが何をできるか」を定義します。

📝 まとめ

IAMロールの2つのポリシーは、 「入口のセキュリティ」と「中の権限」 という別々の役割を持っています。

🛎️ 信頼ポリシー

ロール引き受けの 「門番」
誰が・どんな条件で入れるか
(MFAもここで設定!)

🗝️ 権限ポリシー

ロール使用時の 「アクセスカード」
どのリソースに・何ができるか
(実際の操作権限)

🎯 覚え方

ホテルで覚えよう!
信頼 = チェックイン
権限 = ルームキー

Created by SSuzuki1063

AWS SAP Learning Resources