我已使用 Azure 的应用服务证书生成了通配符证书。
在此之后,Azure 要求您在 KeyVault 中配置证书,这就是我陷入困境的地方。
我有一个位于同一区域、同一订阅、同一资源组的 Keyvault。
我拥有密钥保管库的必要权限。我是用户管理员、证书官员、机密官员、密钥库贡献者。
此步骤因错误而失败
Failed to link certificate with the selected Key Vault. Check below errors for more detail.
应用程序服务证书下的活动日志显示:
操作名称:添加或更新证书
状态:失败
总结:
Operation name : Add or Update Certificate
Time stamp : Tue Jan 19 2021 07:10:46 GMT+1100 (Australian Eastern Daylight Time)
Event initiated by: xxxx
Error code: BadRequest
Message : The parameter keyVaultCsmId has an invalid value.
JSON 具有以下重要信息:
"authorization": {
"action": "Microsoft.CertificateRegistration/certificateOrders/certificates/write",
"scope": "/subscriptions/xxx/resourceGroups/yyyyyyy/providers/Microsoft.CertificateRegistration/certificateOrders/InternalWildCard/certificates/InternalWildCard"
}
"properties": {
"statusCode": "BadRequest",
"serviceRequestId": null,
"statusMessage": "{\"Code\":\"BadRequest\",\"Message\":\"The parameter keyVaultCsmId has an invalid value.\",\"Target\":null,\"Details\":[{\"Message\":\"The parameter keyVaultCsmId has an invalid value.\"},{\"Code\":\"BadRequest\"},{\"ErrorEntity\":{\"ExtendedCode\":\"51008\",\"MessageTemplate\":\"The parameter {0} has an invalid value.\",\"Parameters\":[\"keyVaultCsmId\"],\"Code\":\"BadRequest\",\"Message\":\"The parameter keyVaultCsmId has an invalid value.\"}}],\"Innererror\":null}",
"eventCategory": "Administrative",
"entity": "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.CertificateRegistration/certificateOrders/InternalWildCard/certificates/InternalWildCard",
"message": "Microsoft.CertificateRegistration/certificateOrders/certificates/write",
"hierarchy": "xxxx"
}
您能提供的任何帮助或方向将不胜感激:)
我在原来的问题中没有提到的东西..
我暂时将 Key Vault 权限模型切换为 Vault 访问策略,并尝试链接 - 并且它有效。
看起来像是使用 Azure RBAC 的权限模型的错误。
Azure AD 中应该有一个服务主体,如果没有,您可以创建它。
获取-AzADServicePrincipal -DisplayName microsoft.azure.certificateregistration
您需要通过访问策略或 RBAC 将该权限分配给 keyvault。
在 Azure Key Vault 中,支持的证书格式为 PFX 和 PEM。
• .pem 文件格式包含一个或多个 X509 证书文件。
• .pfx 文件格式是一种存档文件格式,用于在单个文件中存储多个加密对象,即服务器证书(为您的域颁发)、匹配的私钥,并且可以选择包含中间 CA。
App Service 使用的证书首先需要转换为(并标记为)application/x-pkcs12。使用 --password 参数(az keyvault 证书导入)从 pfx 文件重新导入证书,然后将其从 Key Vault 导入到 Web 应用程序可能会有所帮助。您可以参考这个博客可能会有所帮助。
此外,查看 Cert 和 Key Vault 是否位于其原始资源组中。
其他详细信息:https://learn.microsoft.com/en-us/azure/key-vault/certificates/tutorial-import-certificate
在与它斗争了几个小时之后,这就是我所做的工作:
打开 PowerShell。
1. 获取{AppID}
获取-AzADServicePrincipal -DisplayName microsoft.azure.certificateregistration
2. New-AzRolAssignment -RoleDefinitionName“Key Vault 机密官员”-ApplicationId {AppID}
与应用服务证书不兼容。
与应用服务证书兼容。
您需要将访问模型更改为“访问策略”,或者(如果您无权更改访问模型)使用访问策略创建新的 Key Vault。
解决问题:
默认情况下,“Microsoft.CertificateRegistration”和“Microsoft.Web”RP 无权访问模板中指定的 Key Vault,因此您需要在部署模板之前通过执行以下 PowerShell 命令来授权这些 RP:
Login-AzureRmAccount
Set-AzureRmContext -SubscriptionId AZURE_SUBSCRIPTION_ID
Set-AzureRmKeyVaultAccessPolicy -VaultName KEY_VAULT_NAME -ServicePrincipalName f3c21649-0979-4721-ac85-b0216b2cf413 -PermissionsToSecrets get,set,delete
Set-AzureRmKeyVaultAccessPolicy -VaultName KEY_VAULT_NAME -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd -PermissionsToSecrets get
ServicePrincipalName 参数代表用户租户中的这些 RP,并且对于所有 Azure 订阅都保持不变。这是一次性操作。正确配置 Key Vault 后,您可以使用它来存储任意数量的应用服务证书,而无需再次执行这些 PowerShell 命令。