錯誤 0xC004F074「無法連結金鑰管理服務 (KMS)」

適用於:✔️ Windows VM

本文討論如何在 azure Microsoft 嘗試啟用 Windows 虛擬機器 (VM) 時所發生的0xC004F074錯誤。

必要條件

徵兆

當您嘗試啟用 Azure Windows VM 時,您會在 Windows 腳本主機中遇到下列錯誤訊息:

錯誤:0xC004F074 軟體授權服務回報計算機無法啟動。 無法連絡金鑰管理服務 (KMS)。 如需其他資訊,請參閱應用程式事件記錄檔。

原因

VM 無法連線到 KMS 服務進行啟用。 如果 Azure KMS 用於啟用(預設選取專案),啟用要求必須源自 Azure 公用 IP 位址。 此連線失敗的可能原因包括:

  • 強制通道,使用 Azure ExpressRoute 或網路虛擬設備,將所有流量路由傳送到 Azure 外部(通常是內部部署環境)

  • 網路虛擬設備或標準內部負載平衡器封鎖的流量

調查

若要判斷問題的特定原因,請遵循下列各節中的三部分程式。

第 1 部分:設定適當的 KMS 用戶端安裝金鑰

注意

在 Azure 虛擬桌面中執行 Windows 10 企業版 多工作階段(也稱為虛擬桌面 Windows 10 企業版)的 VM 不需要此部分。

若要判斷 VM 是否執行多工作階段版本,請執行下列軟體授權管理員腳本命令:

slmgr.vbs /dlv

如果輸出包含 Name: Windows(R), ServerRdsh edition 字串,則 VM 正在執行多工作階段版本,而您可以略過此部分的其餘部分。

注意

如果您部署 Windows 10 企業版 多會話 VM,然後將產品密鑰更新為另一個版本,則無法將 VM 還原為 Windows 10 企業版 多會話。 相反地,您必須重新部署 VM。 如需詳細資訊,請參閱 是否可以將 Windows VM 升級至 Windows 企業版多會話?

針對從自定義映像建立的 VM,您必須為 VM 設定適當的 KMS 用戶端設定金鑰。 執行下列步驟:

  1. 在提升許可權的命令提示字元視窗中,執行下列軟體授權管理員腳本命令:

    cscript c:\windows\system32\slmgr.vbs /dlv
    
  2. Description檢查輸出中的值,以判斷 VM 是從零售(通道)或磁碟區(RETAILVOLUME_KMSCLIENT) 授權媒體建立的。

  3. 如果先前的命令輸出指出 RETAIL 通道,請執行下列軟體授權管理員腳本命令。 第一個命令會設定 所使用 Windows Server 版本的 KMS 用戶端安裝金鑰 ,而第二個命令會強制另一次啟用嘗試。

    cscript c:\windows\system32\slmgr.vbs /ipk <kms-client-setup-key>
    cscript c:\windows\system32\slmgr.vbs /ato
    

    例如,如果您使用 Windows Server 2016 Datacenter,第一個命令會顯示如下:

    cscript c:\windows\system32\slmgr.vbs /ipk CB7KF-BWN84-R7R2Y-793K2-8XDDG
    

第 2 部分:檢查 VM 是否位於標準 SKU 內部負載平衡器後方

請遵循下列步驟來檢查 VM 是否位於預設封鎖輸出因特網流量的標準 SKU 內部負載平衡器後方:

  1. Azure 入口網站中,搜尋並選取 [虛擬機器]

  2. 在虛擬機清單中,選取 VM 的名稱。

  3. 在 VM 的功能表窗格中,找出 [網络] 標題,然後選取 [負載平衡]。 如果您看到一則訊息指出 沒有要顯示的負載平衡資源,則 VM 不在任何負載平衡器後方。 在此情況下,您可以繼續進行第 3 部分:確認 VM 與 Azure KMS 服務之間的連線。

  4. 如果您看到負載平衡器資源,請選取負載平衡器的名稱以移至負載平衡器的 [概觀 ] 頁面。

  5. 在負載平衡器的功能表窗格中,選取 [ 屬性]。

  6. 在 [屬性] 頁面上,找出 SKU負載平衡類型的,然後查看下表以取得結論。

    SKU負載平衡類型的值 結論
    SKU 值為 Standard,負載平衡 類型 值為 Private VM 位於標準 SKU 內部負載平衡器後方,預設會封鎖輸出因特網流量。 若要啟用輸出連線,請參閱 解決方案 2:(針對標準內部負載平衡器)使用 NAT 閘道或標準公用負載平衡器
    SKU 值不是 標準,負載平衡 類型 值為 Public VM 不在標準 SKU 內部負載平衡器後方,且預設不會封鎖輸出因特網流量。 繼續進行第 3 部分:確認 VM 與 Azure KMS 服務之間的連線。

