我想为我的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角色和用户的完全访问权限。但仍然收到同样的错误
有人能建议我还能尝试什么吗?
答案 0 :(得分:2)
诀窍是添加正在部署lambda函数的管道/工作角色/用户)有权访问与网络相关的策略。 lambda函数本身应足以满足托管策略-AWSLambdaVPCAccessExecutionRole
arn:aws:iam :: aws:policy / service-role / AWSLambdaVPCAccessExecutionRole
答案 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配置的功能所需的唯一特殊权限是:
答案 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个虚拟资源,而同样的问题只能通过添加上述权限来解决)
欢呼