API Gateway のログの IAM ロール設定で BadRequestException が発生するときの対処方法

2023.04.25

困っていた内容

API Gateway のログを CloudWatch Logs へ出力するため IAM ロールを設定したところBadRequestExceptionが表示されて変更が保存できません。
権限関係のようですが、設定した IAM ロールには AWS 管理ポリシーのAmazonAPIGatewayPushToCloudWatchLogsを設定済みで過不足はない認識です。 IAM ロールを設定する方法を教えてください。

BadRequestException: The role ARN does not have required permissions configured. Please grant trust permission for API Gateway and add the required role policy.

どう対応すればいいの?

IAM ロールの信頼関係をご確認ください。

API Gateway で CloudWatch Logs を有効にする際に必要な IAM ロールは、権限に加えて、API Gateway(apigateway.amazonaws.com)への信頼関係が設定されている必要があります。

信頼関係は IAM ロール側で設定し、一例として上記画像の設定の場合は、次のような信頼関係に変更すると API Gateway に変更ができます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "apigateway.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}

そのため、IAM ロールの信頼関係を確認し、API Gateway(apigateway.amazonaws.com)への信頼関係が不足していないかご確認ください。

ロールの信頼ポリシーを変更するには(コンソール) - AWS Identity and Access Management

なお、信頼関係の設定方法は上記ドキュメント、設定変更ではなく IAM ロールから新規に作成する場合は次のブログの「やってみた」が参考になると思います。

参考資料

アクセス許可をアカウントに付与するには、apigateway.amazonaws.com を信頼できるエンティティとして IAM ロールを作成し、前述のポリシーを IAM ロールにアタッチして、その IAM ロールの ARN をアカウントの cloudWatchRoleArn プロパティに設定します。

多くの AWS サービスを設定するには、そのサービスに IAM ロールを渡す必要があります。