説明
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 操作は別途確認してください。