SecureString 파라미터를 생성하고 도메인에 노드 조인(PowerShell) - AWS Systems Manager

SecureString 파라미터를 생성하고 도메인에 노드 조인(PowerShell)

이 연습에서는 AWS Systems Manager SecureString 파라미터와 Run Command를 사용하여 Windows Server 노드를 도메인에 조인하는 방법을 보여줍니다. 본 연습에서는 도메인 이름 및 도메인 사용자 이름과 같은 일반적인 도메인 파라미터를 사용합니다. 이러한 값은 암호화되지 않은 문자열 값으로 전달됩니다. 도메인 암호는 AWS 관리형 키를 통해 암호화되어 암호화된 문자열로 전달됩니다.

필수 조건

이 시연에서는 Amazon VPC와 연결된 DHCP 옵션 집합에 도메인 이름과 DNS 서버 IP 주소를 이미 지정했다고 가정합니다. 자세한 내용은 Amazon VPC 사용 설명서DHCP 옵션 집합을 사용한 작업을 참조하세요.

SecureString 파라미터를 생성하고 도메인에 노드를 조인
  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
    중요

    SecureString 파라미터의 만 암호화됩니다. 파라미터 이름, 설명 및 기타 속성은 암호화되지 않습니다.

  2. 다음 AWS Identity and Access Management(IAM) 정책을 노드에 대한 IAM 역할 권한에 연결합니다.

    • AmazonSSMManagedInstanceCore - 필수. 이 AWS 관리형 정책을 사용하면 관리형 노드가 Systems Manager 서비스 핵심 기능을 사용할 수 있습니다.

    • AmazonSSMDirectoryServiceAccess - 필수. 이 AWS 관리형 정책은 SSM Agent가 관리형 노드의 도메인 조인 요청을 위해 사용자 대신 AWS Directory Service에 액세스하도록 허용합니다.

    • Amazon Simple Storage Service(Amazon S3) 버킷 액세스를 위한 사용자 정의 정책 – 필수. 노드에 있으면서 Systems Manager 태스크를 수행하는 SSM Agent에는 특정 Amazon 소유의 Amazon Simple Storage Service(Amazon S3) 버킷에 대한 액세스가 필요합니다. 생성한 사용자 정의 S3 버킷 정책에서는 Systems Manager 작업에 필요한 자체의 S3 버킷에 대한 액세스도 제공합니다.

      예제: Run Command 명령 또는 Session Manager 세션에 대한 출력을 S3 버킷에 쓴 다음, 감사 또는 문제 해결을 위해 나중에 이 출력을 사용할 수 있습니다. 액세스 스크립트 또는 사용자 지정 패치 기준 목록을S3 버킷에 저장한 다음, 명령을 실행하거나 패치 기준이 적용될 때 스크립트 또는 목록을 참조할 수 있습니다.

      Amazon S3 버킷 액세스를 위한 사용자 정의 정책 생성에 대한 자세한 내용은 인스턴스 프로파일에 대한 사용자 정의 S3 버킷 정책 생성을 참조하세요.

      참고

      S3 버킷에 출력 로그 데이터 저장은 옵션이지만 이 옵션을 사용하기로 결정한 경우에는 Systems Manager 구성 프로세스 시작 시 옵션을 설정하는 것이 좋습니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서버킷 생성을 참조하세요.

    • CloudWatchAgentServerPolicy - 선택. 이 AWS 관리형 정책은 관리형 노드에서 CloudWatch 에이전트를 실행하도록 허용합니다. 이 정책을 사용하면 노드에서 정보를 읽고 Amazon CloudWatch에 쓸 수 있습니다. Amazon EventBridge 또는 CloudWatch Logs 등의 서비스를 사용할 경우에만 인스턴스 프로파일에 이 정책이 필요합니다.

      참고

      CloudWatch 및 EventBridge 기능의 사용은 선택적이지만, 이 기능을 사용하기로 결정한 경우에는 Systems Manager 구성 프로세스 시작 시에 설정하는 것이 좋습니다. 자세한 내용은 Amazon EventBridge User GuideAmazon CloudWatch Logs User Guide를 참조하세요.

  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 텍스트를 복사하여 텍스트 편집기에 붙여넣은 다음 이 파일을 c:\temp\JoinInstanceToDomain.json 위치에 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. 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.