Parameter Store 演练演练 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Parameter Store 演练演练

此部分中的演练向您展示如何使用参数存储创建、存储和运行参数,该功能为Amazon Systems Manager,在测试环境中。此演练展示了如何将参数存储与其他 Systems Manager 功能结合使用。也可以将参数存储与其他Amazon服务。有关更多信息,请参阅 什么是参数?

创建 SecureString 参数并将实例加入到域 (PowerShell)

本演练演示了如何将Windows Server使用域Amazon Systems Manager SecureString参数和运行命令。演练中使用了典型的域参数,如域名和域用户名。这些值作为未加密的字符串值传递。域密码是使用Amazon托管密钥并作为加密字符串传递。

Prerequisites

本演练假定您已在与 Amazon VPC 关联的 DHCP 选项集中指定域名和 DNS 服务器 IP 地址。想要了解有关信息,请参阅使用 DHCP 选项集中的Amazon VPC 用户指南

创建 SecureString 参数并将实例加入到域

  1. 使用将参数输入到系统中Amazon Tools for Windows PowerShell(工具适用于 Windows PowerShell)。

    Write-SSMParameter -Name "domainName" -Value "DOMAIN-NAME" -Type String Write-SSMParameter -Name "domainJoinUserName" -Value "DOMAIN\USERNAME" -Type String Write-SSMParameter -Name "domainJoinPassword" -Value "PASSWORD" -Type SecureString
    重要

    仅使用SecureString参数已加密。参数名称、描述和其他属性不会加密。

  2. 附加以下内容Amazon Identity and Access Management(IAM) 策略添加到您的实例的 IAM 角色权限:

    • AmazonSSMManagedInstanceCore – 必需。该Amazon托管策略允许托管实例使用 Systems Manager 服务核心功能。

    • AmazonSSMDirectoryServiceAccess – 必需。该Amazon托管策略允许 SSM 代理访问Amazon Directory Service代表您以处理托管实例加入域的请求。

    • 用于 S3 存储桶访问的自定义策略— 必需。SSM Agent 位于您的实例上并执行 Systems Manager 任务,它需要访问 Amazon Simple Storage Service (Amazon S3) 存储桶。在您创建的自定义 S3 存储桶策略中,您还会提供对 Systems Manager 操作所需的您自己的 S3 存储桶的访问权限。

      示例:您可以将运行命令命令或会话管理器会话输出写入到 S3 存储桶中,以后将使用该输出进行审核或故障排除。您将访问脚本或自定义补丁基准列表存储在一个 S3 存储桶中,并在运行命令或应用补丁基准时引用该脚本或列表。

      有关为 Amazon S3 存储桶访问创建自定义策略的信息,请参阅。为实例配置文件创建自定义 S3 存储桶策略

      注意

      在 S3 存储桶中保存输出日志数据是可选的,但如果决定使用该功能,我们建议您在 Systems Manager 配置过程开始时对其进行设置。有关更多信息,请参阅 。创建存储桶中的Amazon Simple Storage Service 入门指南

    • CloudWatchAgentServerPolicy – 可选。该Amazon托管策略允许您在托管实例上运行 CloudWatch 代理。通过使用该策略,可以读取实例上的信息并将其写入到 Amazon CloudWatch 中。只有在使用 Amazon EventBridge 或 CloudWatch Logs 等服务时,实例配置文件才需要使用该策略。

      注意

      使用 CloudWatch 和 EventBridge 功能是可选的,但如果您决定使用这些功能,我们建议您在开始执行 Systems Manager 配置过程时设置这些功能。有关更多信息,请参阅 。Amazon EventBridge 用户指南Amazon CloudWatch Logs 用户指南

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

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

    { "schemaVersion": "2.2", "description": "Run a PowerShell script to securely domain-join a Windows Server instance", "mainSteps": [ { "action": "aws:runPowerShellScript", "name": "runPowerShellWithSecureString", "precondition": { "StringEquals": [ "platformType", "Windows" ] }, "inputs": { "runCommand": [ "$domain = (Get-SSMParameterValue -Name domainName).Parameters[0].Value", "if ((gwmi Win32_ComputerSystem).domain -eq $domain){write-host \"Computer is part of $domain, exiting\"; exit 0}", "$username = (Get-SSMParameterValue -Name domainJoinUserName).Parameters[0].Value", "$password = (Get-SSMParameterValue -Name domainJoinPassword -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -asPlainText -Force", "$credential = New-Object System.Management.Automation.PSCredential($username,$password)", "Add-Computer -DomainName $domain -Credential $credential -ErrorAction SilentlyContinue -ErrorVariable domainjoinerror", "if($?){Write-Host \"Domain join succeeded, restarting\"; exit 3010}else{Write-Host \"Failed to join domain with error:\" $domainjoinerror; exit 1 }" ] } } ] }
  5. 在适用于 Windows PowerShell 的工具中运行以下命令以创建新 SSM 文档。

    $json = Get-Content C:\temp\JoinInstanceToDomain | Out-String New-SSMDocument -Name JoinInstanceToDomain -Content $json -DocumentType Command
  6. 在适用于 Windows PowerShell 的工具中运行以下命令将实例加入到域

    Send-SSMCommand -InstanceId instance-id -DocumentName JoinInstanceToDomain

    如果命令成功,系统返回类似于以下内容的信息。

    WARNING: The changes will take effect after you restart the computer EC2ABCD-EXAMPLE.
    Domain join succeeded, restarting
    Computer is part of example.local, exiting

    如果命令失败,系统返回类似于以下内容的信息。

    Failed to join domain with error:
    Computer 'EC2ABCD-EXAMPLE' failed to join domain 'example.local'
    from its current workgroup 'WORKGROUP' with following error message:
    The specified domain either does not exist or could not be contacted.