aws lambda update-function-configuration接收AccessDeniedException

时间:2017-07-01 07:15:56

标签: amazon-web-services lambda vpc

我想为我的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的DescribeSecurityGroups。 EC2错误代码:   UnauthorizedOperation。 EC2错误消息:您无权使用   执行此操作。

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

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

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

有人能建议我还能尝试什么吗?

4 个答案:

答案 0 :(得分:2)

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

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

  • 操作:
    • ec2:DescribeSecurityGroups
    • ec2:DescribeSubnets
    • ec2:DescribeVpcs 效果:允许 资源:“ *”

答案 1 :(得分:0)

您的用户IAM策略需要进一步的权限。

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

答案 2 :(得分:0)

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

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

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

  • ec2:CreateNetworkInterface
  • ec2:DescribeNetworkInterfaces
  • ec2:DeleteNetworkInterface

这些功能允许功能使用ENIs中所述的子网和安全组在VPC内创建here

答案 3 :(得分:0)

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

    public static LocalDate parseDate( final String format, final String s ) {
        return parseDate( format, s, java.util.Locale.getDefault() );
    }

    public static LocalDate parseDate( final String format, final String s, final Locale loc ) {

        final DateTimeFormatter df = DateTimeFormatter.ofPattern( format, loc );
        LocalDate ld;   // Check if this was a legal LocalDate.
        try {
            ld = LocalDate.parse(s, df);
        } catch (java.time.format.DateTimeParseException pe) {
            //System.out.println( pe.getMessage() );
            ld = null;  // This will signal an error
        }
        return ld;
    }

或ec2:*(如果您认为用例安全)

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

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

欢呼