AWS Lambda执行角色缺EC2网络接口权限,如何正确配置IAM策略资源范围
为什么你配置的策略不生效
你遇到的授权失效问题,根源是IAM策略中Action与Resource的服务归属完全错配:
- 你列出的所有操作都是EC2服务的API,对应的授权资源必须是EC2服务下的网络接口、云实例等对象
- 你当前把Resource绑定为Lambda函数的ARN,这类资源属于Lambda服务,和EC2操作的校验规则完全不匹配,IAM根本无法识别这是对EC2操作的有效授权
这也是为什么只有把Resource设为*时才能正常生效——通配符覆盖了所有服务的所有资源,恰好匹配到了EC2操作的资源要求。
EC2网络接口操作的正确资源匹配规则
不同EC2操作的资源粒度授权要求不同,不需要所有操作都绑定同一个Resource值,具体规则如下:
- 强制要求通配符的操作:所有
Describe*类只读查询操作,包括ec2:DescribeNetworkInterfaces、ec2:DescribeInstances。这类全局列表查询API在IAM设计上不支持绑定特定资源对象,合法的Resource值只能是*,没有其他可选的精准ARN格式。 - 支持精准ENI粒度的操作:
ec2:DeleteNetworkInterface、ec2:ModifyNetworkInterfaceAttribute、ec2:ResetNetworkInterfaceAttribute,这类操作可以直接绑定对应ENI的ARN,格式为arn:aws:ec2:<region>:<acc_id>:network-interface/<eni-id> - 涉及两类资源的操作:
ec2:AttachNetworkInterface、ec2:DetachNetworkInterface,操作本身同时涉及ENI和待挂载的EC2实例,需要在Resource字段同时声明两类对象的ARN:- 网络接口ARN:同上格式
- EC2实例ARN:
arn:aws:ec2:<region>:<acc_id>:instance/<instance-id>
- 带前置条件的创建操作:
ec2:CreateNetworkInterface在执行时目标ENI还没有生成具体ID,无法直接绑定待创建的ENI ARN,一般通过条件键限制创建ENI所属的子网、安全组范围,实现授权范围收紧。
适配Lambda关联VPC场景的精准授权策略示例
针对Lambda关联VPC时需要的自动ENI管理能力,你不需要用全量通配符*实现授权,也不需要绑定Lambda函数的ARN,可按照操作类型拆分授权语句,在最小权限原则下实现功能可用:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute", "ec2:ResetNetworkInterfaceAttribute", "ec2:AttachNetworkInterface", "ec2:DetachNetworkInterface" ], "Resource": [ "arn:aws:ec2:<region>:<acc_id>:network-interface/*", "arn:aws:ec2:<region>:<acc_id>:instance/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "<acc_id>" } } } ] }
这个策略的授权逻辑:
- 第一块为只读查询类操作授权,因为这类操作本身不支持资源粒度绑定,使用
*的风险仅为账号下EC2资源的只读查询,无修改风险 - 第二块为ENI的增删改、挂载卸载操作授权,资源范围严格限定到同账号同区域下的ENI和实例资源,不会覆盖其他服务的对象
- 后续如果需要进一步收紧权限,可以把第二块里的通配符替换为指定的ENI ID、或增加条件键限制ENI必须归属指定子网/安全组,完全满足精准授权的要求。
内容的提问来源于stack exchange,提问作者Alan Reynoso
相关产品推荐
相关产品推荐

