IAM ロールの信頼ポリシーの確認

ロールを使用できる主体を明示し、別の権限ポリシーも最小限にしてください。

説明

IAM ロールの assume_role_policy は、誰がロールを引き受けられるかを定める信頼ポリシーです。その後に実行できる AWS 操作は別の権限ポリシーが定めるため、信頼ポリシーを一般的な全権限ポリシーと混同しないでください。

信頼する主体とロールの使用に必要な STS 操作を明示してください。信頼ポリシーは関連付けられたロールに適用されるため、Resource は指定しません。

想定される影響

  • 無効な信頼ポリシーにより、ロールの作成・更新が失敗したり、必要なサービスがロールを引き受けられなくなったりする可能性があります。
  • 不要な主体を信頼すると、その主体がロールの権限を使えるようになり、悪用された場合の被害が広がるおそれがあります。

対処方法

  • Principal に承認済みのサービス・アカウント・ロールを指定し、その認証方式に必要な STS 操作だけを許可してください。
  • 信頼ポリシーで未対応の Resource を削除し、実際の操作・リソースは別のロール権限ポリシーで最小限にしてください。
  • 変更後に必要な主体がロールを引き受けられ、未承認の主体は拒否されることを確認してください。

例

EC2 サービスロールの信頼ポリシーの抜粋です。EC2 インスタンスで実際に使用するには、インスタンスプロファイルと関連付けの設定が別途必要です。業務権限は別のポリシーで付与してください。

変更前

hcl
resource "aws_iam_role" "service_role" {
  name = "test_role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "*",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}

信頼ポリシーで未対応の Resource を含む無効な例です。EC2 に全 AWS 操作を許可する有効なポリシーと解釈しないでください。

変更後

hcl
resource "aws_iam_role" "service_role" {
  name = "test_role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow"
    }
  ]
}
EOF
}

EC2 サービスに sts:AssumeRole を許可し、未対応の Resource を削除しています。ロールで実行できる実際の AWS 操作は別途確認してください。

参考資料