API Gateway のログの IAM ロール設定で BadRequestException が発生するときの対処方法
困っていた内容
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 ロールを渡す必要があります。