使用Lambda+Boto3调用DescribeImageAttribute遇AuthFailure问题求助
问题分析与解决
关键差异:调用的API不一样
你Lambda里用的是describe_image_attribute接口,CLI跑的是describe-images接口,这俩虽然都查AMI信息,但权限验证逻辑、适用场景有区别,这是核心问题所在。
几个排查方向和解决办法
- 区域没对齐
Lambda默认用的区域,和你CLI操作的区域可能不一样。EKS优化AMI是分区域的,跨区域查就会触发权限错误。
解决:初始化boto3客户端时明确指定区域,和CLI用的保持一致:
ec2_client = boto3.client('ec2', region_name='us-east-1') # 换成你CLI用的区域
- AMI本身的权限限制
有些EKS优化AMI是AWS共享的私有镜像,你的Lambda角色就算有EC2:*权限,镜像可能没给这个角色开访问权限。而你CLI用的是根用户或者有权限的IAM用户,所以能查到。
解决:
- 直接换用
describe-images接口,这个接口对共享镜像的权限要求更宽松,还能直接拿到Name属性,代码改成这样:ec2_client = boto3.client('ec2', region_name='你的区域') response = ec2_client.describe_images(ImageIds=[latest_ami_id]) latest_ami_name = response['Images'][0]['Name'] - 要是非得用
describe_image_attribute,就去EC2控制台给这个AMI加一下Lambda执行角色的访问权限。
- 代码里的注释写错了
你给的代码里,ImageId = latest_ami_id //AMI ID fetched用了//当注释,这在Python里是语法错误(Python注释得用#),搞不好会导致传递的ImageId出问题,AWS返回的错误提示可能会误报成AuthFailure。
解决:把注释改成正确的写法:
latestAMIVersion = ec2_client.describe_image_attribute( Attribute='description', ImageId=latest_ami_id # AMI ID fetched )
- Lambda角色的权限边界或信任策略有问题
哪怕你加了EC2:*权限,要是角色有权限边界,可能会把这个权限给限制住;或者信任策略没允许Lambda服务用这个角色。
解决:
- 检查Lambda执行角色的权限边界,确保没拦
ec2:DescribeImageAttribute或者ec2:DescribeImages操作。 - 确认信任策略里有
lambda.amazonaws.com这个可信实体。
内容的提问来源于stack exchange,提问作者buttercup
相关产品推荐
相关产品推荐

