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

关于参数

Parameter Store 参数是保存在 Parameter Store 中的配置数据的任何一个部分(如密码或许可证密钥)。您可以在脚本、命令、和 SSM 文档中集中、安全地引用此数据。Parameter Store 提供了对三种参数类型的支持:字符串字符串列表安全字符串。在引用参数时,使用以下惯例指定参数名称:

ssm:parameter-name

以下是一个名为 DNS-IP 的 Systems Manager 参数的示例。此参数的值就是实例的 IP 地址。此示例使用 AWS CLI 命令重复参数值。

aws ssm send-command --document-name "AWS-RunPowerShellScript" --document-version "1" --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" --parameters "commands='echo {{ssm:DNS-IP}}'" --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region us-east-2

下一个示例参数使用名为 SecurePassword 的安全字符串参数。命令 commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure'] 检索和解密安全字符串参数的值,然后重置本地管理员密码,而无需以明文形式传递密码。

aws ssm send-command --document-name "AWS-RunPowerShellScript" --document-version "1" --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" --parameters "commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure']" --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region us-east-2

您还可以在 SSM 文档的 Parameters 部分引用 Systems Manager 参数,如下例所示。

{ "schemaVersion":"2.0", "description":"Sample version 2.0 document v2", "parameters":{ "commands" : { "type": "StringList", "default": ["{{ssm:parameter_name}}"] } }, "mainSteps":[ { "action":"aws:runShellScript", "name":"runShellScript", "inputs":{ "runCommand": "{{commands}}" } } ] }

注意

SSM 文档的 runtimeConfig 部分使用的是类似于本地参数 的语法。本地参数不同于 Systems Manager 参数。您可以通过是否存在 ssm: 前缀区分本地参数和 Systems Manager 参数。

"runtimeConfig":{ "aws:runShellScript":{ "properties":[ { "id":"0.aws:runShellScript", "runCommand":"{{ commands }}", "workingDirectory":"{{ workingDirectory }}", "timeoutSeconds":"{{ executionTimeout }}"

SSM 文档当前不支持对安全字符串参数的引用。这意味着,要通过 Run Command(举例来说)使用安全字符串参数,您必须在将参数值传递到 Run Command 之前对它们进行检索,如以下示例所示:

AWS CLI

value=$(aws ssm get-parameters --names parameter_name --with-decryption)
aws ssm send-command –name AWS-JoinDomain –parameters password=$value –instance-id instance-id

Tools for Windows PowerShell

$secure = (Get-SSMParameterValue -Names parameter_name -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -argumentlist user_name,$secure