如何避免本地硬编码AWS凭证以获取AWS CLI临时访问凭证
解决方案
以下是几种可实现不在本地明文硬编码长期IAM凭证的方案:
方案1:使用aws-vault工具管理凭证(最推荐本地个人用户使用)
- aws-vault会将IAM用户的长期凭证加密存储在操作系统原生的密钥管理组件中(macOS钥匙串、Windows凭据管理器、Linux libsecret),不会明文保存在
.aws/credentials等普通配置文件里,从根源避免硬编码泄露风险 - 首次配置仅需执行
aws-vault add 自定义配置名,按照提示输入一次长期access key和secret key即可,后续无需再手动维护长期凭证 - 需要获取临时会话时直接执行对应命令即可,工具会自动完成STS调用、MFA校验、临时凭证缓存/续期全流程,示例命令:
# 执行单条AWS CLI命令 aws-vault exec 自定义配置名 --mfa-token=123456 -- aws s3 ls # 导出临时凭证到当前shell环境,后续所有aws命令都自动使用临时凭证 aws-vault exec 自定义配置名 --mfa-token=123456 -- $SHELL
方案2:使用AWS CLI原生credential_process配置(无需第三方工具)
- 你可以自行编写一个轻量脚本,逻辑为:读取用户输入的MFA码,调用
aws sts get-session-token接口,输出符合AWS CLI规范的JSON格式凭证 - 长期凭证不需要写入本地配置文件,可以设置为脚本运行时手动输入,或者从本地加密存储中读取
- 在
.aws/config中添加对应配置,指定credential_process指向你编写的脚本即可,配置示例:[profile mfa-user] credential_process = /用户本地路径/mfa_sts_script.sh region = cn-north-1 - 后续调用AWS CLI时会自动触发脚本获取临时凭证,不需要手动管理凭证文件的写入和切换
方案3:企业用户对接身份提供商实现完全无长期凭证
- 如果你使用的是企业AWS账号,可通过IAM Identity Center(原AWS SSO)对接企业身份源(如AD、Okta等),本地完全不需要存储任何IAM用户长期凭证
- 每次需要访问AWS资源时,执行
aws sso login,通过浏览器完成企业身份认证和MFA校验后,CLI会自动获取临时凭证,全程无需使用IAM用户的长期访问密钥
临时替代方案
如果不想做上述配置,也可以每次需要获取会话前,手动将长期AK/SK临时写入当前shell的环境变量,调用STS获取到临时凭证后立即销毁环境变量,本地不会留存长期凭证:
# 临时写入环境变量,仅当前shell生效 export AWS_ACCESS_KEY_ID=你的AK export AWS_SECRET_ACCESS_KEY=你的SK # 调用STS获取临时凭证 aws sts get-session-token --serial-number arn:aws:iam::account_number:mfa/user_name --token-code 123456 # 立即销毁长期凭证环境变量 unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
内容的提问来源于stack exchange,提问作者dataviews
相关产品推荐
相关产品推荐

