【问题标题】:Error "The parameter keyVaultCsmId has an invalid value" while adding App Service Certificates to KeyVault将应用服务证书添加到 KeyVault 时出现错误“参数 keyVaultCsmId 的值无效”
【发布时间】:2021-04-23 04:07:13
【问题描述】:

我使用 Azure 的应用服务证书生成了通配符证书。

在此 Azure 要求您在 KeyVault 中配置证书之后,这就是我卡住的地方。

我有一个位于同一区域、同一订阅、同一资源组的 Keyvault。

我拥有密钥保管库的必要权限。我是用户管理员、证书官员、机密官员、密钥保管库的贡献者。

此步骤因错误而失败

Failed to link certificate with the selected Key Vault. Check below errors for more detail.

App Service Certificate 下的 Activity Log 显示:

操作名称:添加或更新证书

状态:失败

总结:

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"
    }

您可以提供的任何有关此或方向的帮助将不胜感激:)

【问题讨论】:

    标签: azure ssl-certificate azure-keyvault


    【解决方案1】:

    Azure AD 中应该有一个服务主体,如果没有,您可以创建它。

    Get-AzADServicePrincipal -DisplayName microsoft.azure.certificateregistration

    您需要通过访问策略或 RBAC 将该权限分配给 keyvault。

    【讨论】:

    • 一旦我授予此服务主体对密钥保管库的访问权限,我就能够配置密钥保管库。谢谢你。你知道这个服务主体是如何创建的吗?是否在创建应用服务证书订单时自动创建?
    • 我相信它是租户中众多开箱即用的提供商拥有的 SP 之一。我曾与其他类似的 SP 合作过,比如 Azure Front Door,注册不在租户中,我必须自己通过 GUID 创建它。我认为这将是相同的。通常,您会在特定的供应商文档中找到此类说明。
    【解决方案2】:

    在 Azure Key Vault 中,支持的证书格式为 PFX 和 PEM。

    • .pem 文件格式包含一个或多个 X509 证书文件。

    • .pfx 文件格式是一种存档文件格式,用于将多个加密对象存储在单个文件中,即服务器证书(为您的域颁发)、匹配的私钥,并且可以选择包含中间 CA。

    应用服务使用的证书首先需要转换为(并标记为)application/x-pkcs12。使用 --password 参数(az keyvault certificate import)从 pfx 文件重新导入证书,然后将其从密钥保管库导入 web 应用程序可能会有所帮助。你可以参考这个博客可能会有所帮助。

    另外,查看 Cert 和 Key Vault 是否在其原始资源组中。

    更多详情:https://docs.microsoft.com/en-us/azure/key-vault/certificates/tutorial-import-certificate

    https://azure.github.io/AppService/2016/05/24/Deploying-Azure-Web-App-Certificate-through-Key-Vault.html

    【讨论】:

    • 所以我使用 Azure 的应用服务证书服务生成了证书 - 在将其链接到 keyvault 时,我没有看到任何设置内容类型/或文件类型的选项。跨度>
    • 编辑我的评论,希望对您有所帮助
    • 您好,谢谢。我尝试选择配置新密钥库的选项并且它有效。所以我不认为格式是个问题... 1. 现有的密钥库正在使用 RBAC 作为预览中的策略。 2.它已打开“选定网络”并允许受信任的 MS 网络.. 3. 它已经有另一个通配符证书作为秘密(不同的名称)在这种情况下,上述任何一个都可能是一个问题......就是这样我猜。
    • 所以看起来这是 KeyVault 中 Azure 基于角色的访问控制(预览版)的错误。一旦我将访问策略切换为使用 Vault 访问策略 - 它就开始工作了。谢谢!!
    • 很高兴听到,请标记答案以关闭主题
    【解决方案3】:

    我在原始问题中没有提到的东西..

    1. 现有的密钥保管库权限模型正在将 RBAC 用于预览 [Azure 基于角色的访问控制(预览)] 中的策略。
    2. 它已打开“选定网络”并允许可信 MS 网络..
    3. 它已经有另一个通配符证书作为秘密(不同的名称)

    我暂时将 Key Vault 权限模型切换为 Vault 访问策略,并尝试了链接 - 它成功了。

    看起来像使用 Azure RBAC 的权限模型存在错误。

    【讨论】:

      【解决方案4】:

      解决问题:

      https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.web/app-service-certificate-standard

      默认情况下,“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 命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-30
        • 2021-11-01
        • 2013-07-09
        • 1970-01-01
        相关资源
        最近更新 更多