Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Systems Manager Parameter Store 演练

以下演练向您展示如何使用 Parameter Store 在测试环境中创建、存储和执行参数。以下演练说明如何将 Parameter Store 与其他 Systems Manager 功能结合使用。此外,您还可以将 Parameter Store 与其他 AWS 服务结合使用。有关更多信息,请参阅 将安全字符串参数用于其他 AWS 服务

在命令中创建和使用参数 (EC2 控制台)

以下过程将指导您完成在 Parameter Store 中创建参数然后执行使用此参数的 Run Command 命令的过程。

使用 Parameter Store 创建参数

  1. 打开 Amazon EC2 控制台,展开导航窗格中的 Systems Manager Shared Resources,然后选择 Parameter Store

  2. 选择创建参数

  3. 对于 Name,键入层次结构和名称。例如,键入 /Test/helloWorld。有关参数层次结构的更多信息,请参阅将参数组织成层次结构

  4. 描述字段中,键入用于将此参数标识为测试参数的描述。

  5. 对于类型,选择字符串

  6. Value 字段中,键入一个字符串。例如,键入 My1stParameter

  7. 选择创建参数。在系统创建参数后,选择 OK

  8. 在 EC2 控制台导航窗格中,展开 Commands,然后选择 Run Command

  9. 选择 Run a command

  10. Command Document 列表中,选择 AWS-RunPowershellScript (Windows) 或 AWS-RunShellScript (Linux)。

  11. 目标实例下,选择您之前创建的实例。

  12. Commands 字段中,键入 echo {{ssm:parameter name}},例如 echo {{ssm:/Test/helloWorld}}

  13. 选择 Run

  14. 在命令历史记录列表中,选择您刚刚运行的命令,然后选择 Output 选项卡,再选择 View Output

在命令中创建和使用参数 (AWS CLI)

以下过程将指导您完成使用 AWS CLI 创建和存储参数的过程。

使用 Parameter Store 创建字符串参数

  1. 将 AWS CLI 下载到本地计算机上。

  2. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 AWS Identity and Access Management (IAM) 中被授予相应权限。

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  3. 执行以下命令,使用字符串数据类型创建参数。--name 参数使用层次结构。有关层次结构的更多信息,请参阅将参数组织成层次结构

    Copy
    aws ssm put-parameter --name "a_name" --value "a value" --type String

    下面是在名称中使用参数层次结构的示例。有关参数层次结构的更多信息,请参阅将参数组织成层次结构

    Copy
    aws ssm put-parameter --name "/Test/IAD/helloWorld" --value "My1stParameter" --type String

    该命令没有输出。

  4. 执行以下命令,查看参数元数据。

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

    注意

    名称必须大写。

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

    {
        "Parameters": [
            {
                "LastModifiedUser": "arn:aws:iam::123456789:user/User's name",
                "LastModifiedDate": 1494529763.156,
                "Type": "String",
                "Name": "helloworld"
            }
        ]
    }
    
  5. 执行以下命令,更改参数值。

    Copy
    aws ssm put-parameter --name "/Test/IAD/helloWorld" --value "good day sunshine" --type String --overwrite

    该命令没有输出。

  6. 执行以下命令,查看最新的参数值。

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

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

    {
        "InvalidParameters": [],
        "Parameters": [
            {
                "Type": "String",
                "Name": "/Test/IAD/helloWorld",
                "Value": "good day sunshine"
            }
        ]
    }
  7. 执行以下命令,查看参数值的历史记录。

    Copy
    aws ssm get-parameter-history --name "/Test/IAD/helloWorld"
  8. 执行以下命令,在 Run Command 命令中使用该参数。

    Copy
    aws ssm send-command --document-name "AWS-RunShellScript" --parameters "commands=["echo {{ssm:/Test/IAD/helloWorld}}"]" --targets "Key=instance-ids,Values=the ID of an instance configured for Systems Manager"

