AWS参数存储安全字符串

时间:2017-09-19 09:04:13

标签: amazon-web-services amazon-iam amazon-systems-manager

我使用.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'时,我可以看到明文的价值: Console

我如何向用户隐藏此内容,但仍让他们看到那里有值?

1 个答案:

答案 0 :(得分:4)

<强>概述

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

避免许可

如果您使用最低权限授予用户访问权限,请确保他们无法访问ssm:GetParameters操作。

拒绝许可

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

以下策略(如果附加到用户/角色)应阻止访问读取参数值。

{
  "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]"
  }]
}

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