다음을 통해 공유


호스트 보호 서비스 관리

HGS(호스트 보호 서비스)는 보호받는 패브릭 솔루션의 중심입니다. 패브릭의 Hyper-V 호스트가 호스터 또는 엔터프라이즈에 알려지도록 하고 신뢰할 수 있는 소프트웨어를 실행하고 보호된 VM을 시작하는 데 사용되는 키를 관리합니다. 테넌트가 보호된 VM을 호스트하도록 신뢰하기로 결정하는 경우 호스트 보호 서비스의 구성 및 관리에 대한 신뢰를 배치합니다. 따라서 보호된 패브릭의 보안, 가용성 및 안정성을 보장하기 위해 호스트 보호 서비스를 관리하는 경우 모범 사례를 따르는 것이 매우 중요합니다. 다음 섹션의 지침은 HGS 관리자가 직면한 가장 일반적인 운영 문제를 처리합니다.

HGS에 대한 관리자 액세스 제한

HGS의 보안에 민감한 특성으로 인해 관리자가 조직의 매우 신뢰할 수 있는 구성원이 되도록 하고 패브릭 리소스의 관리자와 분리하는 것이 중요합니다. 또한 HTTPS를 통한 WinRM과 같은 보안 통신 프로토콜을 사용해서 보안 워크스테이션에서만 HGS를 관리하는 것이 좋습니다.

의무 분리

HGS를 설정하는 경우 HGS에만 격리된 Active Directory 포리스트를 만들거나 HGS를 신뢰할 수 있는 기존 도메인에 조인하는 옵션이 제공됩니다. 이 결정 및 조직의 관리자를 할당하는 역할은 HGS에 대한 신뢰 경계를 결정합니다. HGS에 직접 액세스하거나 HGS에 영향을 줄 수 있는 다른 항목(예: Active Directory)의 관리자로서 간접적으로 HGS에 액세스할 수 있는 사람은 누구나 보호된 패브릭을 제어할 수 있습니다. HGS 관리자는 보호된 VM을 실행하며 보호된 VM을 시작하는 데 필요한 인증서를 관리할 권한이 있는 Hyper-V 호스트를 선택합니다. HGS에 액세스할 수 있는 공격자 또는 악의적인 관리자는 이 기능을 사용하여 손상된 호스트가 보호된 VM을 실행하도록 권한을 부여하고 키 자료를 제거하여 서비스 거부 공격을 시작할 수 있습니다.

이러한 위험을 방지하려면 HGS 관리자(HGS가 가입된 도메인 포함)와 Hyper-V 환경 간의 겹침을 제한하는 것이 좋습니다. 관리자가 두 시스템에 모두 액세스할 수 없도록 하여 공격자는 HGS 정책을 변경하는 임무를 완료하기 위해 2명의 개인과 2개의 서로 다른 계정을 손상해야 합니다. 즉, 두 Active Directory 환경의 도메인 및 엔터프라이즈 관리자는 동일한 사람이 아니어야 하며 HGS가 Hyper-V 호스트와 같은 Active Directory 포리스트를 사용해서는 안 됩니다. 더욱 많은 리소스에 대한 액세스 권한을 부여할 수 있는 사람은 누구나 보안 위험을 초래합니다.

충분한 관리 수행 사용

HGS는 보다 안전하게 관리할 수 있도록 JEA(충분한 관리 수행) 역할이 기본 제공됩니다. JEA를 사용하면 관리자가 아닌 사용자에게 관리 작업을 위임하도록 도울 수 있습니다. 즉, HGS 정책을 관리하는 사용자가 실제로 전체 컴퓨터 또는 도메인의 관리자가 될 필요는 없습니다. JEA는 사용자가 PowerShell 세션에서 실행할 수 있는 명령을 제한하고 백그라운드에서 임시 로컬 계정(각 사용자 세션에 대해 고유)을 사용해서 일반적으로 상승이 필요한 명령을 실행하는 방식으로 작동합니다.

HGS는 미리 구성된 2개의 JEA 역할과 함께 제공됩니다.

  • 사용자가 보호된 VM을 실행하도록 새 호스트에 권한을 부여하는 사항을 포함하여 모든 HGS 정책을 관리할 수 있는 HGS 관리자입니다.
  • 사용자에게만 기존 정책을 감사할 수 있는 권한을 허용하는 HGS 검토자입니다. HGS 구성은 변경할 수 없습니다.

JEA를 사용하려면 먼저 새 표준 사용자를 만들어 HGS 관리자 또는 HGS 검토자 그룹의 구성원으로 만들어야 합니다. HGS에 대한 새 포리스트를 설정하는 데 Install-HgsServer를 사용한 경우 이러한 그룹의 이름은 각각 "servicenameAdministrators" 및 "servicenameReviewers"입니다. 여기서 servicename은 HGS 클러스터의 네트워크 이름입니다. 기존 도메인에 HGS를 가입한 경우 Initialize-HgsServer에 지정한 그룹 이름을 참조해야 합니다.

HGS 관리자 및 검토자 역할의 표준 사용자 만들기

$hgsServiceName = (Get-ClusterResource HgsClusterResource | Get-ClusterParameter DnsName).Value
$adminGroup = $hgsServiceName + "Administrators"
$reviewerGroup = $hgsServiceName + "Reviewers"

New-ADUser -Name 'hgsadmin01' -AccountPassword (Read-Host -AsSecureString -Prompt 'HGS Admin Password') -ChangePasswordAtLogon $false -Enabled $true
Add-ADGroupMember -Identity $adminGroup -Members 'hgsadmin01'

New-ADUser -Name 'hgsreviewer01' -AccountPassword (Read-Host -AsSecureString -Prompt 'HGS Reviewer Password') -ChangePasswordAtLogon $false -Enabled $true
Add-ADGroupMember -Identity $reviewerGroup -Members 'hgsreviewer01'

검토자 역할로 정책 감사

HGS에 대한 네트워크 연결이 있는 원격 컴퓨터에서 다음 명령을 PowerShell에서 실행하여 검토자 자격 증명으로 JEA 세션을 입력합니다. 검토자 계정은 표준 사용자이므로 일반 Windows PowerShell 원격, HGS에 대한 원격 데스크톱 액세스 등에는 사용할 수 없습니다.

Enter-PSSession -ComputerName <hgsnode> -Credential '<hgsdomain>\hgsreviewer01' -ConfigurationName 'microsoft.windows.hgs'

그런 다음 Get-Command가 있는 세션에서 허용되는 명령을 확인하고 허용된 명령을 실행하여 구성을 감사할 수 있습니다. 아래 예제에서는 HGS에서 사용하도록 설정된 정책을 확인하고 있습니다.

Get-Command

Get-HgsAttestationPolicy

JEA 세션 작업이 완료되고 나면 명령 Exit-PSSession 또는 해당 별칭 exit을 입력합니다.

관리자 역할을 사용하여 새 정책을 HGS에 추가

실제로 정책을 변경하려면 'hgsAdministrators' 그룹에 속하는 ID를 사용해서 JEA 엔드포인트에 연결해야 합니다. 아래 예제에서는 HGS에 새 코드 무결성 정책을 복사하고 JEA를 사용하여 등록하는 방법을 보여드립니다. 구문은 사용자가 익숙한 구문과 다를 수 있습니다. 이는 전체 파일 시스템에 액세스하지 않는 것과 같이 JEA의 일부 제한을 수용하기 위한 것입니다.

$cipolicy = Get-Item "C:\temp\cipolicy.p7b"
$session = New-PSSession -ComputerName <hgsnode> -Credential '<hgsdomain>\hgsadmin01' -ConfigurationName 'microsoft.windows.hgs'
Copy-Item -Path $cipolicy -Destination 'User:' -ToSession $session

# Now that the file is copied, we enter the interactive session to register it with HGS
Enter-PSSession -Session $session
Add-HgsAttestationCiPolicy -Name 'New CI Policy via JEA' -Path 'User:\cipolicy.p7b'

# Confirm it was added successfully
Get-HgsAttestationPolicy -PolicyType CiPolicy

# Finally, remove the PSSession since it is no longer needed
Exit-PSSession
Remove-PSSession -Session $session

HGS 모니터링

이벤트 원본 및 전달

HGS의 이벤트는 2개 원본 아래의 Windows 이벤트 로그에 표시됩니다.

  • HostGuardianService-Attestation
  • HostGuardianService-KeyProtection

이벤트 뷰어를 열고 Microsoft-Windows-HostGuardianService-Attestation 및 Microsoft-Windows-HostGuardianService-KeyProtection으로 이동하여 이러한 이벤트를 볼 수 있습니다.

