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

如何在~/.aws/credentials中设置aws_security_token适配容器默认配置?

如何在~/.aws/credentials中设置aws_security_token

问题背景

执行Docker容器前需要切换AWS角色,容器仅使用[default]配置文件。只能通过挂载~/.aws/credentials文件传递凭证,无法使用环境变量。编写自动化脚本时,发现aws configure set aws_security_token会将该字段写入~/.aws/config而非~/.aws/credentials,导致容器内命令因无法读取有效安全令牌而失败。

当前脚本草稿

profile=${1:-MicroservicesInternal-Learning-Engineer}
myrole_credentials=$(aws sts assume-role --role-arn arn:aws:iam::123456789123:role/my-role --role-session-name myname --query "Credentials.[AccessKeyId,SecretAccessKey,SessionToken]" --output text --profile $profile)

aws_access_key_id=$(echo $myrole_credentials | cut -d" " -f1)
aws_secret_access_key=$(echo $myrole_credentials | cut -d" " -f2)
aws_session_token=$(echo $myrole_credentials | cut -d" " -f3)
aws_security_token=$(echo $myrole_credentials | cut -d" " -f3)

echo aws_access_key_id=$aws_access_key_id
echo aws_secret_access_key=$aws_secret_access_key
echo aws_session_token=$aws_session_token
echo aws_security_token=$aws_security_token

aws configure set aws_access_key_id $aws_access_key_id --profile default
aws configure set aws_secret_access_key $aws_secret_access_key --profile default
aws configure set aws_session_token $aws_session_token --profile default
aws configure set aws_security_token $aws_security_token --profile default

aws sts get-caller-identity

示例错误输出

aws_access_key_id=key1234
aws_secret_access_key=secret1234
aws_session_token=token1234
aws_security_token=token1234

An error occurred (ExpiredToken) when calling the GetCallerIdentity operation: The security token included in the request is expired

解决方案

aws configure set命令会根据参数类型自动选择写入credentials或config文件,其中aws_security_token默认被归类为配置项,会写入config文件。要将其写入credentials文件,直接编辑文件是最可靠的方式:

替换脚本中所有aws configure set的行,改为直接覆盖~/.aws/credentials的[default]段:

# 替换原有的aws configure set命令
cat > ~/.aws/credentials << EOF
[default]
aws_access_key_id = $aws_access_key_id
aws_secret_access_key = $aws_secret_access_key
aws_session_token = $aws_session_token
aws_security_token = $aws_security_token
EOF

说明

  • 这种方式确保所有凭证字段都写入~/.aws/credentials的[default]配置段,容器挂载该文件后可直接读取到完整有效的凭证。
  • aws_session_token和aws_security_token值相同,部分旧版AWS工具依赖aws_security_token字段,同时写入两个字段可兼容更多场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:13:20