作为AWS联合用户,如何获取用于AWS CLI的API凭证?
AWS联合访问下获取CLI API凭证的解决方案
为啥你找不到IAM凭证集选项?
首先得明确:你通过内部SSO+自定义联合代理访问AWS,本质是以IAM角色的身份临时访问,而非IAM用户。IAM凭证集(也就是永久的Access Key/Secret Key)是专门给IAM用户用的,联合身份用户(像你这种SSO登录的)默认没有创建这类永久凭证的权限——而且从AWS安全最佳实践来说,也不推荐给联合用户用永久凭证,临时凭证才是更安全的选择。
获取CLI可用临时凭证的两种方法
方法1:用AWS CLI的sso login(最推荐)
如果公司已经配置了AWS SSO(哪怕是基于自定义代理的),直接用CLI的SSO登录流程就行:
- 先配置SSO专属配置文件:
跟着提示输入SSO启动URL(就是你从内部网站跳转到AWS的那个自定义代理入口URL)、AWS区域,然后选择你有权限访问的账户和角色。aws configure sso - 触发SSO登录:
这时候会自动弹出浏览器让你走内部SSO登录流程,登录成功后,CLI会自动获取有效期12小时左右的临时凭证,到期后重新执行这个命令就行。aws sso login --profile your-sso-profile
方法2:手动获取临时凭证(适合特殊场景)
如果sso login没法直接用,你可以通过自定义联合代理的流程手动拿临时凭证:
- 先通过内部SSO登录,从自定义联合代理那里拿到身份令牌(一般登录后会返回类似
Assertion的令牌内容)。 - 调用AWS STS服务的
AssumeRoleWithSAML或AssumeRoleWithWebIdentityAPI(取决于你的联合身份是SAML还是OIDC类型),传入令牌和你要扮演的IAM角色ARN,就能拿到临时的AccessKeyId、SecretAccessKey和SessionToken。 - 把这些临时凭证配置到CLI的配置文件里:
在~/.aws/credentials(Windows是C:\Users\<你的用户名>\.aws\credentials)里添加:
之后用[temp-federated-profile] aws_access_key_id = 你的临时AccessKey aws_secret_access_key = 你的临时SecretKey aws_session_token = 你的临时SessionTokenaws --profile temp-federated-profile ec2 describe-instances测试下能不能正常调用API就行。
要不要找IT团队调整配置?
- 如果你想用
sso login的方法,得让IT确认已经给你的账号配置了AWS SSO权限,并且提供正确的SSO启动URL和区域信息。 - 要是用手动拿凭证的方法,需要IT确认你有权限调用对应的STS API,能拿到联合身份令牌,同时确保你要扮演的IAM角色的信任策略允许
sts:AssumeRoleWithSAML或sts:AssumeRoleWithWebIdentity操作。 - 另外,如果你确实需要永久凭证(非常不推荐,风险高),IT得给你创建一个IAM用户并分配权限,但从安全角度来说,优先用临时凭证才是合规的做法。
内容的提问来源于stack exchange,提问作者kazamatzuri
相关产品推荐
相关产品推荐

