如何通过跨账户角色获取AWS Secrets Manager机密值?
解决方案
是的,你必须先扮演关联的cross-account-secret-read角色,才能使用该角色的权限访问跨账户机密。直接用IAM用户X-app-pr-user执行命令会失败,因为该用户本身没有被目标机密的资源策略授予访问权限,而关联的角色权限需要主动切换后才能生效。
方法一:临时扮演角色获取凭证
- 执行STS命令获取角色临时凭证:
aws sts assume-role --role-arn arn:aws:iam::[ACCOUNT-B-ID]:role/cross-account-secret-read --role-session-name secret-read-session
将[ACCOUNT-B-ID]替换为Account B的实际AWS账户ID,执行后会返回包含AccessKeyId、SecretAccessKey、SessionToken的JSON结果。
- 设置环境变量使用临时凭证:
export AWS_ACCESS_KEY_ID="返回的AccessKeyId值" export AWS_SECRET_ACCESS_KEY="返回的SecretAccessKey值" export AWS_SESSION_TOKEN="返回的SessionToken值"
- 再次执行获取机密的命令:
aws secretsmanager get-secret-value --secret-id arn:accountB-secretId
方法二:配置AWS Profile长期使用
如果需要频繁访问,可以在AWS配置文件中添加角色配置:
- 编辑
~/.aws/config文件,添加以下内容:
[profile cross-account-secret] role_arn = arn:aws:iam::[ACCOUNT-B-ID]:role/cross-account-secret-read source_profile = default # 替换为你的X-app-pr-user对应的配置文件名称
- 使用该profile直接执行命令:
aws secretsmanager get-secret-value --secret-id arn:accountB-secretId --profile cross-account-secret
补充:资源策略替代方案
如果不想通过扮演角色,也可以修改Account B中目标机密的资源策略,直接允许X-app-pr-user的ARN执行secretsmanager:GetSecretValue操作。例如,给机密添加以下资源策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[ACCOUNT-X-ID]:user/X-app-pr-user" }, "Action": "secretsmanager:GetSecretValue", "Resource": "arn:accountB-secretId" } ] }
将[ACCOUNT-X-ID]替换为X-app-pr-user所在账户的ID。但这种方法会直接授予用户跨账户权限,安全性不如角色切换,需根据实际需求评估。
内容的提问来源于stack exchange,提问作者chmardr
相关产品推荐
相关产品推荐

