説明
IAM ロールの信頼ポリシーは、誰がロールを引き受けられるかを定めます。必要なサービスとともに AWS: * を許可すると、信頼先はそのサービスだけには限定されません。
実際の引き受けには、呼び出し元の権限と信頼条件も適用されます。引き受けた後の権限は、ロールの権限ポリシーや他の制限によって決まります。
想定される影響
- 不要な主体がロールを引き受けると、そのロールに許可されたリソースにアクセスできます。
- 強い権限を持つロールの信頼範囲が広いと、認証情報の悪用による被害が大きくなるおそれがあります。
対処方法
- 不要な AWS ワイルドカード主体を削除し、サービスロールには実際に必要なサービス主体だけを残してください。
- 外部アカウントのアクセスが必要なら、承認済みのアカウント・ロールと用途に合う信頼条件に制限してください。
- ロールの権限と信頼設定の変更を合わせて確認し、正常なサービス実行と未承認のロール引き受けの拒否を確認してください。
例
EC2 インスタンス用ロールの信頼ポリシーの抜粋です。name_tag_prefix 変数、インスタンスプロファイル、ロールの操作権限は別途構成してください。
変更前
hcl
resource "aws_iam_role" "example" {
name = "${var.name_tag_prefix}-openshift-instance-role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "ec2.amazonaws.com",
"AWS": "*"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
EC2 サービスに加え、すべての AWS 主体にも信頼を広げています。Service の指定は AWS: * を EC2 に限定しません。
変更後
hcl
resource "aws_iam_role" "example" {
name = "${var.name_tag_prefix}-openshift-instance-role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
信頼先を EC2 サービスに限定しています。ロールの操作権限と、このロールをインスタンスに関連付けられる権限も最小化してください。