共用方式為


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

本文將說明如何輪替事件中心資源供應者所使用的密鑰。

概觀和必要條件

注意

加值資源提供者的秘密輪替目前僅透過PowerShell支援。 此外,您必須定期主動更換加值 RP 的機密資料,因為系統管理警示目前尚未產生。

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

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

準備輪替程序:

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

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

準備新的 TLS 憑證

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

  1. 完成為資源提供者進行憑證更新的憑證簽署要求 (CSR) 的步驟 生成。 在這裡,您會使用 Azure Stack Hub 整備檢查程式工具來建立 CSR。 請務必為資源提供者執行正確的 Cmdlet,在「產生其他 Azure Stack Hub 服務的憑證要求」步驟中。 例如,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" - 包含目前部署的版本號碼。

    在以下範例中,請注意集合中第一個元素的 Event Hubs RP 部署,其產品 ID 為 "microsoft.eventhub",版本為 "1.2003.0.0"

    PS C:\WINDOWS\system32> Get-AzsProductDeployment -AsJson
    VERBOSE: GET https://adminmanagement.myregion.mycompany.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Deployment.Admin/locations/global/productDeployments/microsoft.eventhub",
                          "name":  "global/microsoft.eventhub",
                          "type":  "Microsoft.Deployment.Admin/locations/productDeployments",
                          "properties":  {
                                             "status":  "DeploymentSucceeded",
                                             "subscriptionId":  "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
                                             "deployment":  {
                                                                "version":  "1.2003.0.0",
                                                                "actionPlanInstanceResourceId":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Deployment.Admin/locations/global/actionplans/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
                                                                "parameters":  {
    
                                                                               }
                                                            },
                                             "lastSuccessfulDeployment":  {
                                                                              "version":  "1.2003.0.0",
                                                                              "actionPlanInstanceResourceId":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Deployment.Admin/locations/global/actionplans/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
                                                                              "parameters":  {
    
                                                                                             }
                                                                          },
                                             "provisioningState":  "Succeeded"
                                         }
                      },
                      {
                      ...
                      }
                  ]
    }
    
  3. 串連資源提供者產品標識碼和版本,以建置資源提供者的套件識別碼。 例如,使用上一個步驟中衍生的值,事件中樞 RP 套件的識別碼為 microsoft.eventhub.1.2003.0.0

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

    在下列範例中,從 Event Hubs 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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
    

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

    秘密輪替進度

故障排除

秘密輪替應該順利完成,而不會發生錯誤。 如果您在系統管理員入口網站中遇到下列任一條件,開啟支援要求 以取得協助:

  • 驗證問題,包括在連接到事件中樞資源提供者時出現的問題。
  • 無法升級資源提供者,或編輯組態參數。
  • 未顯示使用量計量。
  • 不會產生帳單。
  • 備份不會發生。

後續步驟

如需輪替 Azure Stack Hub 基礎結構秘密的詳細資訊,請流覽 輪替 Azure Stack Hub 中的秘密