如何在 Azure Stack Hub 上为事件中心轮换机密
本文将演示如何轮换事件中心资源提供程序使用的机密。
概述与先决条件
注意
目前仅支持通过 PowerShell 进行的增值资源提供程序 (RP) 的机密轮换。 此外,你必须定期主动轮换增值 RP 的机密,因为目前不会生成管理警报。
与 Azure Stack Hub 基础结构一样,增值资源提供程序同时使用内部和外部机密。 机密可以采取多种形式,包括密码和通过 X509 证书维护的加密密钥。 作为操作员,你负责:
- 提供更新的外部机密,如用于保护资源提供程序终结点的新 TLS 证书。
- 定期管理资源提供程序机密轮换。
在准备轮换的过程中:
在获取/续订 X509 证书之前,请查看 Azure Stack Hub 公钥基础结构 (PKI) 证书要求以获取重要的先决条件信息,包括有关所需 PFX 格式的详细信息。 还要查看在“可选 PaaS 证书”部分中为你的特定增值资源提供程序指定的要求。
在继续操作之前,请为 Azure Stack Hub 安装 PowerShell Az 模块(如果尚未这样做)。 Azure Stack Hub 机密轮换需要 2.0.2-preview 或更高版本。 有关详细信息,请参阅在 Azure Stack Hub 中从 AzureRM 迁移到 Azure PowerShell Az。
准备新的 TLS 证书
接下来,创建或续订 TLS 证书,以保护增值资源提供程序终结点:
完成为资源提供程序的证书续订生成证书签名请求 (CSR) 中的步骤。 在这里,可使用 Azure Stack Hub 就绪性检查器工具来创建 CSR。 请确保在“为其他 Azure Stack Hub 服务生成证书请求”步骤中为资源提供程序运行正确的 cmdlet。 例如,
New-AzsHubEventHubsCertificateSigningRequest
用于事件中心。 完成后,将生成的 .REQ 文件提交到新证书的证书颁发机构 (CA)。收到来自 CA 的证书文件后,请完成为部署或轮换准备证书中的步骤。 再次使用就绪性检查器工具处理从 CA 返回的文件。
最后,完成验证 Azure Stack Hub PKI 证书中的步骤。 再次使用就绪性检查器工具对新证书执行验证测试。
轮换机密
最后,确定资源提供程序的最新部署属性,并使用它们来完成机密轮换过程。
确定部署属性
资源提供程序会作为已进行版本控制的产品包部署到 Azure Stack Hub 环境。 包会被分配一个唯一的包 ID(格式为 '<product-id>.<installed-version>'
)。 其中 <product-id>
是表示资源提供程序的唯一字符串,<installed-version>
表示特定版本。 与每个包相关联的机密存储在 Azure Stack Hub Key Vault 服务中。
打开提升了权限的 PowerShell 控制台并完成以下步骤,以确定轮换资源提供程序的机密所需的属性:
使用操作员凭据登录到 Azure Stack Hub 环境。 请参阅使用 PowerShell 连接到 Azure Stack Hub 以了解 PowerShell 登录脚本。 请确保使用 PowerShell Az cmdlet(而不是 AzureRM)并替换所有占位符值,例如终结点 URL 和目录租户名称。
运行
Get-AzsProductDeployment
cmdlet 可检索最新资源提供程序部署的列表。 对于每个已部署的资源提供程序,返回的"value"
集合都包含一个对应的元素。 找到相关的资源提供程序,并且记下这些属性的值:"name"
- 在值的第二个段中包含资源提供程序产品 ID。"properties"."deployment"."version"
- 包含当前已部署的版本号。
在下面的示例中,请注意集合中第一个元素的事件中心 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" } }, { ... } ] }
通过连接资源提供程序产品 ID 和版本来生成资源提供程序的包 ID。 例如,使用上一步中派生的值,则事件中心 RP 包 ID 为
microsoft.eventhub.1.2003.0.0
。使用上一步中派生的包 ID,运行
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/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" } }, ... ] }
轮转机密
使用
Set-AzsProductSecret
cmdlet 将新证书导入到 Key Vault,该新证书将由轮换过程使用。 在运行脚本之前,请相应地替换变量占位符值:占位符 说明 示例值 <product-id>
最新资源提供程序部署的产品 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
最后,使用
Invoke-AzsProductRotateSecretsAction
cmdlet 来轮换内部机密和外部机密:注意
完成轮换过程大约需要3.5 到 4 小时。
Invoke-AzsProductRotateSecretsAction -ProductId $productId
可以在 PowerShell 控制台中或在管理员门户中(通过在“市场”服务中选择资源提供程序)监视机密轮换进度:
疑难解答
机密轮换应成功完成,且不发生错误。 如果在管理员门户中遇到以下任何情况,可以提交支持请求获取帮助:
- 身份验证问题,包括连接到事件中心资源提供程序时出现的问题。
- 无法升级资源提供程序或编辑配置参数。
- 未显示使用情况指标。
- 未生成帐单。
- 没有发生备份。
后续步骤
若要详细了解如何轮换 Azure Stack Hub 基础结构机密,请访问在 Azure Stack Hub 中轮换机密。