【问题标题】:aws lambda update-function-configuration receives AccessDeniedExceptionaws lambda update-function-configuration 收到 AccessDeniedException
【发布时间】:2017-12-05 02:49:01
【问题描述】:

我想为我的 lambda 函数授予 vpc 访问权限。我使用以下 aws cli 命令。

aws lambda update-function-configuration \
--function-name SampleFunction \
--vpc-config SubnetIds=subnet-xxxx,SecurityGroupIds=sg-xxxx

但我收到以下错误:

调用时发生错误 (AccessDeniedException) UpdateFunctionConfiguration 操作:您的访问已被拒绝 EC2,请确保您的请求凭证有权 描述 sg-xxxx 的安全组。 EC2 错误代码: 未经授权的操作。 EC2 错误消息:您无权 执行此操作。

我已向我的 lambda 角色和执行 aws 命令的用户授予以下权限。

    - "ec2:CreateNetworkInterface"
    - "ec2:DescribeNetworkInterfaces"
    - "ec2:DeleteNetworkInterface"
    - "ec2:DescribeSecurityGroups"

我进一步尝试授予对 lambda 角色和用户的完全访问权限。但仍然收到同样的错误

谁能建议我还能尝试什么?

【问题讨论】:

  • 您是否尝试从 EC2 实例运行它?如果是这样,则 Instance-Profile 需要具有正确的权限。
  • @Chun-Kit Chung,你最后是怎么解决的?

标签: amazon-web-services lambda vpc


【解决方案1】:

您的用户 IAM 政策需要更多权限。

例如 ec2:CreateSecurityGroup 等。查看this 文档以添加所需的权限。

【讨论】:

  • 谢谢@Ashan 您的意思是为运行此任务的用户添加权限吗?我向 CloudFormation 添加了 EC2 权限(我使用 CodeStar),但它似乎不起作用。
  • @Jun 我的意思是运行上述 CLI 命令的用户的 IAM 权限。
【解决方案2】:

我遇到了同样的问题。尽管 IAM 策略针对具有所需权限的用户,但我无法使用 aws cli 使用 VPC 配置 (aws lambda create-function) 创建 lambda 函数修改现有函数以添加VPC 配置(aws lambda 更新功能配置)。

我可以让它工作的唯一方法是在没有 VPC 配置的情况下创建 lambda 函数。然后,我修改了函数以通过 AWS 控制台(在 Lambda > Fucntions > My Function > Network 中)添加 VPC 配置信息(vpc、子网和安全组)。我只能使用控制台来执行此操作,在其他完全自动化的过程中引入了手动步骤。

回答上面关于哪个用户需要 ec2:DescribeSecurityGroups 和相关权限的一些问题。它是运行 cli 命令或登录到控制台的用户。该函数不需要提供这些权限的策略。具有 VPC 配置的函数所需的唯一特殊权限是:

  • ec2:CreateNetworkInterface
  • ec2:DescribeNetworkInterfaces
  • ec2:删除网络接口

这些允许函数使用您提供的子网和安全组在您的 VPC 中创建 ENIs,如 here 所述。

【讨论】:

    【解决方案3】:

    诀窍是添加部署 lambda 函数的管道/工作者角色/用户)有权访问网络相关策略。 lambda 函数本身应该足以使用托管策略 - AWSLambdaVPCAccessExecutionRole

    arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole

    • 行动:
      • ec2:DescribeSecurityGroups
      • ec2:DescribeSubnets
      • ec2:DescribeVpcs 效果:允许 资源:'*'

    【讨论】:

      【解决方案4】:

      Lambda 函数的角色和用户角色(cloudformation 或 cmline 用户)都必须具有:

                - ec2:CreateNetworkInterface
                - ec2:DescribeNetworkInterfaces
                - ec2:DeleteNetworkInterface
                - ec2:DescribeSecurityGroups
                - ec2:DescribeSubnets
      

      或 ec2:* 如果你的用例安全

      我在使用 SAM/cloudformation 部署具有 VPC 配置的 lambda 时遇到了同样的问题,并通过在上面添加该问题解决了这个问题。

      在 github 问题上,有人说这是因为创建了 cloudformation 订单而不是(或者可能不再是因为我测试了添加 20 个虚拟资源,但仍然只有通过添加上述权限才能解决相同的问题)

      干杯,

      【讨论】:

        猜你喜欢
        • 2019-01-17
        • 1970-01-01
        • 2022-01-21
        • 2018-06-09
        • 2019-05-28
        • 2021-02-11
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多