대규모 환경에서는 이벤트를 더 쉽게 분석할 수 있도록 중앙 Windows 이벤트 수집기로 이벤트를 전달하는 것이 좋습니다. 자세한 내용은 Windows 이벤트 전달 설명서를 참조하세요.

System Center Operations Manager 사용

또한 System Center 2016 - Operations Manager를 사용하여 HGS 및 보호된 호스트를 모니터링할 수도 있습니다. 보호된 패브릭 관리 팩에는 증명을 전달하지 않는 호스트 및 오류를 보고하는 HGS 서버를 포함해서 데이터 센터 가동 중지 시간으로 이어질 수 있는 일반적인 잘못된 구성을 확인하는 이벤트 모니터가 있습니다.

시작하려면 SCOM 2016을 설치하고 구성하며 보호된 패브릭 관리 팩을 다운로드합니다. 포함된 관리 팩 가이드는 관리 팩을 구성하고 해당 모니터의 범위를 이해하는 방법을 설명합니다.

HGS 백업 및 복원

재해 복구 계획

재해 복구 계획을 작성하는 경우 보호된 패브릭에서 Host Guardian Service의 고유한 요구 사항을 고려하는 것이 중요합니다. HGS 노드의 일부 또는 전체가 손실되면 사용자가 보호된 VM을 시작하지 못하게 하는 즉각적인 가용성 문제가 발생할 수 있습니다. 전체 HGS 클러스터가 손실되는 시나리오에서는 HGS 클러스터를 복원하고 정상적인 작업을 다시 시작하려면 HGS 구성을 전체적으로 백업해야 합니다. 이 섹션에서는 이러한 시나리오를 준비하는 데 필요한 단계를 다룹니다.

먼저 HGS에 대한 내용을 백업하는 것이 중요하다는 점을 이해하는 것이 중요합니다. HGS는 보호된 VM을 실행할 권한을 부여할 호스트를 결정하는 데 도움이 되는 몇 가지 정보를 유지합니다. 다음 내용이 포함됩니다.

  1. 신뢰할 수 있는 호스트를 포함한 그룹에 대한 Active Directory 보안 식별자(Active Directory 증명을 사용하는 경우)
  2. 사용자 환경의 각 호스트에 대한 고유한 TPM 식별자입니다.
  3. 호스트의 고유한 각 구성에 대한 TPM 정책 및
  4. 호스트에서 실행이 허용된 소프트웨어를 결정하는 코드 무결성 정책입니다.

이러한 증명 아티팩트를 가져오려면 호스팅 패브릭의 관리자와 조정해야 하므로 재해 발생 후 이 정보를 다시 가져오기가 잠재적으로 어려울 수 있습니다.

또한 HGS는 보호된 VM(키 보호기)을 시작하는 데 필요한 정보를 암호화 및 서명하는 데 사용되는 2개 이상의 인증서에 액세스해야 합니다. 이러한 인증서는 잘 알려져 있으며(보호된 VM의 소유자가 VM을 실행하기 위해 패브릭에 권한을 부여하는 데 사용됨) 원활한 복구 환경을 위해 재해 발생 후 복원해야 합니다. 재해 발생 후 동일한 인증서를 사용하여 HGS를 복원하지 않으면 각각의 VM을 업데이트하여 새 키에 정보 암호 해독 권한을 부여해야 합니다. 보안상의 이유로 VM 소유자만 VM 구성을 업데이트하여 이러한 새 키에 권한을 부여할 수 있습니다. 즉, 재해 발생 후 키를 복원하지 못하면 각 VM 소유자가 VM을 다시 실행하기 위한 조치를 취해야 합니다.

최악의 상황에 대비

HGS의 완전한 손실에 대비하려면 다음의 두 단계를 수행해야 합니다.

  1. HGS 증명 정책 백업
  2. HGS 키 백업

이러한 두 단계 모두를 수행하는 방법에 대한 지침은 HGS 백업 섹션에서 제공됩니다.

또한 Active Directory 도메인이나 Active Directory 자체에서 HGS를 관리할 권한이 있는 사용자 목록을 백업하는 것이 좋지만 필수는 아닙니다.

정보는 최신 상태이고 변조 또는 도난을 방지하기 위해 안전하게 저장되도록 백업을 정기적으로 수행해야 합니다.

HGS 노드의 전체 시스템 이미지를 백업하거나 복원하지 않는 것이 좋습니다. 전체 클러스터가 손실된 경우 새로운 HGS 노드를 설정하고 전체 서버 OS가 아닌 HGS 상태만 복원하는 것이 가장 좋습니다.

한 개의 노드의 손실에서 복구

HGS 클러스터에서 하나 이상의 노드(일부 노드가 아님)가 손실되는 경우 배포 가이드의 지침에 따라 클러스터에 노드를 추가할 수 있습니다. 증명 정책은 HGS에 제공된 인증서와 마찬가지로 암호가 함께 제공되는 PFX 파일로 자동 동기화됩니다. 지문을 사용해서 HGS에 추가된 인증서(일반적으로 내보내기 불가능 및 하드웨어 지원 인증서)의 경우 각 새 노드가 각 인증서의 프라이빗 키에 액세스할 수 있는지 확인해야 합니다.

전체 클러스터 손실로부터 복구

전체 HGS 클러스터가 중단되고 다시 온라인 상태로 돌아갈 수 없는 경우 HGS를 백업에서 복원해야 합니다. 백업에서 HGS를 복원하려면 먼저 배포 가이드의 지침에 따라 새 HGS 클러스터를 설정해야 합니다. 호스트의 이름 확인을 지원하기 위해 복구 HGS 환경을 설정할 때 동일한 클러스터 이름을 사용하는 것이 강력히 권장되지만 필수는 아닙니다. 같은 이름을 사용하면 새 증명 및 키 보호 URL을 사용하여 호스트를 다시 구성할 필요가 없습니다. HGS를 지원하는 Active Directory 도메인에 개체를 복원했다면 HGS 서버를 초기화하기 전에 HGS 클러스터, 컴퓨터, 서비스 계정 및 JEA 그룹을 나타내는 개체를 제거하는 것이 좋습니다.

첫 번째 HGS 노드(예: 설치 및 초기화됨)를 설정한 후에는 백업에서 HGS 복원의 절차에 따라 주요 보호 인증서의 증명 정책 및 공용 반쪽을 복원합니다. 인증서 공급자의 지침에 따라 인증서의 프라이빗 키는 수동으로 복원해야 합니다(예: Windows에서 인증서 가져오기 또는 HSM 지원 인증서에 대한 액세스 구성). 첫 번째 노드가 설정되면 원하는 용량 및 복원력에 도달할 때까지 계속 클러스터에 추가 노드를 설치할 수 있습니다.

HGS 백업

HGS 관리자는 정기적으로 HGS를 백업해야 합니다. 전체 백업에는 적절히 보호해야 하는 중요한 키 자료가 포함됩니다. 신뢰할 수 없는 엔터티가 이러한 키에 액세스하면 해당 자료를 사용하여 보호된 VM을 손상시키기 위해 악의적인 HGS 환경을 설정할 수 있습니다.

증명 정책 백업 HGS 증명 정책을 백업하려면 작동하는 HGS 서버 노드에서 다음 명령을 실행합니다. 암호를 제공하라는 메시지가 표시됩니다. 이 암호는 인증서 지문 대신 PFX 파일을 사용해서 HGS에 추가된 인증서를 암호화하는 데 사용됩니다.

Export-HgsServerState -Path C:\temp\HGSBackup.xml

참고 항목

관리자가 신뢰할 수 있는 증명을 사용하는 경우 HGS에서 보호된 호스트에 권한을 부여하는 데 사용하는 보안 그룹의 구성원 자격을 별도로 백업해야 합니다. HGS는 보안 그룹의 SID만 백업하며, 보안 그룹의 멤버 구성원은 백업하지 않습니다. 재해 발생 시 이러한 그룹이 손실되는 경우 그룹을 다시 만들어 보호된 각 호스트를 다시 추가해야 합니다.

인증서 백업

Export-HgsServerState 명령은 명령이 실행될 때 HGS에 추가된 PFX 기반 인증서를 백업합니다. 지문을 사용하여 HGS에 인증서를 추가한 경우(내보내지 않는 인증서 및 하드웨어 지원 인증서의 경우가 일반적) 인증서에 대한 프라이빗 키를 수동으로 백업해야 합니다. HGS에 등록되어 있고 수동 백업이 필요한 인증서를 식별하려면 작동하는 HGS 서버 노드에서 다음 PowerShell 명령을 실행합니다.

