You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制指定用户从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:24:25