如何限制IAM用户组仅访问AWS Secrets Manager中Test/前缀的密钥
问题根因
secretsmanager:ListSecrets接口不支持资源级权限控制,该操作的资源只能指定为*。你最初的策略将所有Secrets Manager操作的资源限定为Test/*前缀的ARN,直接导致ListSecrets操作被全局拒绝:
如果你调用aws secretsmanager get-secret-value时传入的是密钥名称而非完整ARN,AWS CLI会默认先调用ListSecrets接口匹配对应密钥的ARN,没有List权限就会直接报错,哪怕你持有该密钥的读权限也无法调用成功。- 你替换为单个完整ARN后可列出所有密钥的问题,请先检查该IAM用户/用户组是否还绑定了其他包含无限制
secretsmanager:ListSecrets权限的策略,多策略叠加时权限是取并集的,会导致你的限制规则失效。 - Secrets Manager创建的密钥ARN末尾会自动追加6位随机后缀,你最初写的
arn:aws:secretsmanager:*:*:secret:Test/*资源匹配规则已经可以覆盖这类ARN,这部分不是核心问题。
修复后的策略示例
拆分两条Statement分别处理资源级操作和列表操作即可实现需求:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowTestPrefixedSecretFullOperations", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecret", "secretsmanager:DeleteSecret", "secretsmanager:TagResource" // 按需添加除ListSecrets外的所需操作,不要直接写secretsmanager:* ], "Resource": "arn:aws:secretsmanager:*:*:secret:Test/*" }, { "Sid": "AllowListOnlyTestPrefixedSecrets", "Effect": "Allow", "Action": "secretsmanager:ListSecrets", "Resource": "*", "Condition": { "StringLike": { "secretsmanager:ResourceName": "Test/*" } } } ] }
标签限制适配方案
如果你需要用标签做权限控制,只需修改第二条Statement的Condition规则即可,示例:
"Condition": { "StringEquals": { "aws:ResourceTag/Env": "Test" } }
配置后ListSecrets只会返回带有Env=Test标签的密钥,你也可以在第一条Statement中补充相同标签条件做双重校验,避免非对应标签的Test前缀密钥被访问。
内容的提问来源于stack exchange,提问作者JeremP
相关产品推荐
相关产品推荐

