針對 SQL Server 部署主機守護者服務

適用於:SQL Server 2019 (15.x) 和更新版本 - 僅限 Windows

本文說明如何將主機守護者服務 (HGS) 部署為 SQL Server 的證明服務。 開始之前,請務必閱讀規劃主機守護者服務證明文章,以取得必要條件和架構指引的完整清單。

注意

HGS 系統管理員負責執行本文中所述的所有步驟。 請參閱使用 HGS 設定證明時的角色和責任

步驟 1:設定第一部 HGS 電腦

主機守護者服務 (HGS) 會在一部或多部電腦上以叢集服務的形式執行。 在此步驟中,您會在第一部電腦上設定新的 HGS 叢集。 如果您已經有 HGS 叢集,且正在將其他電腦新增至該叢集以提供高可用性,請跳至步驟 2:將更多 HGS 電腦新增至叢集

開始之前,請確定您使用的電腦執行的是 Windows Server 2019 或更新版本 - Standard 或 Datacenter 版本,您具有本機系統管理員權限,而且電腦尚未加入 Active Directory 網域。

  1. 以本機系統管理員身分登入第一部 HGS 電腦,並開啟已提升權限的 Windows PowerShell 主控台。 執行下列命令以安裝主機守護者服務角色。 電腦會自動重新開機以套用變更。

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. 在 HGS 電腦重新開機之後,請在已提升權限的 Windows PowerShell 主控台中執行下列命令,以安裝新的 Active Directory 樹系:

    # Select the name for your new Active Directory root domain.
    # Make sure the name does not conflict with, and is not subordinate to, any existing domains on your network.
    $HGSDomainName = 'bastion.local'
    
    # Specify a Directory Services Restore Mode password that can be used to recover your domain in safe mode.
    # This password is not, and will not change, your admin account password.
    # Save this password somewhere safe and include it in your disaster recovery plan.
    $DSRMPassword = Read-Host -AsSecureString -Prompt "Directory Services Restore Mode Password"
    
    Install-HgsServer -HgsDomainName $HgsDomainName -SafeModeAdministratorPassword $DSRMPassword -Restart
    

    您的 HGS 電腦會再次重新開機,以完成 Active Directory 樹系的設定。 下次登入時,您的系統管理員帳戶將會是網域系統管理員帳戶。 建議您檢閱 Active Directory Domain Services 作業文件,以取得管理和保護新樹系的詳細資訊。

  3. 接下來,您會在已提升權限的 Windows PowerShell 主控台中執行下列命令,以設定 HGS 叢集並安裝證明服務:

    # Note: the name you provide here will be shared by all HGS nodes and used to point your SQL Server computers to the HGS cluster.
    # For example, if you provide "attsvc" here, a DNS record for "attsvc.yourdomain.com" will be created for every HGS computer.
    Initialize-HgsAttestation -HgsServiceName 'hgs'
    

步驟 2:將更多 HGS 電腦新增至叢集

設定第一部 HGS 電腦和叢集之後,您可以新增其他 HGS 伺服器以提供高可用性。 如果您只設定一個 HGS 伺服器 (例如,在開發/測試環境中),可以跳至步驟 3。

和第一部 HGS 電腦一樣,請確定您要加入叢集的電腦執行的是 Windows Server 2019 或更新版本 - Standard 或 Datacenter 版本,您具有本機系統管理員權限,而且電腦尚未加入 Active Directory 網域。

  1. 以本機系統管理員身分登入電腦,並開啟已提升權限的 Windows PowerShell 主控台。 執行下列命令以安裝主機守護者服務角色。 電腦會自動重新開機以套用變更。

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. 檢查電腦上的 DNS 用戶端設定,以確保它可以解析 HGS 網域。 下列命令應該會傳回 HGS 伺服器的 IP 位址。 如果您無法解析 HGS 網域,可能需要更新網路介面卡上的 DNS 伺服器資訊,以使用 HGS DNS 伺服器進行名稱解析。

    # Change 'bastion.local' to the domain name you specified in Step 1.2
    nslookup bastion.local
    
    # If it fails, use sconfig.exe, option 8, to set the first HGS computer as your preferred DNS server.
    
  3. 電腦重新開機之後,請在已提升權限的 Windows PowerShell 主控台中執行下列命令,將電腦加入第一個 HGS 伺服器所建立的 Active Directory 網域。 您需要 AD 網域的網域系統管理員認證,才能執行此命令。 當命令完成時,電腦將會重新開機,而電腦將會成為 HGS 網域的 Active Directory 網域控制站。

    # Provide the fully qualified HGS domain name
    $HGSDomainName = 'bastion.local'
    
    # Provide a domain administrator's credential for the HGS domain
    $DomainAdminCred = Get-Credential
    
    # Specify a Directory Services Restore Mode password that can be used to recover your domain in safe mode.
    # This password is not, and will not change, your admin account password.
    # Save this password somewhere safe and include it in your disaster recovery plan.
    $DSRMPassword = Read-Host -AsSecureString -Prompt "Directory Services Restore Mode Password"
    
    Install-HgsServer -HgsDomainName $HgsDomainName -HgsDomainCredential $DomainAdminCred -SafeModeAdministratorPassword $DSRMPassword -Restart
    
  4. 在電腦重新開機之後,使用網域系統管理員認證登入。 開啓已提升權限的 PowerShell 主控台並執行下列命令,以設定證明服務。 由於證明服務可感知叢集,因此會從其他叢集成員複寫其組態。 對任何 HGS 節點上的證明原則進行的變更將會套用至所有其他節點。

    # Provide the IP address of an existing, initialized HGS server
    # If you are using separate networks for cluster and application traffic, choose an IP address on the cluster network.
    # You can find the IP address of your HGS server by signing in and running "ipconfig /all"
    Initialize-HgsAttestation -HgsServerIPAddress '172.16.10.20'
    
  5. 針對您想要新增至 HGS 叢集的每部電腦重複步驟 2。

