轮换事件中心机密和证书
本单元展示如何轮换事件中心资源提供程序使用的机密。
当前仅通过 PowerShell 支持增值资源提供程序的机密轮换。
与 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 Az cmdlet(而不是 AzureRM)并替换所有占位符值,例如终结点 URL 和目录租户名称。
运行
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"
}
},
{
...
}
]
}
- 通过连接资源提供程序产品 ID 和版本来生成资源提供程序的包 ID。 例如,使用上一步中派生的值,则事件中心 RP 包 ID 为
microsoft.eventhub.1.2003.0.0
。 - 使用上一步中派生的包 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"
}
},
...
]
}
轮转机密
- 使用
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
- 最后,使用 'Invoke-AzsProductRotateSecretsAction` cmdlet 来轮换内部和外部机密:
Invoke-AzsProductRotateSecretsAction -ProductId $productId
可以在 PowerShell 控制台中或在管理员门户中(通过在“市场”服务中选择资源提供程序)监视机密轮换进度: