创建 SecureString 参数并将实例加入到域 (PowerShell) - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

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

Prerequisites

本演练假定您已在与 Amazon VPC 关联的 DHCP 选项集中指定域名和 DNS 服务器 IP 地址。有关信息,请参阅《Amazon VPC 用户指南》中的使用 DHCP 选项集https://docs.amazonaws.cn/vpc/latest/userguide/VPC_DHCP_Options.html#DHCPOptionSet

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

  1. 使用 Amazon Tools for Windows PowerShell (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
    重要

    只会加密 SecureString 参数的。不会加密参数名称、描述和其他属性。

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

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

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

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

      示例:您可以将 Run Command 命令或 Session Manager 会话输出写入到一个 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:Decryptssm:CreateDocument API 的权限。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "kms:Decrypt", "ssm:CreateDocument" ], "Resource":[ "arn:aws:kms:region:account-id:key/kms-key-id" ] } ] }
  4. 复制以下 JSON 文本并粘贴到文本编辑器中,并将文件保存为以下位置中的 JoinInstanceToDomain.jsonc:\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. 在 Tools for Windows PowerShell 中运行以下命令来创建新 SSM 文档。

    $json = Get-Content C:\temp\JoinInstanceToDomain | Out-String New-SSMDocument -Name JoinInstanceToDomain -Content $json -DocumentType Command
  6. 在 Tools for 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.