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

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

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

先决条件

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

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

  1. 使用 AWS Tools for 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

    重要

    仅为安全字符串参数的 加密。参数的名称、描述和其他属性不会被加密。

  2. 将以下 IAM 策略附加到实例的 IAM 角色权限:

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

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

    • 用于 Amazon S3 存储桶访问的自定义策略 – 必需。SSM 代理位于您的实例上并执行 Systems Manager 任务,它需要访问 Amazon 拥有的特定 S3 存储桶。在您创建的自定义 S3 存储桶策略中,您还会提供执行 Systems Manager 操作所需的您自己的 S3 存储桶的访问权限。

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

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

      注意

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

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

      注意

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

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

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

    { "schemaVersion": "2.2", "description": "Run a PowerShell script to securely domain-join a Windows instance", "mainSteps": [ { "action": "aws:runPowerShellScript", "name": "runPowerShellWithSecureString", "precondition": { "StringEquals": [ "platformType", "Windows" ] }, "inputs": { "runCommand": [ "$domain = (Get-SSMParameterValue -Name domainName).Parameters[0].Value", "$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 Stop", "Restart-Computer -force" ] } } ] }
  5. 在 AWS Tools for Windows PowerShell 中运行以下命令来创建新 SSM 文档。

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

    Send-SSMCommand -InstanceId instance-id -DocumentName JoinInstanceToDomain