AWS 参数存储安全字符串

AWS Parameter store Secure String

我已经使用 .net AWS SDK 执行了 PutParameter,如下所示:

 using (var client =
                new AmazonSimpleSystemsManagementClient(_key, _secret, _region))
            {
      await client.PutParameterAsync(new PutParameterRequest
                        {
                            Name = "MyBlah",
                            Overwrite = true,
                            KeyId = keyId,
                            Value = "Blah",
                            Type = ParameterType.SecureString
                        });
    }

我可以在控制台看到我的数据。

然而,当我点击 'show' 时,我可以看到明文值:

我怎样才能对用户隐藏它,但仍然让他们看到那里有价值?

概览

为了能够读取参数的值,用户需要访问以下访问权限 ssm:GetParameters(以及对加密 KMS 密钥的解密访问权限,默认情况下 aws/ssm)。

避免权限

如果您使用最低权限向您的用户授予访问权限,请确保他们没有获得 ssm:GetParameters 操作的访问权限。

拒绝权限

虽然在很多地方都推荐最低权限,但大多数示例权限都过于宽松。如果您无法避免授予权限,则可以向您不想检索值的任何用户添加明确的 拒绝

以下策略,如果附加到 User/Role 应该阻止读取参数值的访问。

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": "ssm:GetParameters",
    "Resource": "*"
  }]
}

拒绝解密

由于查看 SecureString 依赖于使用 KMS 解密,您也可以拒绝解密:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": "kms:Decrypt",
    "Resource": "[key arn]"
  }]
}

[key arn] 替换为 KMS 密钥,或 * 以阻止使用任何密钥解密。