AWS Lambda 更新函数配置收到 AccessDeniedException。

6
我想为我的Lambda函数授予VPC访问权限。我使用以下AWS CLI命令。
aws lambda update-function-configuration \
--function-name SampleFunction \
--vpc-config SubnetIds=subnet-xxxx,SecurityGroupIds=sg-xxxx

但是我收到了以下错误信息:
当调用UpdateFunctionConfiguration操作时,发生了一个错误(AccessDeniedException):您的访问权限被EC2拒绝,请确保您的请求凭据具有对sg-xxxx的DescribeSecurityGroups权限。EC2错误代码:UnauthorizedOperation。EC2错误消息:您未被授权执行此操作。
我已经向我的Lambda角色和执行aws命令的用户授予了以下权限。
    - "ec2:CreateNetworkInterface"
    - "ec2:DescribeNetworkInterfaces"
    - "ec2:DeleteNetworkInterface"
    - "ec2:DescribeSecurityGroups"

我进一步尝试授予Lambda角色和用户完全访问权限,但仍然收到相同的错误消息。

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


你是在尝试从EC2实例上运行它吗?如果是这样,实例配置文件需要具有正确的权限。 - MaiKaY
@Chun-Kit Chung,你最终是如何解决的? - Jun
4个回答

7
关键在于为管道/工作角色/部署Lambda函数的用户添加网络相关策略。Lambda函数本身应该足以使用托管策略 - AWSLambdaVPCAccessExecutionRole。
arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole Action: - ec2:DescribeSecurityGroups - ec2:DescribeSubnets - ec2:DescribeVpcs Effect:允许 Resource: "*"

3

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

例如,ec2:CreateSecurityGroup等。请参考此文档添加所需的权限。


谢谢@Ashan 你是指为运行此任务的用户添加权限吗? 我已经在CloudFormation中添加了EC2权限(我使用CodeStar),但似乎没有起作用。 - Jun
@Jun 我的意思是针对运行上述CLI命令的用户的IAM权限。 - Ashan

2
我遇到了相同的问题。尽管用户的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,请参见此处的描述。

1
Lambda函数角色和用户角色(无论是CloudFormation还是命令行用户)都必须具备以下要求:
          - ec2:CreateNetworkInterface
          - ec2:DescribeNetworkInterfaces
          - ec2:DeleteNetworkInterface
          - ec2:DescribeSecurityGroups
          - ec2:DescribeSubnets

如果您的用例允许,可以使用ec2:*作为安全性设置。

我在使用SAM / CloudFormation部署带有VPC配置的lambda时遇到了相同的问题,并通过添加上述内容解决了该问题。

在Github问题中,一些人说这是由于CloudFormation创建顺序不正确造成的,但经过测试,即使添加了20个虚拟资源,问题仍然存在,只有通过添加上述权限才能解决。

谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接