AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

关于安全字符串参数

安全字符串参数是需要以安全的方式存储和引用的任何敏感数据。如果您有不希望用户更改或以纯文本形式引用的数据(例如密码或许可证密钥),则应使用 SecureString 数据类型创建这些参数。我们建议您对以下情形使用安全字符串参数。

  • 您想要在各种 AWS 服务间使用数据/参数,但又不想以纯文本形式在命令、函数、代理日志或 AWS CloudTrail 日志中公开这些值。

  • 您想要控制可以访问敏感数据的人。

  • 您希望在有人访问敏感数据时进行审核 (AWS CloudTrail)。

  • 您希望对您的敏感数据加密,并想用自己的加密密钥管理访问。

如果您在创建参数时选择了 SecureString 数据类型,那么 Parameter Store 将使用 AWS Key Management Service (KMS) 客户主密钥 (CMK) 来加密参数值。加密参数值时,KMS 使用客户托管 CMK 或 AWS 托管 CMK。有关 AWS 托管和客户托管 CMK 的更多信息,请参阅 AWS Key Management Service Developer Guide 中的 AWS Key Management Service 概念。有关 Parameter Store 和 AWS KMS 加密的更多信息,请参阅 AWS Systems Manager Parameter Store 如何使用 AWS KMS

注意

要查看 CMK,请使用 AWS KMS DescribeKey 操作。此 AWS CLI 示例使用 DescribeKey 查看 AWS 托管 CMK。

aws kms describe-key --key-id alias/aws/ssm

重要

仅为安全字符串参数的 加密。参数的名称、描述和其他属性不会被加密。

使用 KMS 客户主密钥创建安全字符串参数

如果您在您的账户和区域使用 AWS 托管 CMK 创建安全字符串参数,则需为 --key-id 参数提供值。

以下 AWS CLI 示例显示了在 Parameter Store 中不使用 --key-id 参数创建新的安全字符串参数的命令:

aws ssm put-parameter --name parameter_name --value "parameter value" --type SecureString

使用客户托管 CMK 创建安全字符串参数

要使用客户托管 CMK 而不是分配给您的账户的 AWS 托管 CMK,您必须使用 --key-id 参数指定密钥。该参数支持以下 KMS 参数格式。

  • 密钥 ARN 示例:

    arn:aws:kms:us-west-2:123456789012:key/12345678-1234-1234-1234-123456789012

  • 别名 ARN 示例:

    arn:aws:kms:us-west-2:123456789012:alias/MyAliasName

  • 密钥 ID 示例:

    12345678-1234-1234-1234-123456789012

  • 别名示例:

    alias/MyAliasName

您可以使用 AWS Management Console 或 AWS KMS API 创建客户托管 CMK。以下 AWS CLI 命令在您的 AWS 账户的当前区域创建客户托管密钥。

aws kms create-key

使用以下格式的命令,利用您刚刚创建的密钥创建安全字符串参数。

aws ssm put-parameter --name parameter_name --value "parameter value" --type SecureString --key-id arn:aws:kms:us-west-2:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e

注意

您可以使用加密值手动创建参数。在本例中,由于值已经加密,所以您无需选择 SecureString 数据类型。如果您选择 SecureString,将对您的参数进行双重加密。

默认情况下,所有安全字符串值均显示为密码文本。要解密安全字符串值,用户必须有权调用 KMS Decrypt API 操作。有关配置 KMS 访问控制的信息,请参阅 AWS Key Management Service Developer Guide 中的 AWS KMS 的身份验证和访问控制

将安全字符串参数用于其他 AWS 服务

您还可以在其他 AWS 服务中使用安全字符串参数。在下面的示例中,AWS Lambda 函数使用 GetParameters API 检索安全字符串参数。

from __future__ import print_function import json import boto3 ssm = boto3.client('ssm', 'us-west-2') def get_parameters(): response = ssm.get_parameters( Names=['LambdaSecureString'],WithDecryption=True ) for parameter in response['Parameters']: return parameter['Value'] def lambda_handler(event, context): value = get_parameters() print("value1 = " + value) return value # Echo back the first key value

相关主题

有关如何创建和使用安全字符串参数的示例,请参阅 演练:创建安全字符串参数并将实例加入到域 (PowerShell)。有关将 Systems Manager 参数与其他 AWS 服务结合使用的更多信息,请参阅以下博客文章。