使用以下过程创建安全字符串参数。有关安全字符串参数的更多信息,请参阅使用安全字符串参数

使用 AWS CLI 创建安全字符串参数

  1. 执行下列命令之一以使用安全字符串数据类型创建参数。

    创建使用默认 KMS 密钥的安全字符串参数

    Copy
    aws ssm put-parameter --name "a_name" --value "a value, for example P@ssW%rd#1" --type "SecureString"

    创建使用自定义 AWS KMS 密钥的安全字符串参数

    Copy
    aws ssm put-parameter --name "a_name" --value "a value" --type "SecureString" --key-id "your AWS user account ID/the custom AWS KMS key"

    下面是使用自定义 AWS KMS 密钥的示例。

    Copy
    aws ssm put-parameter --name "db-password" --value "P@ssW%rd#1" --type "SecureString" --key-id "arn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e"

    重要

    只有安全字符串参数的值会被加密。参数的名称、描述和其他属性不会被加密。因此,请考虑创建一个在参数名称中避免单词“password”的命名系统。

  2. 执行以下命令,查看参数元数据。

    Copy
    aws ssm describe-parameters --filters "Key=Name,Values=the name that you specified"
  3. 执行以下命令,更改参数值。

    Copy
    aws ssm put-parameter --name "the name that you specified" --value "new value" --type "SecureString" --overwrite

    更新使用默认 KMS 密钥的安全字符串参数

    Copy
    aws ssm put-parameter --name "the name that you specified" --value "new value" --type "SecureString" --key-id "the AWS KMS key ID" --overwrite

    更新使用自定义 KMS 密钥的安全字符串参数

    Copy
    aws ssm put-parameter --name "the name that you specified" --value "new value" --type "SecureString" --key-id "your AWS user account alias/the custom KMS key" --overwrite
  4. 执行以下命令,查看最新的参数值。

    Copy
    aws ssm get-parameters --names "the name that you specified" --with-decryption
  5. 执行以下命令,查看参数值的历史记录。

    Copy
    aws ssm get-parameter-history --name "the name that you specified"

重要

只有安全字符串参数的值会被加密。参数的名称、描述和其他属性不会被加密。因此,请考虑创建一个在参数名称中避免单词“password”的命名系统。

创建安全字符串参数并将实例加入域 (PowerShell)

本演练介绍如何使用 Systems Manager 安全字符串参数和 Run Command 将 Windows 实例加入到域中。演练中使用了典型的域参数,例如 DNS 地址、域名和域用户名。这些值作为未加密的字符串值传递。将使用 AWS KMS 主秘钥加密域密码并将其作为安全字符串传递。