Get-HgsKeyProtectionCertificate | Where-Object { $_.CertificateData.GetType().Name -eq 'CertificateReference' } | Format-Table Thumbprint, @{ Label = 'Subject'; Expression = { $_.CertificateData.Certificate.Subject } }

나열된 각각의 인증서에 대해 프라이빗 키를 수동으로 백업해야 합니다. 내보낼 수 없는 소프트웨어 기반 인증서를 사용하는 경우 인증 기관에 문의해서 인증서 백업이 있는지 확인하고 요청 시 다시 발급할 수 있어야 합니다. 하드웨어 보안 모듈에서 생성되어 저장된 인증서의 경우 재해 복구 계획에 대한 지침은 디바이스 설명서를 참조해야 합니다.

두 가지 모든 부분을 함께 복원할 수 있도록 인증서 백업을 증명 정책 백업과 함께 안전한 위치에 저장해야 합니다.

백업할 추가 구성

백업된 HGS 서버 상태는 HGS 클러스터의 이름, Active Directory의 정보 또는 HGS API와의 통신을 보호하는 데 사용되는 SSL 인증서를 포함하지 않습니다. 이러한 설정은 일관성에는 중요하지만 재해 발생 후 HGS 클러스터를 다시 온라인 상태로 만드는 데는 중요하지 않습니다.

HGS 서비스의 이름을 캡처하려면 Get-HgsServer을 실행하고 증명 및 키 보호 URL에서 플랫 이름을 기록합니다. 예를 들어 증명 URL이 "https://hgs.contoso.com/Attestation"인 경우 "hgs"가 HGS 서비스 이름입니다.

HGS에서 사용하는 Active Directory 도메인은 다른 Active Directory 도메인과 같이 관리되어야 합니다. 재해 발생 후 HGS를 복원하는 경우 현재 도메인에 있는 정확한 개체를 다시 만들 필요가 없습니다. 그러나 Active Directory를 백업하고 시스템을 관리할 권한이 있는 JEA 사용자 목록과 관리자가 신뢰할 수 있는 증명에서 보호된 호스트에 권한을 부여하는 데 사용하는 보안 그룹의 구성원 자격을 유지하는 경우 복구가 더 쉬워질 것입니다.

HGS에 대해 구성된 SSL 인증서의 지문을 식별하려면 다음 명령을 PowerShell에서 실행합니다. 그런 다음 인증서 공급자의 지침에 따라 해당하는 SSL 인증서를 백업할 수 있습니다.

Get-WebBinding -Protocol https | Select-Object certificateHash

백업에서 HGS 복원

다음 단계에서는 백업에서 HGS 설정을 복원하는 방법에 대해 설명합니다. 이 단계는 이미 실행 중인 HGS 인스턴스에 대한 변경 내용을 실행 취소하려는 경우와 이전 HGS 클러스터가 완전히 손실된 후 새 HGS 클러스터를 설치하는 경우 모두와 관련이 있습니다.

대체 HGS 클러스터 설정

HGS를 복원하기 위해서는 먼저 구성을 복원할 수 있는 초기화된 HGS 클러스터가 있어야 합니다. 실수로 기존(실행 중인) 클러스터로 삭제된 설정을 가져오는 경우 이 단계는 건너뛸 수 있습니다. HGS의 전체 손실로부터 복구하는 경우 배포 가이드의 지침에 따라 하나 이상의 HGS 노드를 설치하고 초기화해야 합니다.

특히 다음을 수행해야 합니다.

  1. HGS 도메인 설정 또는 기존 도메인에 HGS 조인
  2. 기존 키 또는 임시 키 집합을 사용하여 HGS 서버를 초기화합니다. HGS 백업 파일에서 실제 키를 가져온 후 임시 키를 제거할 수 있습니다.
  3. 백업에서 HGS 설정을 가져와 신뢰할 수 있는 호스트 그룹, 코드 무결성 정책, TPM 기준 및 TPM 식별자를 복원합니다.

새로운 HGS 클러스터는 백업 파일을 내보낸 HGS 인스턴스와 동일한 인증서, 서비스 이름 또는 도메인을 사용할 필요가 없습니다.

백업으로부터 설정 가져오기

증명 정책, PFX 기반 인증서 및 비 PFX 인증서의 공개 키를 백업 파일에서 HGS 노드로 복원하기 위해서는 초기화된 HGS 서버 노드에서 다음 명령을 실행합니다. 백업을 만들면 지정한 암호를 입력하라는 메시지가 표시됩니다.

Import-HgsServerState -Path C:\Temp\HGSBackup.xml

관리자가 신뢰할 수 있는 증명 정책 또는 TPM에서 신뢰할 수 있는 증명 정책만 가져오려면 -ImportActiveDirectoryModeState 또는 -ImportTpmModeState 플래그를 Import-HgsServerState에 지정하여 가져올 수 있습니다.

Import-HgsServerState을 실행하기 전에 Windows Server 2016에 대한 최신 누적 업데이트가 설치되어 있는지 확인합니다. 이렇게 하지 않으면 가져오기 오류가 발생할 수 있습니다.

참고 항목

하나 이상의 정책이 이미 설치된 기존 HGS 노드에서 정책을 복원하는 경우 가져오기 명령은 각 중복 정책에 대한 오류를 표시합니다. 이는 예상된 동작이며 대부분의 경우에는 무시해도 됩니다.

인증서에 대한 프라이빗 키 재설치

백업을 만든 HGS에 사용된 인증서가 지문을 사용해서 추가된 경우 해당 인증서의 공개 키만 백업 파일에 포함됩니다. 즉, HGS가 Hyper-V 호스트의 요청을 제공하기 전에 각 인증서에 대한 프라이빗 키를 수동으로 설치 및/또는 액세스 권한을 부여해야 합니다. 해당하는 단계를 완료하는 데 필요한 작업은 인증서가 원래 발급된 방법에 따라 달라집니다. 인증 기관에서 발급한 소프트웨어 지원 인증서의 경우 CA에 문의하여 프라이빗 키를 가져와 지침에 따라 HGS 노드에 설치해야 합니다. 마찬가지로 인증서에 하드웨어가 지원되는 경우 하드웨어 보안 모듈 공급업체의 설명서를 참조하여 HSM에 연결하고 각 머신에 프라이빗 키에 대한 액세스 권한을 부여하는 데 필요한 드라이버를 각 HGS 노드에 설치해야 합니다.

앞서 말한 것처럼 지문을 사용하여 HGS에 추가된 인증서는 각 노드에 프라이빗 키를 수동으로 복제해야 합니다. 복원된 HGS 클러스터에 추가하는 각각의 추가 노드에서 이 단계를 반복해야 합니다.

가져온 증명 정책 검토

백업에서 설정을 가져온 후에는 보호된 VM을 실행하기 위해 신뢰할 수 있는 호스트만 성공적으로 증명할 수 있는지 확인하도록 Get-HgsAttestationPolicy을 사용하여 가져온 모든 정책을 면밀히 검토하는 것이 좋습니다. 보안 상태와 더 이상 일치하지 않는 정책을 찾으면 사용하지 않도록 설정하거나 제거할 수 있습니다.

시스템 상태를 확인하도록 진단 실행

HGS 노드의 상태 설정 및 복원을 완료한 후에는 HGS 진단 도구를 실행해서 시스템 상태를 확인해야 합니다. 이렇게 하려면 구성을 복원한 HGS 노드에서 다음 명령을 실행합니다.

Get-HgsTrace -RunDiagnostics

"전체 결과"가 "통과"가 아닌 경우 시스템 구성을 완료하도록 추가 단계가 필요합니다. 자세한 내용은 실패한 하위 테스트에 보고된 메시지를 확인하세요.

HGS 패치

최신 누적 업데이트를 설치하여 호스트 보호 서비스 노드를 최신 상태로 유지하는 것이 중요합니다. 새로운 HGS 노드를 설정하는 경우 HGS 역할을 설치하거나 구성하기 전에 사용 가능한 업데이트를 설치하는 것이 강력히 권장됩니다. 이렇게 하면 새로운 기능이나 변경된 기능이 즉시 적용됩니다.

