Criar um parâmetro SecureString no Parameter Store e integrar um nó a um domínio (PowerShell) - AWS Systems Manager

Criar um parâmetro SecureString no Parameter Store e integrar um nó a um domínio (PowerShell)

Esta demonstração mostra como associar um nó do Windows Server a um domínio usando os parâmetros AWS Systems Manager SecureString e Run Command. A demonstração usa parâmetros de domínio típicos, como o nome do domínio e um nome do usuário do domínio. Esses valores são transmitidos como valores de string não criptografados. A senha do domínio é criptografada usando uma chave mestra de cliente (CMK) gerenciada pela Chave gerenciada pela AWS e transmitida como uma string criptografada.

Pré-requisitos

Esta demonstração pressupõe que você já tenha especificado seu nome de domínio e o endereço IP do servidor DNS no conjunto de opções de DHCP associado à sua Amazon VPC. Para obter mais informações, consulte Working with DHCP Options no Guia do usuário da Amazon VPC.

Para criar um parâmetro SecureString e ingressar um nó em um domínio
  1. Insira parâmetros no sistema usando o AWS Tools for Windows PowerShell.

    Nos comandos a seguir, substitua cada espaço reservado para entrada do usuário por suas próprias informações.

    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
    Importante

    Somente o valor de um parâmetro SecureString é criptografado. O nome do parâmetro, a descrição e outras propriedades não são criptografados.

  2. Anexe as seguintes políticas do AWS Identity and Access Management (IAM) às permissões de função do IAM para o nó:

    • AmazonSSMManagedInstanceCore – necessário. Essa política gerenciada da AWS permite que um nó gerenciado use a funcionalidade básica do serviço Systems Manager.

    • AmazonSSMDirectoryServiceAccess – necessário. Essa política gerenciada da AWS permite que o SSM Agent acesse o AWS Directory Service em seu nome para solicitações para ingressar no domínio pelo nó gerenciado.

    • Uma política personalizada para acesso ao bucket do S3: obrigatória. O SSM Agent, localizado em um nó, executa tarefas do Systems Manager e requer acesso a buckets do Amazon Simple Storage Service (Amazon S3) específicos, de propriedade da Amazon. Na política de bucket do S3 personalizada que você cria, também é possível fornecer acesso aos buckets do S3 de sua propriedade que sejam necessários para as operações do Systems Manager.

      Exemplos: você pode gravar a saída para comandos do Run Command ou sessões do Session Manager para um bucket do S3 e usar essa saída posteriormente para a auditoria ou para solução de problemas. Você armazena scripts de acesso ou listas de linha de base de patches personalizados em um bucket do S3 e faz referência ao script ou à lista quando executa um comando, ou quando uma linha de base de patch é aplicada.

      Para obter informações sobre como criar uma política personalizada para acesso ao bucket do Amazon S3, consulte Criar uma política personalizada de bucket do S3 para um perfil de instância

      nota

      Salvar os dados de log de saída em um bucket do S3 é opcional, mas recomendamos configurá-lo no início do seu processo de configuração do Systems Manager caso tenha decidido usá-lo. Para obter mais informações, consulte Criar um bucket no Guia do usuário do Amazon Simple Storage Service.

    • CloudWatchAgentServerPolicy – opcional. Essa política gerenciada da AWS permite que você execute o agente do CloudWatch em nós gerenciados. Essa política possibilita ler informações sobre um nó e gravá-las no Amazon CloudWatch. Seu perfil de instância precisará dessa política somente se você pretende usar recursos do Amazon EventBridge ou o CloudWatch Logs.

      nota

      Usar recursos do CloudWatch e do EventBridge é opcional, mas recomendamos configurá-los no início do seu processo de configuração do Systems Manager se você decidiu usá-los. Para obter mais informações, consulte o Manual do usuário do Amazon EventBridge e o Manual do usuário do Amazon CloudWatch Logs.

  3. Edite a função do IAM anexada ao nó e adicione a seguinte política: Essa política fornece as permissões do nó para chamar o kms:Decrypt e a API ssm:CreateDocument.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "ssm:CreateDocument" ], "Resource": [ "arn:aws:kms:region:account-id:key/kms-key-id" ] } ] }
  4. Copie e cole o seguinte texto do json em um editor de texto e salve o arquivo como JoinInstanceToDomain.json no seguinte local: c:\temp\JoinInstanceToDomain.json.

    { "schemaVersion": "2.2", "description": "Run a PowerShell script to securely join a Windows Server instance to a domain", "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 \"Instance joined to domain successfully. Restarting\"; exit 3010}else{Write-Host \"Instance failed to join domain with error:\" $domainjoinerror; exit 1 }" ] } } ] }
  5. Execute o comando a seguir no Tools for Windows PowerShell para criar um novo documento do SSM.

    $json = Get-Content C:\temp\JoinInstanceToDomain | Out-String New-SSMDocument -Name JoinInstanceToDomain -Content $json -DocumentType Command
  6. Execute o comando a seguir no Tools for Windows PowerShell para associar o nó ao domínio.

    Send-SSMCommand -InstanceId instance-id -DocumentName JoinInstanceToDomain

    Se houver êxito, o comando retornará informações semelhantes às seguintes:

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

    Se houver êxito, o comando retornará informações semelhantes às seguintes:

    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.