使用IAM用户凭证通过Boto3 Assume IAM Role报InvalidClientTokenId错误如何解决
问题根因
你的代码存在两个问题,共同导致了报错:
- 未适配AWS中国分区配置:Boto3默认生成的STS客户端会指向AWS全球分区的服务端点,中国区的IAM凭证无法在全球分区端点完成校验,所以返回
InvalidClientTokenId错误。你本地CLI可以正常调用是因为CLI配置中已经指定了中国区区域,请求会发往对应中国区的STS端点。 - 语法错误:你贴出的代码中,创建
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
相关产品推荐
相关产品推荐

