使用 AWS CLI 来创建 Parameter Store 参数 - AWS Systems Manager

使用 AWS CLI 来创建 Parameter Store 参数

您可以使用 AWS Command Line Interface (AWS CLI) 创建 StringStringListSecureString 参数类型。删除参数后,至少等待 30 秒才能创建具有相同名称的参数。

参数不能被引用或嵌套在其他参数的值中。参数值中不能包含 {{}}{{ssm:parameter-name}}

注意

参数只在创建它的 AWS 区域 可用。

使用 AWS CLI 来创建 String 参数

  1. 安装并配置 AWS Command Line Interface(AWS CLI)(如果尚未执行该操作)。

    有关更多信息,请参阅安装或更新 AWS CLI 的最新版本

  2. 运行以下命令,创建 String 类型参数。将每个示例资源占位符替换为您自己的信息。

    Linux & macOS
    aws ssm put-parameter \ --name "parameter-name" \ --value "parameter-value" \ --type String \ --tags "Key=tag-key,Value=tag-value"
    Windows
    aws ssm put-parameter ^ --name "parameter-name" ^ --value "parameter-value" ^ --type String ^ --tags "Key=tag-key,Value=tag-value"

    - 或者 -

    运行以下命令,创建一个包含 Amazon Machine Image (AMI) ID 作为参数值的参数。

    Linux & macOS
    aws ssm put-parameter \ --name "parameter-name" \ --value "an-AMI-id" \ --type String \ --data-type "aws:ec2:image" \ --tags "Key=tag-key,Value=tag-value"
    Windows
    aws ssm put-parameter ^ --name "parameter-name" ^ --value "an-AMI-id" ^ --type String ^ --data-type "aws:ec2:image" ^ --tags "Key=tag-key,Value=tag-value"

    --name 选项支持层次结构。有关层次结构的更多信息,请参阅 处理 Parameter Store 中的参数层次结构

    仅当要创建包含 AMI ID 的参数时,才必须指定 --data-type 选项。它会验证您输入的参数值是否为格式正确的 Amazon Elastic Compute Cloud (Amazon EC2) AMI ID。对于所有其他参数,默认数据类型为 text,并且可以选择指定一个值。有关更多信息,请参阅 在 Parameter Store 中为 Amazon Machine Image ID 使用本机参数支持

    重要

    如果成功,则该命令返回参数的版本号。例外:如果您已将 aws:ec2:image 指定为数据类型,则响应中的新版本号并不意味着参数值已经过验证。有关更多信息,请参阅 在 Parameter Store 中为 Amazon Machine Image ID 使用本机参数支持

    以下示例将两个键/值对标签添加到参数。

    Linux & macOS
    aws ssm put-parameter \ --name parameter-name \ --value "parameter-value" \ --type "String" \ --tags '[{"Key":"Region","Value":"East"},{"Key":"Environment", "Value":"Production"}]'
    Windows
    aws ssm put-parameter ^ --name parameter-name ^ --value "parameter-value" ^ --type "String" ^ --tags [{\"Key\":\"Region1\",\"Value\":\"East1\"},{\"Key\":\"Environment1\",\"Value\":\"Production1\"}]

    以下是在名称中使用参数层次结构创建明文 String 参数的示例。它会返回参数的版本号。有关参数层次结构的更多信息,请参阅 处理 Parameter Store 中的参数层次结构

    Linux & macOS

    不在层次结构中的参数

    aws ssm put-parameter \ --name "golden-ami" \ --type "String" \ --value "ami-12345abcdeEXAMPLE"

    层次结构中的参数

    aws ssm put-parameter \ --name "/amis/linux/golden-ami" \ --type "String" \ --value "ami-12345abcdeEXAMPLE"
    Windows

    不在层次结构中的参数

    aws ssm put-parameter ^ --name "golden-ami" ^ --type "String" ^ --value "ami-12345abcdeEXAMPLE"

    层次结构中的参数

    aws ssm put-parameter ^ --name "/amis/windows/golden-ami" ^ --type "String" ^ --value "ami-12345abcdeEXAMPLE"
  3. 运行以下命令,查看最新参数值并验证新参数的详细信息。

    aws ssm get-parameters --names "/Test/IAD/helloWorld"

    系统将返回类似于以下内容的信息。

    {
        "InvalidParameters": [],
        "Parameters": [
            {            
                "Name": "/Test/IAD/helloWorld",
                "Type": "String",
                "Value": "My updated parameter value",
                "Version": 2,
                "LastModifiedDate": "2020-02-25T15:55:33.677000-08:00",
                "ARN": "arn:aws:ssm:us-east-2:123456789012:parameter/Test/IAD/helloWorld"            
            }
        ]
    }

运行以下命令,更改参数值。它会返回参数的版本号。

aws ssm put-parameter --name "/Test/IAD/helloWorld" --value "My updated 1st parameter" --type String --overwrite

运行以下命令,查看参数值的历史记录。

aws ssm get-parameter-history --name "/Test/IAD/helloWorld"

运行以下命令,在命令中使用该参数。

aws ssm send-command --document-name "AWS-RunShellScript" --parameters '{"commands":["echo {{ssm:/Test/IAD/helloWorld}}"]}' --targets "Key=instanceids,Values=instance-ids"

如果您只想检索参数值,请运行以下命令。

aws ssm get-parameter --name testDataTypeParameter --query "Parameter.Value"

如果您只想使用 get-parameters 检索参数值,请运行以下命令。

aws ssm get-parameters --names "testDataTypeParameter" --query "Parameters[*].Value"

运行以下命令,查看参数元数据。

aws ssm describe-parameters --filters "Key=Name,Values=/Test/IAD/helloWorld"
注意

名称必须大写。

系统将返回类似于以下内容的信息。

{
    "Parameters": [
        {
            "Name": "helloworld",
            "Type": "String",
            "LastModifiedUser": "arn:aws:iam::123456789012:user/JohnDoe",
            "LastModifiedDate": 1494529763.156,
            "Version": 1,
            "Tier": "Standard",
            "Policies": []           
        }
    ]
}

使用 AWS CLI 来创建 StringList 参数

  1. 安装并配置 AWS Command Line Interface(AWS CLI)(如果尚未执行该操作)。

    有关更多信息,请参阅安装或更新 AWS CLI 的最新版本

  2. 运行以下命令创建一个参数。将每个示例资源占位符替换为您自己的信息。

    Linux & macOS
    aws ssm put-parameter \ --name "parameter-name" \ --value "a-comma-separated-list-of-values" \ --type StringList \ --tags "Key=tag-key,Value=tag-value"
    Windows
    aws ssm put-parameter ^ --name "parameter-name" ^ --value "a-comma-separated-list-of-values" ^ --type StringList ^ --tags "Key=tag-key,Value=tag-value"
    注意

    如果成功,则该命令返回参数的版本号。

    此示例将两个键/值对添加到参数。(根据本地计算机上的操作系统类型,运行以下命令之一。从本地 Windows 计算机运行的版本包含转义字符(“\”),您需要从命令行工具运行命令。)

    下面是一个使用参数层次结构的 StringList 示例。

    Linux & macOS
    aws ssm put-parameter \ --name /IAD/ERP/Oracle/addUsers \ --value "Milana,Mariana,Mark,Miguel" \ --type StringList
    Windows
    aws ssm put-parameter ^ --name /IAD/ERP/Oracle/addUsers ^ --value "Milana,Mariana,Mark,Miguel" ^ --type StringList
    注意

    StringList 中的项目必须用逗号 (,) 分隔。不能使用其他标点符号或特殊字符对列表中的项目进行转义。如果您有需要逗号的参数值,则使用 String 类型。

  3. 运行 get-parameters 命令,验证该参数的详细信息。例如:

    aws ssm get-parameters --name "/IAD/ERP/Oracle/addUsers"

使用 AWS CLI 来创建 SecureString 参数

使用以下过程创建 SecureString 参数。将每个示例资源占位符替换为您自己的信息。

重要

只会加密 SecureString 参数的。不会加密参数名称、描述和其他属性。

重要

Parameter Store 仅支持对称加密 KMS 密钥。不能使用非对称加密 KMS 密钥来加密您的参数。要获取确定 KMS 密钥是对称还是非对称密钥的帮助,请参阅 AWS Key Management Service 开发人员指南中的识别对称 KMS 密钥和非对称 KMS 密钥

  1. 安装并配置 AWS Command Line Interface(AWS CLI)(如果尚未执行该操作)。

    有关更多信息,请参阅安装或更新 AWS CLI 的最新版本

  2. 运行以下命令之一,创建使用 SecureString 数据类型的参数。

    Linux & macOS

    使用默认的 AWS 托管式密钥创建 SecureString 参数

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

    创建使用客户托管密钥的 SecureString 参数

    aws ssm put-parameter \ --name "parameter-name" \ --value "a-parameter-value, for example P@ssW%rd#1" \ --type "SecureString" --tags "Key=tag-key,Value=tag-value"

    创建使用自定义 AWS KMS 密钥的 SecureString 参数

    aws ssm put-parameter \ --name "parameter-name" \ --value "a-parameter-value, for example P@ssW%rd#1" \ --type "SecureString" \ --key-id "your-account-ID/the-custom-AWS KMS-key" \ --tags "Key=tag-key,Value=tag-value"
    Windows

    使用默认的 AWS 托管式密钥创建 SecureString 参数

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

    创建使用客户托管密钥的 SecureString 参数

    aws ssm put-parameter ^ --name "parameter-name" ^ --value "a-parameter-value, for example P@ssW%rd#1" ^ --type "SecureString" ^ --tags "Key=tag-key,Value=tag-value"

    创建使用自定义 AWS KMS 密钥的 SecureString 参数

    aws ssm put-parameter ^ --name "parameter-name" ^ --value "a-parameter-value, for example P@ssW%rd#1" ^ --type "SecureString" ^ --key-id " ^ --tags "Key=tag-key,Value=tag-value"account-ID/the-custom-AWS KMS-key"

    如果您在自己的账户和区域中使用 AWS 托管式密钥创建 SecureString 参数,则无需提供 --key-id 参数的值。

    注意

    要使用分配给您的 AWS 账户和 AWS 区域的 AWS KMS key,请从命令中删除 key-id 参数。有关 AWS KMS keys 的更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS Key Management Service 概念

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

    • 密钥 Amazon Resource Name (ARN) 示例:

      arn:aws:kms:us-east-2:123456789012:key/key-id

    • 别名 ARN 示例:

      arn:aws:kms:us-east-2:123456789012:alias/alias-name

    • 密钥 ID 示例:

      12345678-1234-1234-1234-123456789012

    • 别名示例:

      alias/MyAliasName

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

    aws kms create-key

    使用以下格式的命令,利用您刚刚创建的密钥创建 SecureString 参数。

    以下示例对密码参数和 AWS KMS key 使用模糊名称 (3l3vat3131)。

    Linux & macOS
    aws ssm put-parameter \ --name /Finance/Payroll/3l3vat3131 \ --value "P@sSwW)rd" \ --type SecureString \ --key-id arn:aws:kms:us-east-2:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e
    Windows
    aws ssm put-parameter ^ --name /Finance/Payroll/3l3vat3131 ^ --value "P@sSwW)rd" ^ --type SecureString ^ --key-id arn:aws:kms:us-east-2:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e
  3. 运行以下命令验证参数的详细信息。

    如果您不指定 with-decryption 参数,或者如果您指定no-with-decryption 参数,命令会返回加密的 GUID。

    Linux & macOS
    aws ssm get-parameters \ --name "the-parameter-name-you-specified" \ --with-decryption
    Windows
    aws ssm get-parameters ^ --name "the-parameter-name-you-specified" ^ --with-decryption
  4. 运行以下命令,查看参数元数据。

    Linux & macOS
    aws ssm describe-parameters \ --filters "Key=Name,Values=the-name-that-you-specified"
    Windows
    aws ssm describe-parameters ^ --filters "Key=Name,Values=the-name-that-you-specified"
  5. 如果您使用的不是客户托管的 AWS KMS key,请运行以下命令更改参数值。

    Linux & macOS
    aws ssm put-parameter \ --name "the-name-that-you-specified" \ --value "a-new-parameter-value" \ --type "SecureString" \ --overwrite
    Windows
    aws ssm put-parameter ^ --name "the-name-that-you-specified" ^ --value "a-new-parameter-value" ^ --type "SecureString" ^ --overwrite

    - 或者 -

    如果您使用的客户托管的 AWS KMS key,请运行以下命令之一更改参数值。

    Linux & macOS
    aws ssm put-parameter \ --name "the-name-that-you-specified" \ --value "a-new-parameter-value" \ --type "SecureString" \ --key-id "the-KMSkey-ID" \ --overwrite
    aws ssm put-parameter \ --name "the-name-that-you-specified" \ --value "a-new-parameter-value" \ --type "SecureString" \ --key-id "account-alias/the-KMSkey-ID" \ --overwrite
    Windows
    aws ssm put-parameter ^ --name "the-name-that-you-specified" ^ --value "a-new-parameter-value" ^ --type "SecureString" ^ --key-id "the-KMSkey-ID" ^ --overwrite
    aws ssm put-parameter ^ --name "the-name-that-you-specified" ^ --value "a-new-parameter-value" ^ --type "SecureString" ^ --key-id "account-alias/the-KMSkey-ID" ^ --overwrite
  6. 运行以下命令,查看最新的参数值。

    Linux & macOS
    aws ssm get-parameters \ --name "the-name-that-you-specified" \ --with-decryption
    Windows
    aws ssm get-parameters ^ --name "the-name-that-you-specified" ^ --with-decryption
  7. 运行以下命令,查看参数值的历史记录。

    Linux & macOS
    aws ssm get-parameter-history \ --name "the-name-that-you-specified"
    Windows
    aws ssm get-parameter-history ^ --name "the-name-that-you-specified"
注意

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

默认情况下,所有 SecureString 值均显示为密码文本。要解密 SecureString 值,用户必须有权调用 AWS KMS Decrypt API 操作。有关配置 AWS KMS 访问控制的信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS KMS 的身份验证和访问控制

重要

如果更改用于加密参数的 KMS 密钥的别名,则还必须更新该参数用于引用 AWS KMS 的密钥别名。这仅适用于 KMS 密钥别名;除非删除整个密钥,否则别名附加到的密钥 ID 将保持不变。

使用 AWS CLI 来创建多行参数

您可以使用 AWS CLI 来创建带换行符的参数。使用换行符将文本分成更长的参数值,使其易于阅读,或者,例如,更新网页的多段参数内容。您可以将内容包含在 JSON 文件中并使用 --cli-input-json 选项,使用诸如 \n 等换行符,如以下示例所示。

  1. 安装并配置 AWS Command Line Interface(AWS CLI)(如果尚未执行该操作)。

    有关更多信息,请参阅安装或更新 AWS CLI 的最新版本

  2. 运行以下命令,创建多行参数。

    Linux & macOS
    aws ssm put-parameter \ --name "MultiLineParameter" \ --type String \ --cli-input-json file://MultiLineParameter.json
    Windows
    aws ssm put-parameter ^ --name "MultiLineParameter" ^ --type String ^ --cli-input-json file://MultiLineParameter.json

    以下示例显示 MultiLineParameter.json 文件的内容。

    { "Value": "<para>Paragraph One</para>\n<para>Paragraph Two</para>\n<para>Paragraph Three</para>" }

保存的参数值的存储方式如下。

<para>Paragraph One</para>
<para>Paragraph Two</para>
<para>Paragraph Three</para>