创建安全字符串参数并将实例加入域

  1. 使用 AWS Tools for Windows PowerShell 将参数输入到系统中。

    Copy
    Write-SSMParameter -Name DNS-IP -Value a DNS IP address -Type String Write-SSMParameter -Name domainName -Value the domain name -Type String Write-SSMParameter -Name domainJoinUserName -Value a user name -Type String Write-SSMParameter -Name domainJoinPassword -Value a password -Type SecureString

    重要

    只有安全字符串参数的值会被加密。参数的名称、描述和其他属性不会被加密。因此,请考虑创建一个在参数名称中避免单词“password”的命名系统。

  2. AmazonEC2RoleforSSM 托管策略附加到您的实例的 IAM 角色权限。有关信息,请参阅托管策略与内联策略

  3. 编辑附加到实例的 IAM 角色并添加以下策略。此策略授予实例调用 kms:Decrypt API 的权限。

    Copy
    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "kms:Decrypt" ], "Resource":[ "arn:aws:kms:region:account_id:key/key_id" ] } ] }
  4. 复制以下 json 示例并粘贴到简单文本编辑器中,并将文件保存为以下位置中的 JoinInstanceToDomain.json:c:\temp\JoinInstanceToDomain.json

    Copy
    { "schemaVersion":"2.0", "description":"Run a PowerShell script to securely domain-join a Windows instance", "mainSteps":[ { "action":"aws:runPowerShellScript", "name":"runPowerShellWithSecureString", "inputs":{ "runCommand":[ "$ipdns = (Get-SSMParameterValue -Name dns).Parameters[0].Value\n", "$domain = (Get-SSMParameterValue -Name domainName).Parameters[0].Value\n", "$username = (Get-SSMParameterValue -Name domainJoinUserName).Parameters[0].Value\n", "$password = (Get-SSMParameterValue -Name domainJoinPassword -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -asPlainText -Force\n", "$credential = New-Object System.Management.Automation.PSCredential($username,$password)\n", "Set-DnsClientServerAddress \"Ethernet 2\" -ServerAddresses $ipdns\n", "Add-Computer -DomainName $domain -Credential $credential\n", "Restart-Computer -force" ] } } ] }
  5. 在 AWS Tools for Windows PowerShell 中执行以下命令以创建新 SSM 文档。

    Copy
    $json = Get-Content C:\temp\JoinInstanceToDomain | Out-String New-SSMDocument -Name JoinInstanceToDomain -Content $json
  6. 在 AWS Tools for Windows PowerShell 中执行以下命令以将实例加入到域

    Copy
    Send-SSMCommand -InstanceId Instance-ID -DocumentName JoinInstanceToDomain

使用层次结构管理参数

此演练向您说明如何通过使用 AWS CLI 来使用参数和参数层次结构参数。有关参数层次结构的更多信息,请参阅将参数组织成层次结构

使用层次结构管理参数

  1. 将 AWS CLI 下载到本地计算机上。

  2. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 AWS Identity and Access Management (IAM) 中被授予相应权限。

    Copy
    aws configure

    系统将提示您指定以下内容。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  3. 执行以下命令创建一个使用 allowedPattern 参数和 String 数据类型的参数。本示例中的允许模式表示参数的值必须为 1 到 4 个数字。

    Copy
    aws ssm put-parameter --name "/MyService/Test/MaxConnections" --value 100 --allowed-pattern "\d{1,4}" --type String

    该命令没有输出。

  4. 执行以下命令尝试用新值覆盖您刚刚创建的参数。

    Copy
    aws ssm put-parameter --name "/MyService/Test/MaxConnections" --value 10,000 --type String --overwrite

    系统会引发以下错误,因为新值不满足您在上一步骤中指定的允许模式的要求。

    An error occurred (ParameterPatternMismatchException) when calling the PutParameter operation: Parameter value, cannot be validated against allowedPattern: \d{1,4}

  5. 执行以下命令创建一个使用您的默认 AWS KMS 密钥的安全字符串参数。本示例中的允许模式表示用户可以指定任意字符,并且值必须在 8 到 20 个字符之间。

    Copy
    aws ssm put-parameter --name "/MyService/Test/DBpassword" --value "p#sW*rd33" --allowed-pattern ".{8,20}" --type SecureString
  6. 执行以下命令创建多个使用上一步骤中的层次结构的参数。

    Copy
    aws ssm put-parameter --name "/MyService/Test/DBname" --value "SQLDevDb" --type String
    Copy
    aws ssm put-parameter --name "/MyService/Test/user" --value "SA" --type String
    Copy
    aws ssm put-parameter --name "/MyService/Test/userType" --value "SQLuser" --type String
  7. 执行以下命令获取两个参数的值。

    Copy
    aws ssm get-parameters --names "/MyService/Test/user" "/MyService/Test/userType"
  8. 执行以下命令查询单个级别内的所有参数。

    Copy
    aws ssm describe-parameters --filters Key=Name,Values="/MyService/Test"
  9. 执行以下命令删除两个参数

    Copy
    aws ssm delete-parameters --name "/IADRegion/Dev/user" "/IADRegion/Dev/userType"