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 密钥,或 *
以阻止使用任何密钥解密。
我已经使用 .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 密钥,或 *
以阻止使用任何密钥解密。