호스트 보호 서비스 관리

적용 대상: Windows Server 2022, Windows Server 2019, Windows Server 2016

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 환경에 대한 do기본 및 Enterprise 관리자는 동일한 사람이 아니어야 하며 HGS가 Hyper-V 호스트와 동일한 Active Directory 포리스트를 사용해서는 안 됩니다. 더 많은 리소스에 대한 액세스 권한을 부여할 수 있는 사람은 누구나 보안 위험을 초래합니다.

Just Enough 관리istration 사용

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

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

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

JEA를 사용하려면 먼저 새 표준 사용자를 만들고 HGS 관리자 또는 HGS 검토자 그룹의 구성원으로 만들어야 합니다. HGS에 대한 새 포리스트를 설정하는 데 사용한 Install-HgsServer 경우 이러한 그룹의 이름은 각각 "servicename관리istrators" 및 "servicenameReviewers"입니다. 여기서 서비스 이름은 HGS 클러스터의 네트워크 이름입니다. HGS를 기존 do기본 조인한 경우 지정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에 새 정책 추가

실제로 정책을 변경하려면 'hgs관리istrators' 그룹에 속하는 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의 이벤트는 Windows 이벤트 로그의 2개 원본 아래에 표시됩니다.

  • 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 do기본 또는 Active Directory 자체에서 HGS를 관리할 권한이 있는 사용자 목록을 백업하는 것이 좋지만 필수는 아닙니다.

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

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

한 노드의 손실에서 복구

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

전체 클러스터 손실에서 복구

전체 HGS 클러스터가 중단되고 다시 온라인 상태로 돌아갈 수 없는 경우 백업에서 HGS를 복원해야 합니다. 백업에서 HGS를 복원하려면 먼저 배포 가이드의 지침에 따라 새 HGS 클러스터를 설정해야 합니다. 호스트의 이름 확인을 지원하기 위해 복구 HGS 환경을 설정할 때 동일한 클러스터 이름을 사용하는 것이 좋지만 필수는 아닙니다. 동일한 이름을 사용하면 새 증명 및 키 보호 URL을 사용하여 호스트를 다시 구성할 필요가 없습니다. 개체를 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 서비스의 이름을 캡처하려면 증명 및 키 보호 URL에서 플랫 이름을 실행하고 Get-HgsServer 기록합니다. 예를 들어 증명 URL이 "https://hgs.contoso.com/Attestation"인 경우 "hgs"는 HGS 서비스 이름입니다.

HGS에서 사용하는 Active Directory do기본 다른 Active Directory처럼 관리해야 기본. 재해 후 HGS를 복원할 때 현재 do기본 있는 정확한 개체를 다시 만들 필요는 없습니다. 그러나 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에서 신뢰할 수 있는 증명 정책만 가져오려면 Import-HgsServerState에 플래그-ImportTpmModeState 지정하여 -ImportActiveDirectoryModeState 가져올 수 있습니다.

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

참고 항목

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

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

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

미리 알림으로 지문을 사용하여 HGS에 추가된 인증서에는 각 노드에 대한 프라이빗 키를 수동으로 복제본(replica). 복원된 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 증명은 더 복잡하며 시스템의 코드 및 구성을 측정하는 다양한 정책을 포함하고 정상인지 확인합니다.

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

기본 정책

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

정책 이름 목적
Hgs_SecureBootEnabled 호스트가 보안 부팅을 사용하도록 설정해야 합니다. 이는 시작 이진 파일 및 기타 UEFI 잠금 설정을 측정하는 데 필요합니다.
Hgs_UefiDebugDisabled 호스트에 커널 디버거를 사용하도록 설정하지 않았는지 확인합니다. 사용자 모드 디버거는 코드 무결성 정책으로 차단됩니다.
Hgs_SecureBoot설정 호스트가 하나 이상의(관리자 정의) 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에 새 호스트를 등록하려면 먼저 호스트가 조인된 do기본 보안 그룹에 호스트를 추가해야 합니다. 일반적으로 각 기본 보호된 호스트에 대한 하나의 보안 그룹을 갖습니다. HGS에 해당 그룹을 이미 등록한 경우 호스트를 다시 시작하여 그룹 멤버 자격을 새로 고치는 작업만 수행해야 합니다.

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

Get-HgsAttestationHostGroup

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

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

호스트 do기본 및 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 현재 유효성 검사를 건너뛸 수 있습니다.

TPM 기준을 HGS 서버에 복사한 다음, 다음 명령을 사용하여 등록합니다. 이 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에 복사할 수 있습니다. 코드 무결성 정책 구성 옵션의 전체 목록은 Device Guard 설명서를 참조 하세요.

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

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 호스트에서 HGS 클러스터에 대한 올바른 URL을 실행하고 Set-HgsClientConfiguration 제공합니다. 이러한 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 그룹 관리 서비스 계정에 인증서에 대한 액세스 권한을 부여해야 합니다. 실행하여 HGS gMSA 계정의 이름을 찾을 수 있습니다. (Get-IISAppPool -Name KeyProtection).ProcessModel.UserName

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

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

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

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

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

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

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

    Add-HgsKeyProtectionCertificate -CertificateType Encryption -Thumbprint "AABBCCDDEEFF00112233445566778899"
    

Important

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

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

PFX 파일 형식으로 저장되고 암호로 보호될 수 있는 내보낼 수 있는 프라이빗 키가 있는 소프트웨어 지원 인증서가 있는 경우 HGS에서 자동으로 인증서를 관리할 수 있습니다. PFX 파일로 추가된 인증서는 HGS 클러스터의 모든 노드에 자동으로 복제본(replica) 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. VM 소유자에게 KP 전송

  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. 원래 VM에 KP를 적용합니다.

    $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을 부팅해야 하는 비용으로 키 보호기가 제거됩니다.

노드 간 키 복제본(replica)tion

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

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

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

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

SSL 인증서는 어떤 형식으로도 복제본(replica) 않습니다. 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 도메인 Services를 설정한 경우기본 기본 다시 구성되고 명확한 작업 후에 작동합니다기본.

HGS 제거

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

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

서버가 클러스터의 마지막 HGS 노드인 경우 do기본, 장애 조치(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