Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

关于 Systems Manager 参数

您可以在脚本、命令、配置和自动化流程中引用 Systems Manager 参数。参数与 Systems Manager 功能 (如 Run Command、State Manager 和 Automation) 结合使用。您还可以在其他 AWS 服务 (如 Amazon EC2 Container Service 和 AWS Lambda) 中引用参数。

使用 Systems Manager 功能,您可以在 AWS CLI 或 AWS Tools for Windows PowerShell 命令或脚本中引用 Systems Manager 参数。您还可以在 SSM 文档中引用参数。有关 SSM 文档的更多信息,请参阅 Systems Manager 文档

以下是一个在 Run Command 的 AWS CLI 命令中使用 Systems Manager 参数的示例。Systems Manager 参数始终带有前缀 ssm:

Copy
aws ssm send-command --instance-ids i-1a2b3c4d5e6f7g8 --document-name AWS-RunPowerShellScript --parameter '{"commands":["echo {{ssm:parameter name}}"]}'

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

Copy
{ "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 参数。

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

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

AWS CLI

Copy
$value=aws ssm get-parameters --names the parameter name --with-decryption
Copy
aws ssm send-command –name AWS-JoinDomain –parameters password=$value –instance-id the instance ID

Tools for Windows PowerShell

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

使用安全字符串参数

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

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

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

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

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

如果您在创建参数时选择安全字符串数据类型,则 AWS KMS 会加密参数值。有关 AWS KMS 的更多信息,请参阅 AWS Key Management Service Developer Guide

重要

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

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

Systems Manager 包含一个默认 AWS KMS 密钥。您可以通过 AWS CLI 执行以下命令,以查看此密钥:

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

如果您使用默认 KMS 密钥创建安全字符串参数,则无需--key-id 参数提供值。以下 CLI 示例显示了在 Parameter Store 中不使用 --key-id 参数创建新安全字符串参数的命令:

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

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

如果您希望使用自定义 KMS 密钥而非分配给您账户的默认密钥,则必须使用 --key-id 参数指定 ARN。该参数支持以下 AWS KMS 参数格式。

  • 密钥 ARN 示例

    arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012

  • 别名 ARN 示例

    arn:aws:kms:us-east-1:123456789012:alias/MyAliasName

  • 全局唯一密钥 ID 示例

    12345678-1234-1234-1234-123456789012

  • 别名示例

    alias/MyAliasName

您可以从 AWS CLI 使用以下命令创建自定义 AWS KMS 密钥:

Copy
aws kms create-key

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

Copy
aws ssm put-parameter --name a_name --value "a value" --type SecureString --key-id arn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e

注意

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

默认情况下,所有安全字符串值在 Amazon EC2 控制台和 AWS CLI 中显示为密码文本。要解密安全字符串值,用户必须具有 KMS 解密权限。

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

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

Copy
from __future__ import print_function import json import boto3 ssm = boto3.client('ssm', 'us-east-1') 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 服务结合使用的更多信息,请参阅以下博客文章。

本页内容: