VPCエンドポイント経由でAWSサービスエンドポイントへ接続する環境で、AWS CLI コマンド実行時に「not authorized to perform: iam:PassRole」エラーが出たときの対処法

VPC エンドポイント経由で、AWS サービスエンドポイントへ接続する場合、iam:PassRole の権限が必要なアクションを実行する場合は、エンドポイントポリシーに iam:PassRole アクションの許可が必要です。
2021.05.31

困っていた内容

EC2 インスタンスから、AWS CLI コマンドの実行時以下のエラーが発生しました。

$ aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type t2.micro \
    --key-name MyKeyPair

<IAMロールのARN> is not authorized to perform: iam:PassRole on resource ~

EC2 インスタンスには AdministratorAccess ポリシーが付与されたロールがアタッチされているにも関わらず、権限に関するエラーが発生していると見受けられました。

なお、VPC エンドポイント経由で、AWS サービスエンドポイントへ接続している環境です。

解決策を教えてください。

どう対応すればいいの?

EC2 の RunInstances アクションは iam:PassRole の権限が必要なアクションです。

VPC エンドポイント経由で、AWS サービスエンドポイントへ接続する場合、

iam:PassRole の権限が必要なアクションを実行するには、VPC エンドポイントポリシーに iam:PassRole が必要です。

以下のポリシーを VPC エンドポイントポリシーに加えてください

        {
            "Action": "iam:PassRole",
            "Resource": "<IAM Role の ARN>",
            "Effect": "Allow",
            "Principal": "*"
        }

参考資料

IAM: 特定の AWS のサービスに IAM ロールを渡す - AWS Identity and Access Management

VPC エンドポイントでサービスへのアクセスを制御する - Amazon Virtual Private Cloud

IAM ロールの PassRole と AssumeRole をもう二度と忘れないために絵を描いてみた | DevelopersIO