You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lambda+Boto3调用DescribeImageAttribute遇AuthFailure问题求助

问题分析与解决

关键差异:调用的API不一样

你Lambda里用的是describe_image_attribute接口,CLI跑的是describe-images接口,这俩虽然都查AMI信息,但权限验证逻辑、适用场景有区别,这是核心问题所在。

几个排查方向和解决办法

  1. 区域没对齐
    Lambda默认用的区域,和你CLI操作的区域可能不一样。EKS优化AMI是分区域的,跨区域查就会触发权限错误。
    解决:初始化boto3客户端时明确指定区域,和CLI用的保持一致:
ec2_client = boto3.client('ec2', region_name='us-east-1') # 换成你CLI用的区域
  1. 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执行角色的访问权限。
  1. 代码里的注释写错了
    你给的代码里,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
)
  1. Lambda角色的权限边界或信任策略有问题
    哪怕你加了EC2:*权限,要是角色有权限边界,可能会把这个权限给限制住;或者信任策略没允许Lambda服务用这个角色。
    解决:
  • 检查Lambda执行角色的权限边界,确保没拦ec2:DescribeImageAttribute或者ec2:DescribeImages操作。
  • 确认信任策略里有lambda.amazonaws.com这个可信实体。

内容的提问来源于stack exchange,提问作者buttercup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:15:25