보호된 패브릭을 배치하는 경우 HGS를 업그레이드하기 전에 먼저 모든 Hyper-V 호스트를 업그레이드하는 것이 좋습니다. 이는 Hyper-V 호스트가 업데이트된 이후 HGS의 증명 정책을 변경하여 필요한 정보를 제공하도록 하기 위한 것입니다. 업데이트가 정책의 동작을 변경하려는 경우 패브릭의 중단을 방지하기 위해 자동으로 사용하도록 설정되지 않습니다. 이러한 업데이트를 위해 다음 섹션의 지침에 따라 새 증명 또는 변경된 증명 정책을 활성화해야 합니다. Windows Server에 대한 릴리스 정보 및 설치한 누적 업데이트를 읽어 정책 업데이트가 필요한지 확인하는 것을 권장합니다.

정책 활성화가 필요한 업데이트

HGS에 대한 업데이트가 증명 정책의 동작을 도입하거나 크게 변경하는 경우 변경된 정책을 활성화하도록 추가 단계가 필요합니다. 정책 변경은 HGS 상태를 내보내고 가져오기한 후에만 적용됩니다. 환경의 모든 호스트 및 모든 HGS 노드에 누적 업데이트를 적용한 후에만 새로운 정책 또는 변경된 정책을 활성화해야 합니다. 모든 컴퓨터가 업데이트되면 다음 명령을 HGS 노드에서 실행하여 업그레이드 프로세스를 트리거합니다.

$password = Read-Host -AsSecureString -Prompt "Enter a temporary password"
Export-HgsServerState -Path .\temporaryExport.xml -Password $password
Import-HgsServerState -Path .\temporaryExport.xml -Password $password

새로운 정책이 도입된 경우 기본적으로 사용하지 않도록 설정됩니다. 새로운 정책을 사용하도록 설정하려면 먼저 Microsoft 정책 목록('HGS_' 접두사)에서 해당 정책을 찾은 다음, 다음 명령을 사용하여 사용하도록 설정합니다.

Get-HgsAttestationPolicy

Enable-HgsAttestationPolicy -Name <Hgs_NewPolicyName>

증명 정책 관리

HGS는 호스트가 "정상"으로 간주하고 보호된 VM을 실행할 수 있도록 충족해야 하는 최소 요구 사항 집합을 정의하는 여러 증명 정책을 유지 관리합니다. 이러한 정책 중 일부는 Microsoft에서 정의하고 다른 정책은 사용자 환경에서 허용 가능한 코드 무결성 정책, TPM 기준 및 호스트를 정의하기 위해 추가됩니다. 이러한 정책을 정기적으로 유지 관리하여 호스트를 업데이트하고 교체할 때 호스트가 제대로 인증을 계속할 수 있도록 하고 신뢰할 수 없는 호스트 또는 구성은 성공적으로 인증되지 않도록 해야 합니다.

관리자가 신뢰할 수 있는 증명의 경우 호스트가 정상인지 여부를 결정하는 하나의 정책, 즉 신뢰할 수 있는 알려진 보안 그룹의 구성원 자격만 있습니다. TPM 증명은 더욱 복잡하며 시스템의 코드 및 구성을 측정하는 다양한 정책을 포함하고 정상인지 확인합니다.

단일 HGS는 Active Directory 및 TPM 정책을 모두 사용하여 한 번에 구성할 수 있지만, 서비스는 호스트가 인증을 시도하는 경우 구성된 현재 모드에 대한 정책만 확인합니다. HGS 서버의 모드를 확인하려면 Get-HgsServer을 실행합니다.

기본 정책

TPM에서 신뢰할 수 있는 증명의 경우 HGS에서 구성된 몇 가지 기본 제공 정책이 있습니다. 이러한 정책 중 일부는 "잠김"이며 이는 보안상의 이유로 사용하지 않도록 설정할 수 없음을 의미합니다. 아래 표에서는 각 기본 정책의 용도에 대해 설명합니다.

정책 이름 목적
Hgs_SecureBootEnabled 호스트가 보안 부팅을 사용하도록 설정해야 합니다. 이는 시작 이진 파일과 기타 UEFI 잠금 설정을 측정하는 데 필요합니다.
Hgs_UefiDebugDisabled 커널 디버거를 호스트에 사용하도록 설정하지 않았는지 확인합니다. 사용자 모드 디버거는 코드 무결성 정책을 사용하여 차단됩니다.
Hgs_SecureBootSettings 하나 이상의(관리자 정의) TPM 기준과 호스트가 일치하도록 하는 부정 정책입니다.
Hgs_CiPolicy 호스트가 관리자 정의 CI 정책 중 하나를 사용 중인지 확인하는 부정적인 정책입니다.
Hgs_HypervisorEnforcedCiPolicy 코드 무결성 정책은 하이퍼바이저에서 적용해야 합니다. 이 정책을 사용하지 않도록 설정하면 커널 모드 코드 무결성 정책의 공격에 대한 보호가 약화됩니다.
Hgs_FullBoot 절전 모드 또는 최대 절전 모드에서 호스트가 다시 시작되지 않았는지 확인합니다. 이 정책을 통과하기 위해서는 호스트를 제대로 다시 시작하거나 종료해야 합니다.
Hgs_VsmIdkPresent 호스트에서 가상화 기반의 보안을 실행해야 합니다. IDK는 호스트의 보안 메모리 공간으로 다시 전송된 정보를 암호화하는 데 필요한 키를 나타냅니다.
Hgs_PageFileEncryptionEnabled 페이지 파일을 호스트에서 암호화해야 합니다. 이 정책을 사용하지 않도록 설정하면 테넌트 비밀에 대해 암호화되지 않은 페이지 파일이 검사되는 경우 정보가 노출될 수 있습니다.
Hgs_BitLockerEnabled Hyper-V 호스트에서 BitLocker를 사용하도록 설정해야 합니다. 이 정책은 성능상의 이유로 기본적으로 사용하지 않도록 설정되고 사용하도록 설정하지 않는 것이 좋습니다. 이 정책은 보호된 VM 자체의 암호화와는 관련이 없습니다.
Hgs_IommuEnabled 직접 메모리 액세스 공격을 방지하기 위해 사용 중인 IOMMU 디바이스가 호스트에 있어야 합니다. 이 정책을 사용하지 않도록 설정하고 IOMMU를 사용하도록 설정하지 않은 호스트를 사용하면 테넌트 VM 비밀을 노출하여 직접 메모리 공격을 수행할 수 있습니다.
Hgs_NoHibernation Hyper-V 호스트에서 최대 절전 모드를 사용하지 않도록 설정해야 합니다. 이 정책을 사용하지 않도록 설정하면 보호된 VM 메모리를 암호화되지 않은 최대 절전 모드 파일에 호스트가 저장할 수 있습니다.
Hgs_NoDumps Hyper-V 호스트에서 메모리 덤프를 사용하지 않도록 설정해야 합니다. 이 정책을 사용하지 않도록 설정하는 경우 보호된 VM 메모리가 암호화되지 않은 크래시 덤프 파일에 저장되지 않도록 덤프 암호화를 구성하는 것이 좋습니다.
Hgs_DumpEncryption Hyper-V 호스트에서 사용하도록 설정된 경우 HGS에서 신뢰할 수 있는 암호화 키로 메모리 덤프를 암호화해야 합니다. 호스트에서 덤프를 사용하도록 설정하지 않은 경우 이 정책은 적용되지 않습니다. 이 정책 및 Hgs_NoDumps 모두 사용하지 않도록 설정된 경우 보호된 VM 메모리를 암호화되지 않은 덤프 파일에 저장할 수 있습니다.
Hgs_DumpEncryptionKey 메모리 덤프를 허용하도록 구성된 호스트가 HGS에 알려진 관리자 정의 덤프 파일 암호화 키를 사용 중인지 확인하는 부정 정책입니다. 이 정책은 Hgs_DumpEncryption을 사용하지 않도록 설정된 경우 적용되지 않습니다.

보호된 새로운 호스트 권한 부여

새로운 호스트가 보호된 호스트가 되도록 권한을 부여하려면(예: 성공적으로 증명) HGS는 호스트를 신뢰하고(TPM에서 신뢰할 수 있는 증명을 사용하도록 구성된 경우) 해당 호스트에서 실행되는 소프트웨어를 신뢰해야 합니다. 새로운 호스트에 권한을 부여하는 단계는 HGS가 현재 구성된 증명 모드에 따라 다릅니다. 보호된 패브릭에 대한 증명 모드를 확인하려면 HGS 노드에서 Get-HgsServer을 실행합니다.

소프트웨어 구성

새로운 Hyper-V 호스트에서 Windows Server 2016 Datacenter 버전이 설치되어 있는지 확인합니다. Windows Server 2016 Standard에서는 보호된 패브릭에서 보호된 VM을 실행할 수 없습니다. 호스트에는 데스크톱 환경 또는 Server Core가 설치되어 있을 수 있습니다.

