如何在 Azure Stack Hub 上輪替事件中樞的祕密

本文將說明如何輪替事件中樞資源提供者所使用的祕密。

概觀和必要條件

注意

目前僅透過 PowerShell 支援增值資源提供者 (RP) 的祕密輪替。 此外,您必須定期主動輪替增值 RP 的祕密,因為目前不會產生系統管理警示。

如同 Azure Stack Hub 基礎結構,增值資源提供者也會使用內部和外部祕密。 祕密可採用多種形式,包括由 X509 憑證維護的密碼和加密金鑰。 身為操作員,您必須負責:

  • 提供更新的外部祕密,例如用來保護資源提供者端點的新 TLS 憑證。
  • 定期管理資源提供者祕密輪替。

針對輪替程序進行準備:

  1. 在取得/更新 X509 憑證之前 (包括所需 PFX 格式的詳細資料),請先檢閱 Azure Stack Hub 公開金鑰基礎結構 (PKI) 憑證需求,以了解重要的先決條件資訊。 另請針對您特定的增值資源提供者,檢閱選擇性 PaaS 憑證一節中指定的需求。

  2. 如果您還沒有這麼做,請先安裝適用於 Azure Stack Hub 的 PowerShell Az 模組,再繼續進行。 Azure Stack Hub 祕密輪替需要版本 2.0.2 預覽或更新版本。 如需詳細資訊,請參閱在 Azure Stack Hub 中從 AzureRM 移轉至 Azure PowerShell Az

準備新的 TLS 憑證

接下來,建立或更新 TLS 憑證,以保護增值資源提供者端點:

  1. 針對您的資源提供者,完成產生憑證簽署要求 (CSR) 以更新憑證中的步驟。 您可以在這裡使用 Azure Stack Hub 整備檢查工具來建立 CSR。 請務必在「產生其他 Azure Stack Hub 服務的憑證要求」步驟中,為資源提供者執行正確的 Cmdlet。 例如,將 New-AzsHubEventHubsCertificateSigningRequest 用於事件中樞。 完成時,您會將產生的 .REQ 檔案提交給憑證授權單位 (CA),以取得新的憑證。

  2. 從 CA 收到憑證檔案之後,請完成準備憑證以進行部署或輪替中的步驟。 您可以再次使用整備檢查工具來處理從 CA 傳回的檔案。

  3. 最後,完成驗證 Azure Stack Hub PKI 憑證中的步驟。 您可以再次使用整備檢查工具,在新的憑證上執行驗證測試。

旋轉祕密

最後,判斷資源提供者的最新部署屬性,並使用這些屬性來完成祕密輪替程序。

判斷部署屬性

資源提供者會部署到 Azure Stack Hub 環境中,作為已建立版本的產品套件。 系統會以格式 '<product-id>.<installed-version>' 將唯一的套件識別碼指派給套件。 其中 <product-id> 是代表資源提供者的唯一字串,而 <installed-version> 代表特定版本。 與每個套件建立關聯的祕密會儲存在 Azure Stack Hub Key Vault 服務中。

