0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】CDKで「The provided execution role does not have permissions to call CreateNetworkInterface on EC2」エラーが出た場合

Posted at

概要

AWS CDKでLambdaのIAMロールに任意のポリシーをアタッチしようとすると以下のエラーになりました。

The provided execution role does not have permissions to call CreateNetworkInterface on EC2

        lambda_role = iam.Role(self, "Sample-LambdaServiceRole",
            assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
            role_name="Sample-LambdaServiceRole"
        )

        lambda_policy = iam.Policy(self, "Sample-LambdaPolicy",
            policy_name="Sample-LambdaPolicy",
            statements=[
                iam.PolicyStatement(
                    actions=[
                        "logs:CreateLogGroup",
                        "logs:CreateLogStream",
                        "logs:PutLogEvents",
                        "ec2:CreateNetworkInterface",
                        "ec2:DescribeNetworkInterfaces",
                        "ec2:DeleteNetworkInterface"
                    ],
                    resources=["*"]
                ),
                iam.PolicyStatement(
                    actions=[
                        "secretsmanager:GetSecretValue"
                    ],
                    resources=[
                        f"arn:aws:secretsmanager:ap-northeast-1:{self.account}:secret:*"
                    ]
                ),
            ]
        )

        lambda_policy.attach_to_role(lambda_role)

解決方法

結論、以下であればエラーが出ずにデプロイできました。

        lambda_role = iam.Role(self, "Sample-LambdaServiceRole",
            assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
            role_name="Sample-LambdaServiceRole"
        )

        lambda_role.add_managed_policy(
            iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaVPCAccessExecutionRole")
        )

        lambda_policy = iam.Policy(self, "Sample-LambdaPolicy",
            policy_name="Sample-LambdaPolicy",
            statements=[
                iam.PolicyStatement(
                    actions=[
                        "secretsmanager:GetSecretValue"
                    ],
                    resources=[
                        f"arn:aws:secretsmanager:ap-northeast-1:{self.account}:secret:*"
                    ]
                ),
            ]
        )

変更したのは、アタッチするポリシーをAWS管理ポリシーのAWSLambdaVPCAccessExecutionRoleにしたことです。なぜこれにより通るようになったか?は不明です(ご存じの方いらっしゃったらコメントで教えてください!)。

いずれにせよ、AWS が提供するベストプラクティスに従った権限設定が適用された方が良いでしょう。

以前も同じようなエラーになったのですが、同様にAWS管理ポリシーにすることでエラーがなくなったことがありました。ご参考までに。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?