步驟 3:設定 HGS 叢集的 DNS 轉寄站

HGS 會執行其自己的 DNS 伺服器,其中包含解析證明服務所需的名稱記錄。 在您設定網路的 DNS 伺服器將要求轉送至 HGS DNS 伺服器之前,您的 SQL Server 電腦將無法解析這些記錄。

設定 DNS 轉寄站的流程是廠商特定的,因此我們建議您連絡網路系統管理員,以取得特定網路的正確指引。

如果您將 Windows Server DNS 伺服器角色用於公司網路,DNS 系統管理員可以建立 HGS 網域的條件式轉寄站,以便只轉送 HGS 網域的要求。 例如,如果 HGS 伺服器使用「bastion.local」網域名稱,且 IP 位址為 172.16.10.20、172.16.10.21 和 172.16.10.22,您可以在公司 DNS 伺服器上執行下列命令來設定條件式轉寄站:

# Tip: make sure to provide every HGS server's IP address
# If you use separate NICs for cluster and application traffic, use the application traffic NIC IP addresses here
Add-DnsServerConditionalForwarderZone -Name 'bastion.local' -ReplicationScope "Forest" -MasterServers "172.16.10.20", "172.16.10.21", "172.16.10.22"

步驟 4:設定證明服務

HGS 支援兩種證明模式:用於密碼編譯驗證每個 SQL Server 電腦的完整性和身分識別的 TPM 證明,以及用於簡單驗證 SQL Server 電腦身分識別的主機金鑰證明。 如果您尚未選取證明模式,請參閱計劃指南中的證明資訊,以取得每個模式之安全性保證和使用案例的詳細資訊。

本節中的步驟會設定特定證明模式的基本證明原則。 您將在步驟 4 中註冊主機特定資訊。 如果您未來需要變更證明模式,請使用所需的證明模式重複步驟 3 和 4。

切換至 TPM 證明

若要在 HGS 上設定 TPM 證明,您需要具有網際網路存取的電腦,以及至少一部具有 TPM 2.0 rev 1.16 晶片的 SQL Server 電腦。

若要將 HGS 設定為使用 TPM 模式,請開啟已提升權限的 PowerShell 主控台,然後執行下列命令:

Set-HgsServer -TrustTpm

當 SQL Server 電腦嘗試證明時,叢集中的所有 HGS 電腦現在都會使用 TPM 模式。

您必須先從 TPM 廠商安裝簽署金鑰 (EK) 根憑證,才能向 HGS 註冊 SQL Server 電腦中的 TPM 資訊。 每個實體 TPM 在出廠時設定了唯一的簽署金鑰,並附有可識別製造商的簽署金鑰憑證。 此憑證可確保您的 TPM 為正版。 當您向 HGS 註冊新的 TPM 時,HGS 會比較憑證鏈結與受信任的根憑證清單,以驗證簽署金鑰憑證。

Microsoft 會發佈已知良好的 TPM 廠商根憑證清單,您可以將其匯入 HGS 受信任的 TPM 根憑證存放區。 如果您的 SQL Server 電腦已虛擬化,則必須連絡雲端服務提供者或虛擬化平台廠商,以了解如何為虛擬 TPM 的簽署金鑰取得憑證鏈結的相關資訊。

