如何配置AWS策略让指定联合用户仅访问目标Secrets Manager密钥
解决AWS Secrets Manager仅允许指定联合用户访问密钥的问题
问题分析
你当前的拒绝策略未生效,核心原因可能是:
- 策略中填写的
aws:PrincipalArn与你实际的身份ARN不匹配(可通过命令确认精确值) - 缺少对应的允许权限(拒绝策略生效的前提是存在允许访问的规则,否则AWS默认会拒绝所有请求)
正确配置步骤
1. 获取你的精确身份标识
先执行以下命令,获取当前会话的ARN和UserId:
aws sts get-caller-identity
输出中的Arn和UserId字段就是你需要使用的精确值,比如arn:aws:sts::123456789:assumed-role/ProdAdmin-Prod-Role/myUsername和AIDACKCEVSQ6C2EXAMPLE:myUsername。
2. 配置密钥的资源策略
使用以下策略,确保仅你能访问目标密钥,其他所有主体(包括同角色的其他用户)都会被拒绝:
{ "Version": "2012-10-17", "Statement": [ // 允许你自己访问密钥 { "Effect": "Allow", "Principal": { "AWS": "arn:aws:sts::123456789:assumed-role/ProdAdmin-Prod-Role/myUsername" }, "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:af-south-1:123456789:secret:test_secret-Q6dOdK" }, // 拒绝所有其他主体访问 { "Effect": "Deny", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:af-south-1:123456789:secret:test_secret-Q6dOdK", "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:sts::123456789:assumed-role/ProdAdmin-Prod-Role/myUsername" } } } ] }
3. 更可靠的替代方案:使用aws:userid条件
联合身份的aws:userid格式为[角色ID]:[会话名称],这个值更稳定(角色ID不会变化)。使用该条件的策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:af-south-1:123456789:secret:test_secret-Q6dOdK", "Condition": { "StringEquals": { "aws:userid": "AIDACKCEVSQ6C2EXAMPLE:myUsername" } } }, { "Effect": "Deny", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:af-south-1:123456789:secret:test_secret-Q6dOdK", "Condition": { "StringNotEquals": { "aws:userid": "AIDACKCEVSQ6C2EXAMPLE:myUsername" } } } ] }
关键注意事项
- 必须保留
Allow语句,否则即使没有Deny规则,AWS默认也会拒绝访问 - 务必使用
aws sts get-caller-identity获取精确的身份标识,避免手动输入错误 - 如果你的会话名称是动态生成的,可结合
StringLike使用通配符(需注意控制范围,避免扩大权限)
内容的提问来源于stack exchange,提问作者khuvulani
相关产品推荐
相关产品推荐