데스크톱 환경 및 Server Core가 있는 서버에서 Hyper-V와 호스트 보호 Hyper-V 지원 서버 역할을 설치해야 합니다.

Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart

관리자가 신뢰할 수 있는 증명

관리자가 신뢰할 수 있는 증명을 사용할 때 HGS에 새로운 호스트를 등록하려면 먼저 호스트가 가입된 도메인의 보안 그룹에 호스트를 추가해야 합니다. 일반적으로 각각의 도메인에는 보호된 호스트에 대한 하나의 보안 그룹이 있습니다. 이미 HGS에 해당 그룹을 등록한 경우 호스트를 다시 시작하여 그룹 구성원 자격을 새로 고치는 작업만 수행해야 합니다.

다음 명령을 실행하여 HGS에서 신뢰할 수 있는 보안 그룹을 확인할 수 있습니다.

Get-HgsAttestationHostGroup

HGS에 새로운 보안 그룹을 등록하려면 먼저 호스트 도메인에서 그룹의 SID(보안 식별자)를 캡처하고 HGS에 SID를 등록합니다.

Add-HgsAttestationHostGroup -Name "Contoso Guarded Hosts" -Identifier "S-1-5-21-3623811015-3361044348-30300820-1013"

호스트 도메인 및 HGS 간의 트러스트를 설정하는 방법에 대한 지침은 배포 가이드에서 확인할 수 있습니다.

TPM에서 신뢰할 수 있는 증명

HGS가 TPM 모드로 구성된 경우 호스트는 하나 이상의 TPM 기준, TPM 식별자 및 코드 무결성 정책뿐만 아니라 "Hgs_"라는 접두사로 지정된 모든 잠긴 정책 및 "사용" 정책을 전달해야 합니다. 새로운 호스트를 추가할 때마다 HGS에 새 TPM 식별자를 등록해야 합니다. 호스트가 사용자 환경의 다른 호스트와 동일한 소프트웨어(및 동일한 코드 무결성 정책이 적용됨)와 TPM 기준을 실행하는 한 새로운 CI 정책 또는 기준을 추가할 필요가 없습니다.

새 호스트에 대한 TPM 식별자 추가 새 호스트에서 다음 명령을 실행하여 TPM 식별자를 캡처합니다. HGS에서 조회하는 데 도움이 되는 호스트의 고유 이름을 지정해야 합니다. 호스트를 서비스 해제하거나 HGS에서 보호된 VM을 실행하지 못하게 하려는 경우에는 이 정보가 필요합니다.

(Get-PlatformIdentifier -Name "Host01").InnerXml | Out-File C:\temp\host01.xml -Encoding UTF8

이 파일을 HGS 서버에 복사한 다음, 다음 명령을 실행하여 호스트를 HGS에 등록합니다.

Add-HgsAttestationTpmHost -Name 'Host01' -Path C:\temp\host01.xml

새 TPM 기준 추가 새 호스트가 사용자 환경에 대해 새 하드웨어 또는 펌웨어 구성을 실행하는 경우 새 TPM 기준을 사용해야 할 수 있습니다. 이렇게 하려면 호스트에서 다음 명령을 실행합니다.

Get-HgsAttestationBaselinePolicy -Path 'C:\temp\hardwareConfig01.tcglog'

참고 항목

호스트가 유효성 검사에 실패하고 성공적으로 증명되지 않는 경우 오류가 표시되더라도 걱정하지 마세요. 이는 호스트가 보호된 VM을 실행할 수 있는지 확인하기 위한 필수 구성 요소이며, 코드 무결성 정책 또는 기타 필수 설정을 아직 적용하지 않아서일 수 있습니다. 오류 메시지를 읽고 제안된 사항을 변경한 다음 다시 시도합니다. 또는 명령에 -SkipValidation 플래그를 추가하여 현재 유효성 검사를 건너뛸 수 있습니다.

HGS 서버에 TPM 기준을 복사한 다음, 다음 명령을 사용하여 등록합니다. 이 Hyper-V 호스트 클래스의 하드웨어 및 펌웨어 구성을 이해하는 데 도움이 되는 명명 규칙을 사용하는 것이 권장됩니다.

Add-HgsAttestationTpmPolicy -Name 'HardwareConfig01' -Path 'C:\temp\hardwareConfig01.tcglog'

새 코드 무결성 정책 추가 Hyper-V 호스트에서 실행 중인 코드 무결성 정책을 변경한 경우 해당 호스트가 성공적으로 증명하려면 HGS에 새 정책을 등록해야 합니다. 사용자 환경에서 신뢰할 수 있는 Hyper-V 컴퓨터의 마스터 이미지 역할을 하는 참조 호스트에서 New-CIPolicy 명령을 사용하여 새 CI 정책을 캡처합니다. Hyper-V 호스트 CI 정책에 FilePublisher 수준 및 해시 대체를 사용하는 것이 좋습니다. 먼저 감사 모드에서 CI 정책을 만들어 모든 항목이 예상대로 작동하는지 확인해야 합니다. 샘플 워크로드의 유효성을 시스템에서 검사한 후 정책을 적용하고 적용된 버전을 HGS에 복사할 수 있습니다. 코드 무결성 정책 구성 옵션의 전체 목록은 디바이스 가드 문서를 참조하세요.

# Capture a new CI policy with the FilePublisher primary level and Hash fallback and enable user mode code integrity protections
New-CIPolicy -FilePath 'C:\temp\ws2016-hardware01-ci.xml' -Level FilePublisher -Fallback Hash -UserPEs

# Apply the CI policy to the system
ConvertFrom-CIPolicy -XmlFilePath 'C:\temp\ws2016-hardware01-ci.xml' -BinaryFilePath 'C:\temp\ws2016-hardware01-ci.p7b'
Copy-Item 'C:\temp\ws2016-hardware01-ci.p7b' 'C:\Windows\System32\CodeIntegrity\SIPolicy.p7b'
Restart-Computer

# Check the event log for any untrusted binaries and update the policy if necessary
# Consult the Device Guard documentation for more details

# Change the policy to be in enforced mode
Set-RuleOption -FilePath 'C:\temp\ws2016-hardare01-ci.xml' -Option 3 -Delete

# Apply the enforced CI policy on the system
ConvertFrom-CIPolicy -XmlFilePath 'C:\temp\ws2016-hardware01-ci.xml' -BinaryFilePath 'C:\temp\ws2016-hardware01-ci.p7b'
Copy-Item 'C:\temp\ws2016-hardware01-ci.p7b' 'C:\Windows\System32\CodeIntegrity\SIPolicy.p7b'
Restart-Computer

정책을 만들어 테스트하고 적용한 후에는 이진 파일(.p7b)을 HGS 서버에 복사하고 정책을 등록합니다.

Add-HgsAttestationCiPolicy -Name 'WS2016-Hardware01' -Path 'C:\temp\ws2016-hardware01-ci.p7b'

메모리 덤프 암호화 키 추가

Hgs_NoDumps 정책을 사용하지 않도록 설정하고 Hgs_DumpEncryption 정책을 사용하도록 설정하면 해당 덤프가 암호화되는 한 보호된 호스트는 메모리 덤프(크래시 덤프 포함)를 사용하도록 설정할 수 있습니다. 메모리 덤프를 사용하지 않도록 설정하거나 HGS에 알려진 키로 암호화하는 경우에만 보호된 호스트가 증명을 전달합니다. 기본적으로 덤프 암호화 키는 HGS에서 구성되지 않습니다.

HGS에 덤프 암호화 키를 추가하려면 Add-HgsAttestationDumpPolicy cmdlet을 사용하여 HGS에 덤프 암호화 키의 해시를 제공합니다. 덤프 암호화로 구성된 Hyper-V 호스트에서 TPM 기준을 캡처하는 경우 해시는 tcglog에 포함되며 Add-HgsAttestationDumpPolicy cmdlet에 제공할 수 있습니다.

Add-HgsAttestationDumpPolicy -Name 'DumpEncryptionKey01' -Path 'C:\temp\TpmBaselineWithDumpEncryptionKey.tcglog'

또는 직접 cmdlet에 해시의 문자열 표현을 제공할 수 있습니다.

Add-HgsAttestationDumpPolicy -Name 'DumpEncryptionKey02' -PublicKeyHash '<paste your hash here>'

