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

aws:executeScript无法获取凭证问题求助

aws:executeScript无法获取凭证问题求助

兄弟,我之前也碰到过一模一样的问题,给你捋清楚为啥Lambda能行但aws:executeScript不行,再给你几个解决办法:

首先得搞懂核心区别:Lambda函数是自带执行角色的,AWS会自动把这个角色的临时凭证注入到函数运行的环境变量里,你的Python代码调用boto3时会自动读取这些凭证,所以能正常访问S3。但SSM Automation的aws:executeScript步骤不一样——如果你的自动化文档没配置专属的执行角色,它并不会自动把调用者的角色凭证注入到脚本的运行容器里,这就是你拿到NoCredentialsError的原因。

下面是几个靠谱的解决办法,你可以根据自己的需求选:

  • 给自动化文档配置执行角色(最推荐)
    给你的SSM Automation文档指定一个IAM执行角色,这个角色需要满足两个条件:

    1. 信任策略里允许ssm.amazonaws.com作为信任实体(也就是允许SSM服务假定这个角色);
    2. 拥有访问目标S3资源的权限(比如附加AmazonS3ReadOnlyAccess策略,或者自定义更精细的权限)。
      配置好之后,当你启动自动化执行时,aws:executeScript步骤会自动使用这个角色的临时凭证,你的Python代码就能像在Lambda里一样直接调用S3了。
      配置方式:编辑自动化文档时,在「Execution role」字段填入这个角色的ARN;或者用CLI启动执行时加上--assume-role <角色ARN>参数。
  • 在aws:executeScript步骤显式指定要假定的角色
    如果不想给整个文档配置执行角色,也可以单独在aws:executeScript步骤里指定AssumeRole参数,让脚本直接使用这个角色的凭证运行。
    比如在你的自动化文档的步骤里这么写:

    action: aws:executeScript
    inputs:
      Runtime: python3.9
      Script: |
        import boto3
        s3 = boto3.client('s3')
        # 这里写你的S3操作逻辑,比如列出桶内容
        response = s3.list_buckets()
        print(response)
      AssumeRole: arn:aws:iam::123456789012:role/YourExistingRoleWithS3Access
    

    注意:这里指定的角色需要信任启动自动化的调用者角色(也就是你的IAM用户/角色),否则会报错无法假定角色。

  • 检查代码是否硬编码了无效凭证
    最后再确认下你的Python代码,别手动指定了错误的凭证信息。确保是直接用boto3.client('s3')创建客户端,没有写死aws_access_key_id和aws_secret_access_key,这样boto3才会自动去读取环境变量里的临时凭证。

你可以先试试第一个方法,配置执行角色是最规范的方式,一般都能解决问题。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:24:31