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

EC2实例容器调用AWS接口报InvalidClientTokenId错误求助

解决AWS CLI InvalidClientTokenId错误的排查步骤

1. 修复环境变量导出的引号问题

你的脚本中使用jq获取密钥时未加-r参数,导致输出的密钥带有双引号,直接导出会让环境变量值包含引号,这是最常见的触发错误的原因。修改脚本如下:

export $(printf "AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s" \
            $(aws secretsmanager get-secret-value \
    --secret-id arn:aws-cn:secretsmanager:********* \
    --query 'SecretString' --output=text | jq -r '.ACCESS_KEY_TEST,.SECRET_KEY_TEST'))

unset AWS_SESSION_TOKEN
unset AWS_PROFILE # 额外清理可能的配置文件干扰

# 验证变量是否正确
echo "Access Key: $AWS_ACCESS_KEY_ID"
echo "Secret Key: $AWS_SECRET_ACCESS_KEY"

aws sts get-caller-identity --region <目标区域>

jq -r会输出原始字符串(不带引号),确保环境变量值是纯密钥内容。

2. 排查容器内的其他凭证来源

  • 检查容器内是否存在~/.aws/credentials文件,如果有,删除或重命名它,避免该文件内的凭证覆盖环境变量:
    rm -f ~/.aws/credentials
    
  • 检查是否有AWS_PROFILE环境变量,它会让CLI优先使用指定配置文件的凭证,直接unset即可(如上脚本所示)。

3. 验证密钥本身的有效性

从Secrets Manager中提取密钥值,在本地环境测试:

export AWS_ACCESS_KEY_ID="你的密钥ID"
export AWS_SECRET_ACCESS_KEY="你的密钥Secret"
aws sts get-caller-identity --region <目标区域>

如果这里也报错,说明密钥本身无效:

  • 确认密钥属于目标AWS账号,且未被禁用/过期
  • 联系目标账号管理员重新生成有效密钥

4. 排除实例元数据的干扰

如果容器仍在使用EC2实例的Instance Profile凭证,可以在调用CLI时强制指定使用环境变量:

aws sts get-caller-identity --region <目标区域> \
  --aws-access-key-id $AWS_ACCESS_KEY_ID \
  --aws-secret-access-key $AWS_SECRET_ACCESS_KEY

这种方式会绕过所有其他凭证来源,直接使用你指定的密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:50:04