보호된 패브릭에서 서로 다른 키를 사용하도록 선택하는 경우 고유한 각 덤프 암호화 키를 HGS에 추가해야 합니다. HGS에 알려지지 않은 키를 사용해서 메모리 덤프를 암호화하는 호스트는 증명을 전달하지 않습니다.

호스트에서 덤프 암호화를 구성하는 자세한 내용은 Hyper-V 설명서를 참조하세요.

시스템에서 증명을 통과했는지 확인합니다.

HGS에 필요한 정보를 등록한 이후 호스트가 증명을 통과하는지 확인해야 합니다. 새로 추가된 Hyper-V 호스트에서 Set-HgsClientConfiguration을 실행하고 HGS 클러스터에 대한 올바른 URL을 제공합니다. 이러한 URL은 HGS 노드에서 Get-HgsServer을 실행하여 가져올 수 있습니다.

Set-HgsClientConfiguration -KeyProtectionServerUrl 'https://hgs.bastion.local/KeyProtection' -AttestationServerUrl 'https://hgs.bastion.local/Attestation'

결과 상태가 "IsHostGuarded : True"를 나타내지 않는 경우 구성 문제를 해결해야 합니다. 증명에 실패한 호스트에서 다음 명령을 실행해서 실패한 증명을 해결하는 데 도움이 될 수 있는 문제에 대한 자세한 보고서를 가져옵니다.

Get-HgsTrace -RunDiagnostics -Detailed

Important

Windows Server 2019 또는 Windows 10, 버전 1809를 사용하고 코드 무결성 정책을 사용하는 경우 Get-HgsTrace에서는 코드 무결성 정책 활성 진단에 대한 오류를 반환할 수 있습니다. 유일하게 실패한 진단인 경우 이 결과는 무시해도 됩니다.

증명 정책 검토

HGS에 구성된 정책의 현재 상태를 검토하기 위해 HGS 노드에서 다음 명령을 실행합니다.

# List all trusted security groups for admin-trusted attestation
Get-HgsAttestationHostGroup

# List all policies configured for TPM-trusted attestation
Get-HgsAttestationPolicy

보안 요구 사항을 더 이상 충족하지 않는 정책을 사용하는 경우(예: 현재 안전하지 않은 것으로 간주되는 이전 코드 무결성 정책) 다음 명령에서 정책 이름을 바꿔 사용하지 않도록 설정할 수 있습니다.

Disable-HgsAttestationPolicy -Name 'PolicyName'

마찬가지로 정책을 다시 사용하도록 설정하는 데 Enable-HgsAttestationPolicy을 사용할 수 있습니다.

정책이 더 이상 필요하지 않고 모든 HGS 노드에서 이를 제거하려면 Remove-HgsAttestationPolicy -Name 'PolicyName'을 실행하여 정책을 영구적으로 삭제합니다.

증명 모드 변경

관리자가 신뢰할 수 있는 증명을 사용해서 보호된 패브릭을 시작한 경우 환경에 충분한 TPM 2.0 호환 호스트가 있는 즉시 훨씬 더 강력한 TPM 증명 모드로 업그레이드할 수 있습니다. 전환할 준비가 되면 관리자가 신뢰할 수 있는 증명을 사용하여 HGS를 계속 실행하면서 HGS에서 미리 모든 증명 아티팩트(CI 정책, TPM 기준 및 TPM 식별자)를 로드할 수 있습니다. 이렇게 하려면 새 보호된 호스트 권한 부여 섹션의 지침을 따르기만 하면 됩니다.

HGS에 모든 정책을 추가했으면 다음 단계는 호스트에서 가상 증명 시도를 실행하여 TPM 모드에서 증명을 통과하는지 확인하는 것입니다. 이는 HGS의 현재 작동 상태에 영향을 미치지 않습니다. 아래 명령은 해당 환경의 모든 호스트 및 하나 이상의 HGS 노드에 액세스할 수 있는 컴퓨터에서 실행되어야 합니다. 방화벽 또는 기타 보안 정책이 이를 방지하는 경우 이 단계는 건너뛸 수 있습니다. 가능한 경우 가상 증명을 실행하여 TPM 모드로 "대칭 이동"하면 VM에 가동 중지 시간이 발생하는지 여부를 나타내는 것이 좋습니다.

# Get information for each host in your environment
$hostNames = 'host01.contoso.com', 'host02.contoso.com', 'host03.contoso.com'
$credential = Get-Credential -Message 'Enter a credential with admin privileges on each host'
$targets = @()
$hostNames | ForEach-Object { $targets += New-HgsTraceTarget -Credential $credential -Role GuardedHost -HostName $_ }

$hgsCredential = Get-Credential -Message 'Enter an admin credential for HGS'
$targets += New-HgsTraceTarget -Credential $hgsCredential -Role HostGuardianService -HostName 'HGS01.bastion.local'

# Initiate the synthetic attestation attempt
Get-HgsTrace -RunDiagnostics -Target $targets -Diagnostic GuardedFabricTpmMode

진단이 완료된 후 출력된 정보를 검토하여 호스트가 TPM 모드에서 증명에 실패했는지 확인합니다. 각 호스트에서 "통과"를 받을 때까지 진단을 다시 실행한 다음 HGS를 TPM 모드로 변경합니다.

TPM 모드로 변경하는 작업은 완료하는 데 1초밖에 걸리지 않습니다. HGS 노드에서 다음 명령을 실행하여 증명 모드를 업데이트합니다.

Set-HgsServer -TrustTpm

문제가 발생하여 Active Directory 모드로 다시 전환해야 하는 경우 Set-HgsServer -TrustActiveDirectory을 실행하여 이 작업을 수행할 수 있습니다.

모든 것이 예상대로 작동하는지 확인하고 나면 HGS에서 신뢰할 수 있는 모든 Active Directory 호스트 그룹을 제거하고 HGS와 패브릭 도메인 간의 트러스트를 제거해야 합니다. Active Directory 트러스트를 그대로 두면 누군가가 트러스트를 다시 사용하도록 설정하고 HGS를 Active Directory 모드로 전환할 위험이 있습니다. 그러면 보호된 호스트에서 확인되지 않은 상태로 신뢰할 수 없는 코드가 실행될 수 있습니다.

키 관리

보호된 패브릭 솔루션은 여러 공개/프라이빗 키 쌍을 사용하여 솔루션의 다양한 구성 요소의 무결성을 확인하고 테넌트 비밀을 암호화합니다. 호스트 보호 서비스는 보호된 VM을 시작하는 데 사용되는 키를 서명하고 암호화하는 데 사용하는 두 개 이상의 인증서(퍼블릭 및 프라이빗 키 포함)로 구성됩니다. 이러한 키는 신중히 관리해야 합니다. 악의적 사용자가 프라이빗 키를 획득하는 경우 패브릭에서 실행되는 VM의 선택을 해제하거나 약한 증명 정책을 사용해서 배치한 보호를 우회하는 HGS 클러스터를 설정할 수 있습니다. 재해 발생 시 프라이빗 키를 분실하고 백업에서 찾을 수 없는 경우 새로운 키 쌍을 설정하고 각 VM에 다시 키를 지정하여 새로운 인증서에 권한을 부여해야 합니다.

이 섹션에서는 기능과 보안을 위해 키를 구성하는 데 도움이 되는 일반적인 키 관리 항목에 대해 다룹니다.

새로운 키 추가

HGS는 하나의 키 집합으로 초기화해야 하지만 두 개 이상의 암호화 및 서명 키를 HGS에 추가할 수 있습니다. HGS에 새로운 키를 추가하는 가장 일반적인 두 가지 이유는 다음과 같습니다.

  1. 테넌트가 프라이빗 키를 하드웨어 보안 모듈에 복사하고 보호된 VM을 시작하도록 키에만 권한을 부여하는 "사용자 고유의 키 가져오기" 시나리오를 지원하기 위해서입니다.
  2. 먼저 새 키를 추가하고 각 VM 구성이 새 키를 사용하도록 업데이트될 때까지 두 개의 키 집합을 유지하여 HGS의 기존 키를 대체합니다.

새로운 키를 추가하는 프로세스는 사용 중인 인증서 유형에 따라 다릅니다.

옵션 1: HSM에 저장된 인증서 추가

