開発環境
- Lambda
- VPC
前提
VPC内にLambdaを作成しようとしたところ、IAMロールに対してポリシーが不十分だよと指摘された。
発生したエラー
The provided execution role does not have permissions to call CreateNetworkInterface on EC2
内容
このエラーメッセージは、AWS Lambdaや他のサービスがEC2インスタンス上にあるネットワークインターフェース(ENI:Elastic Network Interface)を作成しようとしているが、アタッチされているIAMロールにその操作を行うための適切な権限がないことを示している。
この場合は、IAMロールに適切なポリシーが付与されていないことによるエラーメッセージとなる。Lambda関数がVPC内のリソース(例えば、RDSやEC2)にアクセス または作成される際、ネットワークインターフェースを作成するためにこの権限が必要。
VPC内で動作するLambdaはネットワークインターフェース(ENI)を使用してVPCリソースにアクセスするため、適切なVPCサブネット及びセキュリティグループも必要らしい。
試したこと
IAMロールにCreateNetworkInterfaceなどの関連するポリシーをアタッチした
IAMロールにCreateNetworkInterfaceなどの関連するポリシーをアタッチした
"Action": [
"ec2:CreateNetworkInterface",
"ec2:DescribeNetworkInterfaces",
"ec2:DeleteNetworkInterface",
"ec2:AttachNetworkInterface"
],
AWSLambdaVPCAccessExecutionRole を関数の実行ロールにアタッチすることで、関数に必要なアクセス許可を付与できます。
ドキュメントに、このような記載がありました。
独自の IAM アクセス許可ポリシーを作成する場合は、次のアクセス許可をすべて追加してください。
- ec2:CreateNetworkInterface
- ec2:DescribeNetworkInterfaces
- ec2:DescribeSubnets
- ec2:DeleteNetworkInterface
上記ポリシーをIAMロールにアタッチすることで、VPC内にLambdaを作成する事ができました。
まとめ
Lambdaはデフォルトでは、VPC外に置かれているため、VPC内に置く場合はIAMロールに対してポリシーの設定が必要みたいです。