Lambda で「The provided execution role does not have permissions to call CreateNetworkInterface on EC2」になったときの対処方法

2022.12.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

この記事はアノテーション株式会社 AWS Technical Support Advent Calendar 2022 | Advent Calendar 2022 - Qiita 4日目の記事です。

困っていた内容

Lambda 関数の作成がThe provided execution role does not have permissions to call CreateNetworkInterface on EC2で失敗しました。
実行した IAM ユーザにはAdministratorAccessが付与されており、権限不足はない認識です。 Lambda 関数を作成するにはどうしたら良いでしょうか?

どう対応すればいいの?

Lambda 関数に設定した IAM ロール(実行ロール)のアクセス許可をご確認ください。

VPC に接続する Lambda 関数を作成するには、Lambda 関数の実行ロールにネットワークインターフェイスに関するアクセス許可が必要となります。

VPC 内のリソースにアクセスするように Lambda 関数を設定する - AWS Lambda

Lambda は、関数のアクセス許可を使用してネットワークインターフェイスを作成および管理します。VPC に接続するには、関数の実行ロールに次のアクセス許可が必要です。

実行ロールのアクセス許可

  • ec2:CreateNetworkInterface
  • ec2:DescribeNetworkInterfaces - このアクションは、すべてのリソースで許可されている場合にのみ機能します ("Resource": "*")。
  • ec2:DeleteNetworkInterface - 実行ロール内の [DeleteNetworkInterface] でリソース ID を指定しない場合、関数から VPC へのアクセスができなくなる場合があります。

関係するアクセス許可は AWS 管理ポリシーAWSLambdaVPCAccessExecutionRoleで付与できますので、必要に応じてご利用ください。

やってみた

IAM コンソール を開き、ロールから「ロールを作成」をクリックします。

信頼されたエンティティタイプに「AWS のサービス」、ユースケースに「Lambda」を選択して、「次へ」をクリックします。

許可ポリシーからAWSLambdaVPCAccessExecutionRoleを選択して、「次へ」をクリックします。

ロール名に任意の名前(例:lambda_vpc_basic_execution)を指定して、「ロールを作成」をクリックします。

IAM ロールが正常に作成されたことを確認します。

Lambda 関数を作成する際に、先ほど作成した IAM ロールを指定すると、Lambda 関数が作成できます。 ※赤枠の設定は「▼デフォルトの実行ロールの変更」をクリックすると表示されます。

参考資料