IAM サービスロールの信頼する主体の確認

ロールを必要とする実際のサービスと承認済み AWS 主体だけを信頼してください。

説明

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 サービスに限定しています。ロールの操作権限と、このロールをインスタンスに関連付けられる権限も最小化してください。

参考資料