HGS 키를 보호하는 권장 방법은 HSM(하드웨어 보안 모듈)에서 만든 인증서를 사용하는 것입니다. HSM에서는 키 사용이 데이터 센터의 보안에 민감한 디바이스에 대한 물리적 액세스와 연결되어 있는지 확인합니다. 각각의 HSM은 다르며 인증서를 만들고 HGS에 등록하는 고유한 프로세스가 있습니다. 아래 단계는 HSM 지원 인증서를 사용하도록 대략적인 지침을 제공하기 위한 것입니다. 정확한 단계와 기능은 HSM 공급업체의 설명서를 참조하세요.

  1. 클러스터에 있는 각 HGS 노드에 HSM 소프트웨어를 설치합니다. 네트워크 또는 로컬 HSM 디바이스가 있는지 여부에 따라 컴퓨터의 키 저장소에 대한 액세스 권한을 부여하기 위해 HSM을 구성해야 할 수 있습니다.

  2. 암호화 및 서명을 위한 2048비트 RSA 키를 사용하여 HSM에서 인증서 2개 만들기

    1. HSM에서 데이터 암호화 키 사용 속성을 사용해서 암호화 인증서 만들기
    2. HSM에서 디지털 서명 키 사용 속성을 사용해서 서명 인증서 만들기
  3. HSM 공급업체의 지침에 따라 각 HGS 노드의 로컬 인증서 저장소에서 인증서를 설치합니다.

  4. HSM에서 세부적인 권한을 사용하여 특정 애플리케이션 또는 사용자에게 프라이빗 키를 사용할 수 있는 권한을 부여하는 경우 HGS 그룹 관리 서비스 계정에 인증서에 대한 액세스 권한을 부여해야 합니다. (Get-IISAppPool -Name KeyProtection).ProcessModel.UserName을 실행하여 HGS gMSA 계정의 이름을 찾을 수 있습니다.

  5. 다음 명령에서 지문을 인증서의 지문으로 바꿔 HGS에 서명 및 암호화 인증서를 추가합니다.

    Add-HgsKeyProtectionCertificate -CertificateType Encryption -Thumbprint "AABBCCDDEEFF00112233445566778899"
    Add-HgsKeyProtectionCertificate -CertificateType Signing -Thumbprint "99887766554433221100FFEEDDCCBBAA"
    

옵션 2: 내보낼 수 없는 소프트웨어 인증서 추가

내보낼 수 없는 프라이빗 키가 있는 회사 또는 공용 인증 기관에서 발급한 소프트웨어 지원 인증서가 있는 경우 지문을 사용해서 HGS에 인증서를 추가해야 합니다.

  1. 인증 기관의 지침에 따라 인증서를 컴퓨터에 설치합니다.

  2. 인증서의 프라이빗 키에 대한 읽기 권한을 HGS 그룹 관리 서비스 계정에 부여합니다. (Get-IISAppPool -Name KeyProtection).ProcessModel.UserName을 실행하여 HGS gMSA 계정의 이름을 찾을 수 있습니다.

  3. 다음 명령을 사용하여 인증서를 HGS에 등록하고 인증서의 지문으로 대체합니다(인증서 서명에 대해 암호화서명으로 변경).

    Add-HgsKeyProtectionCertificate -CertificateType Encryption -Thumbprint "AABBCCDDEEFF00112233445566778899"
    

Important

수동으로 프라이빗 키를 설치하고 각 HGS 노드의 gMSA 계정에 대한 읽기 권한을 부여해야 합니다. HGS는 지문으로 등록된 모든 인증서에 대한 프라이빗 키를 자동으로 복제할 수 없습니다.

옵션 3: PFX 파일에 저장된 인증서 추가

PFX 파일 형식으로 저장되고 암호로 보호되어 내보낼 수 있는 프라이빗 키가 있는 소프트웨어 지원 인증서가 있는 경우 HGS에서 자동으로 인증서를 관리할 수 있습니다. PFX 파일을 사용하여 추가된 인증서는 HGS 클러스터의 모든 노드에 자동으로 복제되고 HGS는 프라이빗 키에 대한 액세스를 보호합니다. PFX 파일을 사용하여 새 인증서를 추가하려면 HGS 노드에서 다음 명령을 실행합니다(서명 인증서에 대한 서명으로 암호화 변경).

$certPassword = Read-Host -AsSecureString -Prompt "Provide the PFX file password"
Add-HgsKeyProtectionCertificate -CertificateType Encryption -CertificatePath "C:\temp\encryptionCert.pfx" -CertificatePassword $certPassword

HGS는 여러 서명 및 암호화 인증서를 지원할 수 있지만 기본 인증서 식별 및 변경은 한 쌍을 "기본" 인증서로 사용합니다. 누군가가 해당 HGS 클러스터에 대한 보호자 메타데이터를 다운로드하는 경우 사용되는 인증서입니다. 현재 기본 인증서로 표시된 인증서를 확인하기 위해서는 다음 명령을 실행합니다.

Get-HgsKeyProtectionCertificate -IsPrimary $true

새로운 기본 암호화 또는 서명 인증서를 설정하려면 원하는 인증서의 지문을 찾아 다음 명령을 사용하여 기본 인증서로 표시합니다.

Get-HgsKeyProtectionCertificate
Set-HgsKeyProtectionCertificate -CertificateType Encryption -Thumbprint "AABBCCDDEEFF00112233445566778899" -IsPrimary
Set-HgsKeyProtectionCertificate -CertificateType Signing -Thumbprint "99887766554433221100FFEEDDCCBBAA" -IsPrimary

키 갱신 또는 변경

HGS에서 사용하는 인증서를 만드는 경우 인증서에 인증 기관의 정책 및 요청 정보에 따라 만료 날짜가 할당됩니다. 일반적으로 HTTP 통신 보안과 같이 인증서의 유효성이 중요한 시나리오에서는 서비스 중단 또는 염려되는 오류 메시지를 방지하기 위해 만료되기 전 인증서를 갱신해야 합니다. HGS는 이러한 의미에서 인증서를 사용하지 않습니다. HGS에서는 단순히 비대칭 키 쌍을 만들고 저장하는 편리한 방법으로 인증서를 사용합니다. HGS에서 만료된 암호화 또는 서명 인증서는 보호된 VM에 대한 보호의 약점이나 손실을 나타내지 않습니다. 또한 인증서 해지 검사는 HGS에서 수행하지 않습니다. HGS 인증서 또는 발급 기관의 인증서가 해지되는 경우 HGS의 인증서 사용에 영향을 주지 않습니다.

HGS 인증서에 대해 걱정할 필요가 있는 유일한 경우는 프라이빗 키가 도난당했다고 믿을 만한 이유가 있을 때입니다. 이 경우 HGS 암호화 및 서명 키 쌍의 프라이빗 절반을 소유하는 것만으로도 VM에서 보호를 제거하거나 증명 정책이 약한 가짜 HGS 서버를 유지하기에 충분하기 때문에 보호된 VM의 무결성이 위험합니다.

이러한 상황에서 자신을 찾거나 규정 준수 표준에서 인증서 키를 정기적으로 새로 고쳐야 하는 경우 다음 단계에서는 HGS 서버에서 키를 변경하는 프로세스에 대해 간략하게 설명합니다. 다음 지침에서는 HGS 클러스터에서 제공하는 각 VM에 대한 서비스 중단을 초래하는 중요한 작업을 나타냅니다. 서비스 중단을 최소화하고 테넌트 VM의 보안을 보장하기 위해서는 HGS 키를 변경하기 위한 적절한 계획이 필요합니다.

HGS 노드에서 다음 단계를 수행하여 새로운 암호화 및 서명 인증서 쌍을 등록합니다. HGS에 새 키를 추가하는 다양한 방법에 대한 자세한 내용은 새로운 키 추가 섹션을 참조하세요.

  1. HGS 서버에 대한 암호화 및 서명 인증서의 새로운 쌍을 만듭니다. 이상적으로는 하드웨어 보안 모듈에서 만들어집니다.

  2. Add-HgsKeyProtectionCertificate를 사용하여 새 암호화 및 서명 인증서 등록

    Add-HgsKeyProtectionCertificate -CertificateType Signing -Thumbprint <Thumbprint>
    Add-HgsKeyProtectionCertificate -CertificateType Encryption -Thumbprint <Thumbprint>
    
  3. 지문을 사용한 경우 클러스터에 있는 각 노드로 이동하여 프라이빗 키를 설치하고 HGS gMSA에 키에 대한 액세스 권한을 부여해야 합니다.

  4. HGS에서 새로운 인증서를 기본 인증서로 만들기

    Set-HgsKeyProtectionCertificate -CertificateType Signing -Thumbprint <Thumbprint> -IsPrimary
    Set-HgsKeyProtectionCertificate -CertificateType Encryption -Thumbprint <Thumbprint> -IsPrimary
    

