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

使用us-east-1区域STS V2令牌跨区域调用AWS接口遇AuthFailure错误求助

问题排查与解决办法

可能的原因

  • IAM角色/临时策略的区域限制:你的IAM角色权限策略,或者调用assume-role时附加的临时策略,可能通过aws:RequestedRegion条件限制了仅允许在特定区域执行ec2:DescribeInstanceTypes操作。
  • STS端点验证逻辑差异:虽然V2令牌理论上全局有效,但boto3默认会使用当前客户端区域的STS端点验证凭证,部分区域的STS端点可能对跨区域签发的令牌验证存在问题。
  • 令牌版本问题:确认拿到的确实是V2版本的令牌(解码JWT后ver字段为2),V1令牌本身不支持跨区域使用。

排查与修复步骤

  1. 检查权限策略

    • 打开IAM控制台,查看目标角色的权限策略,确认没有类似以下的区域限制条件:
      "Condition": {
          "StringEquals": {
              "aws:RequestedRegion": ["us-east-1", "eu-west-1"]
          }
      }
      
    • 检查调用assume-role时是否传入了Policy参数,如果有,确认该临时策略没有区域访问限制。
  2. 强制使用令牌签发区域的STS端点
    修改代码,创建EC2客户端时指定使用us-east-1的STS端点验证凭证,避免当前区域STS端点的验证问题:

    from botocore.config import Config
    
    session = Session(
        region_name="<region_name>",
        aws_access_key_id="<>",
        aws_secret_access_key="<>",
        aws_session_token="<>"
    )
    # 强制使用us-east-1的STS端点验证凭证
    ec2_config = Config(sts_regional_endpoints='legacy')
    instance_types = session.client("ec2", config=ec2_config).describe_instance_types()
    

    或者直接指定STS端点URL:

    ec2_config = Config(sts_endpoint_url="https://sts.us-east-1.amazonaws.com")
    instance_types = session.client("ec2", config=ec2_config).describe_instance_types()
    
  3. 确认令牌版本
    解码临时会话令牌(JWT格式),检查ver字段是否为2。如果是V1令牌,需要修改assume-role请求,指定TokenDurationSeconds参数(必须大于900秒)来获取V2令牌,或者在STS请求中显式指定Version=2011-06-15的API版本。

  4. 验证区域服务启用状态
    确认你的AWS账号在失败的区域已经启用了EC2服务(虽然该问题的错误码是AuthFailure,但部分区域默认未启用服务也可能导致异常)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:58:28