我代入了 AWS Identity and Access Management (IAM) 角色,我的 API 调用返回了与以下内容类似的错误: "An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials."
简短描述
AWS Security Token Service (AWS STS) 支持会话令牌的更新版本 2。默认情况下,新的 AWS 区域未激活,仅接受会话令牌的更新版本。如果版本 1 会话令牌向默认未激活的 AWS 区域中的服务端点发出请求,则会出现此错误。有关详细信息,请参阅管理 AWS 区域中的 AWS STS。
解决方法
从区域 AWS STS 端点获取的会话令牌为版本 2,在所有 AWS 区域都有效。最佳做法是使用区域 AWS STS 端点。
请使用以下方法之一解决此问题。
从区域端点获取令牌
以下示例命令使用适用于 Python 的 AWS SDK (Boto3):
# Replace existing code to create STS client with the following:
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.your-region.amazonaws.com')
注意:
- 根据您的环境替换 your-region、AccountID 和 RoleName。
- 需要设置 endpoint_url 才能为区域端点配置 STS 客户端。
要使用区域端点,请确保在现有 bash 命令中包含区域和端点 URL 选项。
命令示例:
aws sts assume-role --role-arn arn:aws:iam::AccountID:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com
**重要事项:**对于默认激活的区域,您必须在生成临时凭证的账户中激活区域 STS 端点。用户在提出请求时登录的是同一个账户还是不同的账户都没关系。对于手动激活的区域,请在发出请求的账户和生成凭证的账户中同时激活该区域。如果您不这样做,则可能会收到 InvalidClientTokenId 错误。有关详细信息,请参阅在 AWS 区域中激活和停用 AWS STS。
更改全球端点会话令牌的区域兼容性
默认情况下,对全球端点的 AWS STS 调用会颁发使用版本 1 的会话令牌。版本 1 令牌仅在默认激活的 AWS 区域有效。但是,您也可以配置 STS 全球端点以颁发版本 2 中的令牌,这些令牌可用于所有 AWS 区域。
有关详细信息,请参阅管理全球端点会话令牌。
**重要事项:**版本 2 令牌比版本 1 包含更多的字符。这可能会影响您临时存储令牌的现有系统。
相关信息
管理 AWS 区域中的 AWS STS
区域和端点