若要從 Microsoft 為實體 TPM 下載受信任的 TPM 根憑證套件,請完成下列步驟:

  1. 在具有網際網路存取權的電腦上,從 https://go.microsoft.com/fwlink/?linkid=2097925 下載最新的 TPM 根憑證套件

  2. 確認 cab 檔案的簽章,以確保其真實性。

    # Note: replace the path below with the correct one to the file you downloaded in step 1
    Get-AuthenticodeSignature ".\TrustedTpm.cab"
    

    警告

    如果簽章無效,請連絡 Microsoft 支援服務以尋求協助,請勿繼續進行。

  3. 將 cab 檔案展開至新的目錄。

    mkdir .\TrustedTpmCertificates
    expand.exe -F:* ".\TrustedTpm.cab" ".\TrustedTpmCertificates"
    
  4. 在新目錄中,您會看到每個 TPM 廠商的目錄。 您可以刪除您不使用之廠商的目錄。

  5. 將整個「TrustedTpmCertificates」目錄複製到您的 HGS 伺服器。

  6. 在 HGS 伺服器上開啟已提升權限的 PowerShell 主控台,然後執行下列命令以匯入所有 TPM 根憑證和中繼憑證:

    # Note: replace the path below with the correct location of the TrustedTpmCertificates folder on your HGS computer
    cd "C:\scratch\TrustedTpmCertificates"
    .\setup.cmd
    
  7. 針對每個 HGS 電腦重複步驟 5 和 6。

如果您已從 OEM、雲端服務提供者或虛擬化平台廠商取得中繼和根 CA 憑證,可以直接將憑證匯入至個別的本機電腦憑證存放區:TrustedHgs_RootCATrustedHgs_IntermediateCA。 例如:在 PowerShell 中:

# Imports MyCustomTpmVendor_Root.cer to the local machine's "TrustedHgs_RootCA" store
Import-Certificate -FilePath ".\MyCustomTpmVendor_Root.cer" -CertStoreLocation "Cert:\LocalMachine\TrustedHgs_RootCA"

切換為主機金鑰證明

若要使用主機金鑰證明,請在 HGS 伺服器上已提升權限的 PowerShell 主控台中執行下列命令:

Set-HgsServer -TrustHostKey

當 SQL Server 電腦嘗試證明時,叢集中的所有 HGS 電腦現在都會使用主機金鑰模式。

步驟 5:設定 HGS HTTPS 繫結

在預設安裝中,HGS 只會公開 HTTP (連接埠 80) 繫結。 您可以設定 HTTPS (連接埠 443) 繫結,以加密 SQL Server 電腦與 HGS 之間的所有通訊。 建議 HGS 的所有生產執行個體都使用 HTTPS 繫結。

  1. 使用步驟 1.3 中的完整 HGS 服務名稱作為主體名稱,從憑證授權單位取得 TLS 憑證。 如果您不知道服務名稱,可以在任何 HGS 電腦上執行 Get-HgsServer 來找到它。 如果 SQL Server 電腦使用不同的 DNS 名稱來連線到 HGS 叢集,您可以將替代 DNS 名稱新增至 [主體替代名稱] 清單 (例如,如果 HGS 位於具有不同位址的網路負載平衡器後方)。

  2. 在 HGS 電腦上,使用 Set-HgsServer 來啟用 HTTPS 繫結,並指定在上一個步驟中取得的 TLS 憑證。 如果您的憑證已安裝在本機憑證存放區的電腦上,請使用下列命令向 HGS 註冊該憑證:

    # Note: you'll need to know the thumbprint for your certificate to configure HGS this way
    Set-HgsServer -Http -Https -HttpsCertificateThumbprint "54A043386555EB5118DB367CFE38776F82F4A181"
    

    如果您已將憑證匯出至受密碼保護的 PFX 檔案,請執行下列命令向 HGS 註冊該憑證:

    $PFXPassword = Read-Host -AsSecureString -Prompt "PFX Password"
    Set-HgsServer -Http -Https -HttpsCertificatePath "C:\path\to\hgs_tls.pfx" -HttpsCertificatePassword $PFXPassword
    
  3. 針對叢集中的每個 HGS 電腦重複步驟 1 和 2。 不會在 HGS 節點之間自動復寫 TLS 憑證。 此外,只要主體名稱與 HGS 服務名稱一致,每個 HGS 電腦都可以擁有自己的唯一 TLS 憑證。

步驟 6:判斷並共用 HGS 證明 URL

身為 HGS 系統管理員,您需要與組織中的 SQL Server 電腦管理員和應用程式管理員共用 HGS 的證明 URL。 SQL Server 電腦系統管理員需要證明 URL,才能驗證 SQL Server 電腦可以使用 HGS 進行證明。 應用程式管理員需要證明 URL,才能設定其應用程式連線到 SQL Server 的方式。

若要判斷證明 URL,請執行下列 Cmdlet。

Get-HGSServer

命令的輸出類似如下範例:

Name                           Value                                                                         
----                           -----                                                                         
AttestationOperationMode       HostKey                                                                       
AttestationUrl                 {http://hgs.bastion.local/Attestation}                                        
KeyProtectionUrl               {}         

HGS 的證明 URL 是 AttestationUrl 屬性的值。

下一步