이 시점에서 HGS 노드에서 가져온 메타데이터를 사용하여 만든 데이터를 보호하면 새로운 인증서가 사용되지만 이전 인증서가 여전히 있으므로 기존 VM이 계속 작동합니다.

모든 기존 VM이 새로운 키와 함께 작동하도록 하려면 각 VM에서 키 보호기를 업데이트해야 합니다.

이는 VM 소유자("소유자" 보호인이 소유한 개인 또는 엔터티)가 관여해야 하는 작업입니다. 보호된 각 VM에 대해 다음 단계를 수행합니다.

  1. VM을 종료합니다. 나머지 단계가 완료되거나 프로세스를 다시 시작해야 할 때까지 VM은 다시 켤 수 없습니다.

  2. 파일에 현재 키 보호기를 저장합니다. Get-VMKeyProtector -VMName 'VM001' | Out-File '.\VM001.kp'

  3. KP를 VM 소유자에게 전송

  4. 소유자가 HGS에서 업데이트된 보호자 정보를 다운로드하여 로컬 시스템에서 가져오도록 합니다.

  5. 현재 KP를 메모리로 읽고, 새로운 보호자에게 KP에 대한 액세스 권한을 부여하고, 다음 명령을 실행하여 새 파일에 저장합니다.

    $kpraw = Get-Content -Path .\VM001.kp
    $kp = ConvertTo-HgsKeyProtector -Bytes $kpraw
    $newGuardian = Get-HgsGuardian -Name 'UpdatedHgsGuardian'
    $updatedKP = Grant-HgsKeyProtectorAccess -KeyProtector $kp -Guardian $newGuardian
    $updatedKP.RawData | Out-File .\updatedVM001.kp
    
  6. 호스팅 패브릭에 업데이트된 KP를 다시 복사합니다.

  7. KP를 원래 VM에 적용합니다.

    $updatedKP = Get-Content -Path .\updatedVM001.kp
    Set-VMKeyProtector -VMName VM001 -KeyProtector $updatedKP
    
  8. 마지막으로 VM을 시작하여 성공적으로 실행되는지 확인합니다.

    참고 항목

    VM 소유자가 VM에서 잘못된 키 보호기를 설정하고 패브릭에 VM을 실행할 권한을 부여하지 않는 경우 보호된 VM은 시작할 수 없습니다. 마지막으로 알려진 정상 키 보호기로 돌아가려면 Set-VMKeyProtector -RestoreLastKnownGoodKeyProtector을 실행합니다.

    새로운 보호 키에 권한을 부여하도록 모든 VM이 업데이트되면 이전 키를 사용하지 않도록 설정하고 제거할 수 있습니다.

  9. Get-HgsKeyProtectionCertificate -IsPrimary $false에서 이전 인증서의 지문 가져오기

  10. 다음 명령을 실행하여 각 인증서를 사용하지 않도록 설정합니다.

    Set-HgsKeyProtectionCertificate -CertificateType Signing -Thumbprint <Thumbprint> -IsEnabled $false
    Set-HgsKeyProtectionCertificate -CertificateType Encryption -Thumbprint <Thumbprint> -IsEnabled $false
    
  11. VM이 여전히 사용하지 않도록 설정된 인증서로 시작할 수 있는지 확인한 후 다음 명령을 실행하여 HGS로부터 인증서를 제거합니다.

    Remove-HgsKeyProtectionCertificate -CertificateType Signing -Thumbprint <Thumbprint>`
    Remove-HgsKeyProtectionCertificate -CertificateType Encryption -Thumbprint <Thumbprint>`
    

Important

VM 백업은 이전 인증서를 사용하여 VM을 시작할 수 있는 이전 키 보호기 정보를 포함합니다. 프라이빗 키가 손상되었음을 알고 있는 경우 VM 백업도 손상될 수 있다고 가정하여 적절한 조치를 취해야 합니다. 백업(.vmcx)에서 VM 구성을 삭제하면 다음에 BitLocker 복구 암호를 사용하여 VM을 부팅해야 하는 비용에서 키 보호기가 제거됩니다.

노드 간 키 복제

HGS 클러스터의 모든 노드는 같은 암호화, 서명 및 (구성된 경우) SSL 인증서로 구성되어야 합니다. 이는 클러스터의 모든 노드에 도달하는 Hyper-V 호스트가 해당 요청을 성공적으로 처리할 수 있는 데 필요합니다.

PFX 기반 인증서를 사용하여 HGS 서버를 초기화한 경우 HGS는 클러스터의 모든 노드에서 해당 인증서의 공개 키와 프라이빗 키를 자동으로 복제합니다. 한 개의 노드에만 키를 추가하면 됩니다.

지문 또는 인증서 참조를 사용하여 HGS 서버를 초기화한 경우 HGS는 인증서의 공개 키만 각 노드에 복제합니다. 또한 HGS에서는 이 시나리오의 노드에서 프라이빗 키에 대한 액세스 권한을 자체적으로 부여할 수 없습니다. 따라서 귀하의 책임은 다음과 같습니다.

  1. 프라이빗 키를 각 노드에 설치
  2. 각 노드의 프라이빗 키에 대한 HGS 그룹 gMSA(관리 서비스 계정) 액세스 권한을 부여합니다. 이러한 작업은 여분의 작업 부담을 추가합니다. 그러나 내보낼 수 없는 프라이빗 키가 있는 HSM 지원 키 및 인증서에 필요합니다.

SSL 인증서는 어떤 형식으로도 복제되지 않습니다. SSL 인증서를 갱신하거나 교체하려면 선택할 때마다 동일한 SSL 인증서를 사용하여 각 HGS 서버를 초기화하고 각 서버를 업데이트해야 합니다. SSL 인증서를 바꿀 때 Set-HgsServer cmdlet을 사용하여 교체하는 것이 좋습니다.

HGS 구성 해제

HGS 서버를 서비스 해제하거나 상당수를 다시 구성해야 하는 경우 Clear-HgsServer 또는 Uninstall-HgsServer cmdlet을 사용하여 수행할 수 있습니다.

HGS 구성 지우기

HGS 클러스터에서 노드를 제거하려면 Clear-HgsServer cmdlet을 사용합니다. 이 cmdlet은 실행되는 서버에서 다음과 같이 내용을 변경합니다.

  • 증명 및 키 보호 서비스 등록 취소
  • "microsoft.windows.hgs" JEA 관리 엔드포인트 제거
  • HGS 장애 조치(failover) 클러스터에서 로컬 컴퓨터 제거

서버가 클러스터의 마지막 HGS 노드인 경우 클러스터 및 해당하는 분산 네트워크 이름 리소스도 제거됩니다.

# Removes the local computer from the HGS cluster
Clear-HgsServer

지우기 작업이 완료되면 Initialize-HgsServer를 사용하여 HGS 서버를 다시 초기화할 수 있습니다. Install-HgsServer를 사용하여 Active Directory Domain Services 도메인을 설정한 경우 해당 도메인은 명확한 작업 후에 구성되고 작동합니다.

HGS 제거

HGS 클러스터에서 노드를 제거하고 또한 실행 중인 Active Directory 도메인 컨트롤러를 강등하려면 Uninstall-HgsServer cmdlet을 사용합니다. 이 cmdlet은 실행되는 서버에서 다음과 같이 내용을 변경합니다.

  • 증명 및 키 보호 서비스 등록 취소
  • "microsoft.windows.hgs" JEA 관리 엔드포인트 제거
  • HGS 장애 조치(failover) 클러스터에서 로컬 컴퓨터 제거
  • 구성된 경우 Active Directory 도메인 컨트롤러를 강등합니다.

서버가 클러스터의 마지막 HGS 노드라면 도메인, 장애 조치(failover) 클러스터 및 클러스터의 분산 네트워크 이름 리소스도 제거됩니다.

# Removes the local computer from the HGS cluster and demotes the ADDC (restart required)
$newLocalAdminPassword = Read-Host -AsSecureString -Prompt "Enter a new password for the local administrator account"
Uninstall-HgsServer -LocalAdministratorPassword $newLocalAdminPassword -Restart

제거 작업이 완료되고 컴퓨터가 다시 시작되면 Install-HgsServer를 사용하여 ADDC 및 HGS를 다시 설치하거나 컴퓨터를 도메인에 가입하고 Initialize-HgsServer를 사용하여 해당 도메인의 HGS 서버를 초기화할 수 있습니다.

HGS 노드로 컴퓨터를 더 이상 사용하지 않으려는 경우 Windows에서 역할을 제거할 수 있습니다.

Uninstall-WindowsFeature HostGuardianServiceRole