第3部分:確認 VM 與 Azure KMS 服務之間的連線

  1. 確定已將 VM 設定為使用正確的 Azure KMS 伺服器。 若要這樣做,請執行下列軟體授權管理員腳本命令:

    Invoke-Expression "$env:windir\system32\cscript.exe $env:windir\system32\slmgr.vbs /skms azkms.core.windows.net:1688"
    

    此指令應該會傳回下列文字:

    金鑰管理服務機器名稱已成功設定為 azkms.core.windows.net:1688。

  2. 請確定 VM 中的防火牆不會封鎖埠 1688 上 KMS 端點的輸出網路流量。 若要這樣做,請套用下列其中一個選項:

    • 在 PowerShell 中 執行 Test-NetConnection Cmdlet 來檢查連線能力:

      Test-NetConnection azkms.core.windows.net -port 1688
      

      如果允許連線嘗試,Cmdlet 會在輸出文字中顯示 「TcpTestSucceeded: True」。

    • 執行 PsPing 工具來檢查連線能力:

      .\psping.exe azkms.core.windows.net:1688
      

      在命令輸出中,第二行到最後一行應該類似下列文字:

      Sent = 4, Received = 4, Lost = 0 (0% loss)

      如果 Lost 大於 0(零),則 VM 沒有 KMS 伺服器的連線能力。 在此情況下,如果 VM 位於虛擬網路中且已指定自訂 DNS 伺服器,您必須確定 DNS 伺服器可以解析 azkms.core.windows.net 功能變數名稱。 如果無法,請將 DNS 伺服器變更為可以解析 azkms.core.windows.net的 DNS 伺服器。

      注意

      如果您從虛擬網路移除所有 DNS 伺服器,VM 會使用 Azure 的內部 DNS 服務。 此服務可以解析 kms.core.windows.net

  3. 使用 Azure 網路監看員 下一個躍點測試,確認下一個躍點類型是從受影響的 VM 到特定目的地的因特網。 若要套用下一個躍點測試,請遵循下列步驟:

    1. Azure 入口網站中,搜尋並選取 [虛擬機器]

    2. 在虛擬機清單中,選取 VM 的名稱。

    3. 在 VM 的功能表窗格中,找出 [說明 ] 標題,然後選取 [ 連線疑難解答]。

    4. 在 VM 的 [ 連線疑難解答] 頁面上,指定下列域值。

      欄位
      目的地類型 手動指定
      URI、FQDN 或 IP 位址 20.118.99.22440.83.235.53azkms.core.windows.net適用於您區域之適當 KMS 端點的 IP
      目的地連接埠 1688
      來源連接埠 1688
      診斷測試 下一個躍點
    5. 選取 [ 執行診斷測試] 按鈕。

    6. 診斷測試完成之後,請檢閱 按鈕下方顯示的 [結果 ] 方塊。 下一個躍點 (來源) 測試應該具有 [成功] 的 [狀態] 值,而 [詳細數據] 值應包含下一個躍點類型:文字中的 [因特網]。 如果下一個躍點類型為 因特網,請針對其餘每個IP重複下一個躍點測試。 不過,如果下一個躍點類型顯示為 VirtualApplianceVirtualNetworkGateway 或因特網以外的任何專案,則可能會發生下列其中一個案例:

      • 默認路由存在,會在流量傳送至 Azure KMS 端點之前路由傳送 Azure 外部流量。

      • 流量在路徑的某處遭到封鎖。

      在這些案例中,請參閱 解決方案 1:(針對強制通道)使用 Azure 自定義路由將啟用流量路由傳送至 Azure KMS 伺服器

  4. 確認 azkms.core.windows.net 連線成功之後,請在提升許可權的 Windows PowerShell 提示字元中執行下列命令。 這個指令會嘗試啟動 Windows VM 數次:

    1..12 | ForEach-Object {
        Invoke-Expression "$env:windir\system32\cscript.exe $env:windir\system32\slmgr.vbs /ato";
        Start-Sleep 5
    }
    

    如果啟用嘗試成功,命令會顯示類似下列文字的訊息:

    正在啟動 Windows(R)、伺服器資料中心版本 (<kms-client-product-key>) ...已成功啟動產品。

解決方案 1:(針對強制通道)使用 Azure 自定義路由將啟用流量路由傳送至 Azure KMS 伺服器

如果原因是在 Azure 外部路由流量的強制通道案例,請與您的網路管理員合作,以判斷正確的動作過程。 在強制通道案例,Windows 啟用失敗的解決方案一節會說明其中一個可能的解決方案。 如果解決方案與貴組織的原則一致,請套用此解決方案。

解決方案 2:(針對標準內部負載平衡器)使用 NAT 閘道或標準公用負載平衡器

如果標準內部負載平衡器封鎖流量,有兩種不同的方法來修正此問題,如輸出連線使用來源網路位址轉換 (SNAT) 中所述

建議您在生產部署中使用 Azure 虛擬網絡 NAT 組態進行輸出連線。 如需 Azure NAT 閘道的詳細資訊,請參閱什麼是 Azure NAT 閘道?

不過,如果需要封鎖所有因特網流量,請確定您必須在 VM 的子網上使用網路安全組 (NSG) 規則來拒絕輸出因特網存取。 請注意,由於平台內部規則,埠 1688 上 KMS IP 的作業系統啟用流量仍會保持啟用。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。