開啟已提升權限的 PowerShell 主控台並完成下列步驟,以判斷輪替資源提供者祕密所需的屬性:

  1. 使用操作員認證登入 Azure Stack Hub 環境。 如需 PowerShell 登入指令碼,請參閱使用 PowerShell 連線到 Azure Stack Hub。 請務必使用 PowerShell Az Cmdlet (而不是 AzureRM),並取代所有的預留位置值,例如端點 URL 和目錄租用戶名稱。

  2. 執行 Get-AzsProductDeployment Cmdlet 以擷取最新的資源提供者部署清單。 傳回的 "value" 集合包含每個已部署資源提供者的元素。 尋找感興趣的資源提供者,並記下這些屬性的值:

    • "name" - 在值的第二個區段中包含資源提供者產品識別碼。
    • "properties"."deployment"."version" - 包含目前部署的版本號碼。

    在下列範例中,請注意集合中第一個元素的事件中樞 RP 部署,其產品識別碼為 "microsoft.eventhub"、版本為 "1.2003.0.0"

    PS C:\WINDOWS\system32> Get-AzsProductDeployment -AsJson
    VERBOSE: GET https://adminmanagement.myregion.mycompany.com/subscriptions/ze22ca96-z546-zbc6-z566-z35f68799816/providers/Microsoft.Deployment.Admin/locations/global/productDeployments?api-version=2019-01-01 with 0-char payload
    VERBOSE: Received 2656-char response, StatusCode = OK
    {
        "value":  [
                      {
                          "id":  "/subscriptions/ze22ca96-z546-zbc6-z566-z35f68799816/providers/Microsoft.Deployment.Admin/locations/global/productDeployments/microsoft.eventhub",
                          "name":  "global/microsoft.eventhub",
                          "type":  "Microsoft.Deployment.Admin/locations/productDeployments",
                          "properties":  {
                                             "status":  "DeploymentSucceeded",
                                             "subscriptionId":  "b37ae55a-a6c6-4474-ba97-81519412adf5",
                                             "deployment":  {
                                                                "version":  "1.2003.0.0",
                                                                "actionPlanInstanceResourceId":"/subscriptions/ze22ca96-z546-zbc6-z566-z35f68799816/providers/Microsoft.Deployment.Admin/locations/global/actionplans/abcdfcd3-fef0-z1a3-z85d-z6ceb0f31e36",
                                                                "parameters":  {
    
                                                                               }
                                                            },
                                             "lastSuccessfulDeployment":  {
                                                                              "version":  "1.2003.0.0",
                                                                              "actionPlanInstanceResourceId":"/subscriptions/ze22ca96-z546-zbc6-z566-z35f68799816/providers/Microsoft.Deployment.Admin/locations/global/actionplans/abcdfcd3-fef0-z1a3-z85d-z6ceb0f31e36",
                                                                              "parameters":  {
    
                                                                                             }
                                                                          },
                                             "provisioningState":  "Succeeded"
                                         }
                      },
                      {
                      ...
                      }
                  ]
    }
    
  3. 藉由串連資源提供者的產品識別碼和版本來建立資源提供者的套件識別碼。 例如,使用上一個步驟中的衍生值時,事件中樞 RP 套件識別碼為 microsoft.eventhub.1.2003.0.0

  4. 使用上一個步驟中的衍生套件識別碼,執行 Get-AzsProductSecret -PackageId 以擷取資源提供者所使用的祕密類型清單。 在傳回 value 的集合中,尋找包含 "properties"."secretKind" 屬性 "Certificate" 值的元素。 此元素包含 RP 憑證祕密的屬性。 請記下指派給這個憑證祕密的名稱,此名稱是由 "name" 屬性的最後一個區段識別,就在 "properties" 上方。

    在下列範例中,針對事件中樞 RP 所傳回祕密集合包含名為 aseh-ssl-gateway-pfx"Certificate" 祕密。

    PS C:\WINDOWS\system32> Get-AzsProductSecret -PackageId 'microsoft.eventhub.1.2003.0.0' -AsJson
    VERBOSE: GET
    https://adminmanagement.myregion.mycompany.com/subscriptions/ze22ca96-z546-zbc6-z566-z35f68799816/providers/Microsoft.Deployment.Admin/locations/global/productPackages/microsoft.eventhub.1.2003.0.0/secrets?api-version=2019-01-01 with 0-char payload
    VERBOSE: Received 617-char response, StatusCode = OK
    {
        "value":  [
                        {
                            "id":  "/subscriptions/ze22ca96-z546-zbc6-z566-z35f68799816/providers/Microsoft.Deployment.Admin/locations/global/productPackages/microsoft.eventhub.1.2003.0.0/secrets/aseh-ssl-gateway-pfx",
                            "name":  "global/microsoft.eventhub.1.2003.0.0/aseh-ssl-gateway-pfx",
                            "type":  "Microsoft.Deployment.Admin/locations/productPackages/secrets",
                            "properties":  {
                                            "secretKind":  "Certificate",
                                            "description":  "Event Hubs gateway SSL certificate.",
                                            "expiresAfter":  "P730D",
                                            "secretDescriptor":  {
    
                                                                    },
                                            "secretState":  {
                                                                "status":  "Deployed",
                                                                "rotationStatus":  "None",
                                                                "expirationDate":  "2022-03-31T00:16:05.3068718Z"
                                                            },
                                            "provisioningState":  "Succeeded"
                                        }
                        },
                        ...
                    ]
    }
    

輪替祕密

  1. 使用 Set-AzsProductSecret Cmdlet 將新憑證匯入至輪替程序所要使用的 Key Vault。 執行指令碼之前,請先取代變數預留位置值:

    預留位置 描述 範例值
    <product-id> 最新資源提供者部署的產品識別碼。 microsoft.eventhub
    <installed-version> 最新資源提供者部署的版本。 1.2003.0.0
    <cert-secret-name> 用來儲存憑證祕密的名稱。 aseh-ssl-gateway-pfx
    <cert-pfx-file-path> 憑證 PFX 檔案的路徑。 C:\dir\eh-cert-file.pfx
    <pfx-password> 指派給憑證 .PFX 檔案的密碼。 strong@CertSecret6
    $productId = '<product-id>'
    $packageId = $productId + '.' + '<installed-version>'
    $certSecretName = '<cert-secret-name>' 
    $pfxFilePath = '<cert-pfx-file-path>'
    $pfxPassword = ConvertTo-SecureString '<pfx-password>' -AsPlainText -Force   
    Set-AzsProductSecret -PackageId $packageId -SecretName $certSecretName -PfxFileName $pfxFilePath -PfxPassword $pfxPassword -Force
    
  2. 最後,使用 Invoke-AzsProductRotateSecretsAction Cmdlet 來輪替內部和外部祕密:

    注意

    完成輪替程序需要大約 3.5-4 小時。

    Invoke-AzsProductRotateSecretsAction -ProductId $productId
    

    您可以在 Marketplace 服務中選取資源提供者,以在 PowerShell 主控台或管理員入口網站中監視祕密輪替進度:

    secret-rotation-progress

疑難排解

祕密輪替應該會順利完成,且不會發生錯誤。 如果您在管理員入口網站中遇到下列任何狀況,請開立支援要求以取得協助:

  • 驗證問題,包括連線到事件中樞資源提供者的問題。
  • 無法升級資源提供者,或編輯設定參數。
  • 使用計量未顯示。
  • 未產生帳單。
  • 備份未發生。

下一步

如需輪替 Azure Stack Hub 基礎結構祕密的詳細資料,請瀏覽在 Azure Stack Hub 中輪替使用祕密