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

使用IAM用户凭证通过Boto3 Assume IAM Role报InvalidClientTokenId错误如何解决

问题根因

你的代码存在两个问题,共同导致了报错:

  1. 未适配AWS中国分区配置:Boto3默认生成的STS客户端会指向AWS全球分区的服务端点,中国区的IAM凭证无法在全球分区端点完成校验,所以返回InvalidClientTokenId错误。你本地CLI可以正常调用是因为CLI配置中已经指定了中国区区域,请求会发往对应中国区的STS端点。
  2. 语法错误:你贴出的代码中,创建sts_client的代码块末尾多了一个多余的右括号,运行时会先触发语法报错。

修复方案

调整代码,在创建STS客户端时显式指定中国区区域,同时修正语法错误,参考代码如下:

import boto3

sts_client = boto3.client(
    'sts',
    region_name='cn-north-1', # 替换为你实际使用的中国区区域,可选值为cn-north-1、cn-northwest-1
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY
)

resp = sts_client.assume_role(
    RoleArn="arn:aws-cn:iam::123456789012:role/你的角色名称", # 注意中国区ARN前缀为arn:aws-cn,不要写成全球区的arn:aws
    RoleSessionName='boto3_client'
)

# 调用成功后可以获取返回的临时凭证
temp_cred = resp['Credentials']
print(temp_cred)

额外注意事项

  • 如果指定region_name后仍然报错,可以在创建客户端时新增endpoint_url参数显式指定中国区STS端点:endpoint_url='https://sts.cn-north-1.amazonaws.com.cn'
  • 确认传入的ACCESS_KEY、SECRET_KEY为字符串格式,没有多余的空格、换行符等无效字符
  • 确认目标角色的信任策略中已经允许你使用的IAM用户执行sts:AssumeRole操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:06:08