轮换事件中心机密和证书

已完成

本单元展示如何轮换事件中心资源提供程序使用的机密。

当前仅通过 PowerShell 支持增值资源提供程序的机密轮换。

与 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-preview 或更高版本。 有关详细信息,请参阅在 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 环境。 包会被分配一个唯一的包 ID(格式为 <product-id>.<installed-version>)。 其中 <product-id> 是表示资源提供程序的唯一字符串,<installed-version> 表示特定版本。 与每个包相关联的机密存储在 Azure Stack Hub Key Vault 服务中。

打开提升了权限的 PowerShell 控制台并完成以下步骤,以确定轮换资源提供程序的机密所需的属性:

  1. 使用操作员凭据登录到 Azure Stack Hub 环境。 请确保使用 PowerShell Az cmdlet(而不是 AzureRM)并替换所有占位符值,例如终结点 URL 和目录租户名称。

  2. 运行 Get-AzsProductDeployment cmdlet 可检索最新资源提供程序部署的列表。 对于每个已部署的资源提供程序,返回的 "value" 集合都包含一个对应的元素。 找到相关的资源提供程序,并且记下这些属性的值:

    • "name" - 在值的第二个段中包含资源提供程序产品 ID。
    • "properties"."deployment"."version" - 包含当前已部署的版本号。
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"
                                    }
                  },
                  {
                  ...
                  }
              ]
}

  1. 通过连接资源提供程序产品 ID 和版本来生成资源提供程序的包 ID。 例如,使用上一步中派生的值,则事件中心 RP 包 ID 为 microsoft.eventhub.1.2003.0.0
  2. 使用上一步中派生的包 ID,运行 Get-AzsProductSecret -PackageId 以检索资源提供程序所使用的机密类型的列表。 在返回的 value 集合中,查找包含 "properties"."secretKind" 属性的值 "Certificate" 的元素。 此元素包含 RP 证书密钥的属性。 记下分配给此证书机密的名称,该名称由 "name" 属性的最后一段标识,就在 "properties" 上方。
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,该新证书将由轮换过程使用。 在运行脚本之前,请相应地替换变量占位符值:
$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

  1. 最后,使用 'Invoke-AzsProductRotateSecretsAction` cmdlet 来轮换内部和外部机密:
Invoke-AzsProductRotateSecretsAction -ProductId $productId

可以在 PowerShell 控制台中或在管理员门户中(通过在“市场”服务中选择资源提供程序)监视机密轮换进度:

Image of secret rotation process.