如何限制指定用户从Secrets Manager检索密钥值(boto3/控制台)
Secrets Manager 密钥检索权限访问控制配置方案
核心控制目标:仅授权指定用户可执行secretsmanager:GetSecretValue(对应控制台/API的检索密钥值操作),其余所有用户无该操作权限,推荐优先使用密钥级资源策略实现,权限直接绑定在密钥对象上,避免身份策略叠加导致的越权风险。
方法1:通过AWS管理控制台配置
- 登录AWS管理控制台,进入Secrets Manager服务页,在密钥列表找到需要配置的目标密钥,点击进入密钥详情页
- 切换到详情页的「权限」标签,找到资源策略编辑区,先删除原有策略中对
secretsmanager:GetSecretValue的宽泛授权(例如授权Principal为*的允许规则必须清理) - 写入最小权限策略,示例如下,替换占位符为你的实际账号ID、授权用户ARN:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[你的账号ID]:user/[授权用户名]" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" }, { "Effect": "Deny", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::[你的账号ID]:user/[授权用户名]" } } } ] }
- 确认策略内容无误后点击「保存更改」,策略通常在10秒内生效
- 验证:分别使用授权用户、非授权用户账号尝试检索密钥值,非授权用户会收到AccessDenied报错即为配置成功
方法2:通过boto3配置
前置要求:执行配置操作使用的凭证需要持有secretsmanager:PutResourcePolicy权限。
- 若环境未安装boto3,先执行安装命令:
pip install boto3 - 编写配置脚本,替换脚本中区域、账号ID、密钥标识、授权用户ARN等占位符为实际值,示例代码如下:
import boto3 import json # 初始化Secrets Manager客户端,替换为你使用的AWS区域 sm_client = boto3.client("secretsmanager", region_name="ap-east-1") # 定义访问控制策略 access_policy = { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:user/authorized-operator"}, "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:ap-east-1:123456789012:secret:prod/db-password-AbCd12" }, { "Effect": "Deny", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:ap-east-1:123456789012:secret:prod/db-password-AbCd12", "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789012:user/authorized-operator" } } } ] } # 绑定策略到目标密钥 resp = sm_client.put_resource_policy( SecretId="prod/db-password", # 可传入密钥名称、完整ARN ResourcePolicy=json.dumps(access_policy), BlockPublicPolicy=True # 开启公共策略拦截,避免意外配置公网开放权限 ) print("策略配置完成,请求ID:", resp["ResponseMetadata"]["RequestId"])
- 运行脚本完成配置后,可调用
sm_client.get_resource_policy(SecretId="你的密钥标识")校验策略是否正确绑定,再分别使用授权、非授权身份调用get_secret_value接口验证权限控制效果。
注意:如果需要授权给IAM角色、用户组,只需将策略中Principal对应的ARN替换为角色、用户组的ARN即可;跨账号授权场景下建议保留显式Deny规则,避免跨账号身份策略的权限叠加导致未授权访问。
内容的提问来源于stack exchange,提问作者Alex Pătroi
相关产品推荐
相关产品推荐

