如何在非AWS服务器上配置持久化AWS CLI会话?
解决非AWS环境下AWS CLI SSO会话自动过期问题
核心思路
遵循AWS最佳实践,不使用长期凭证,通过SSO自动刷新会话或IAM角色联合身份实现无人工干预的凭证管理,避免会话过期后需要手动操作的问题。
具体方案
方案1:配置SSO会话自动刷新
AWS CLI v2支持SSO会话自动刷新,只需修改配置文件开启该功能:
- 找到服务器上的AWS配置文件(路径通常为
~/.aws/config或C:\Users\<用户名>\.aws\config) - 添加SSO会话配置段,开启自动刷新并设置合适的会话时长:
[sso-session my-app-sso] sso_start_url = https://你的SSO门户地址.awsapps.com/start sso_region = 你的AWS区域(如us-east-1) sso_registration_scopes = sso:account:access sso_session_duration = 43200 # 最大支持12小时,可按需调整 sso_auto_refresh = true # 开启自动刷新 - 在应用使用的配置段关联这个SSO会话:
[profile my-app-profile] sso_session = my-app-sso sso_account_id = 你的AWS账号ID sso_role_name = 应用使用的IAM角色名 region = 你的AWS区域 - 首次在服务器执行
aws sso login --profile my-app-profile完成MFA验证,之后AWS CLI会自动在会话到期前刷新凭证,无需人工操作。
方案2:使用IAM角色联合身份(适合无人值守场景)
如果服务器所在环境有企业身份系统(如AD、Okta等),可配置SAML 2.0联合身份:
- 在AWS IAM中创建SAML身份提供商,关联企业身份系统
- 创建IAM角色,允许该身份提供商的用户/组调用
AssumeRole - 在服务器部署身份提供商客户端,自动获取SAML断言,通过
aws sts assume-role-with-saml获取临时凭证 - 编写简单脚本定时刷新凭证,将凭证注入环境变量或AWS本地凭证文件
方案3:用AWS Secrets Manager托管临时凭证(进阶多服务器场景)
- 搭建小型服务或使用Lambda,定期通过SSO登录获取临时凭证并存入Secrets Manager
- 服务器上的应用或脚本定时从Secrets Manager拉取最新凭证,替换本地AWS凭证文件
- 此方式适合多服务器共享凭证的场景,可统一管控凭证生命周期
注意事项
- 所有方案均遵循AWS临时凭证最佳实践,避免长期凭证泄露风险
- SSO会话的最大时长由AWS SSO管理员配置,需提前确认权限是否开放
- 确保服务器能正常访问AWS SSO门户地址和STS服务端口
内容的提问来源于stack exchange,提问作者Leventogenna
相关产品推荐
相关产品推荐

