【问题标题】:Azure Resource Manager - Cannot deploy Keyvault with Microsoft App Service in access policyAzure 资源管理器 - 无法在访问策略中使用 Microsoft 应用服务部署 Keyvault
【发布时间】:2019-10-13 09:03:09
【问题描述】:

因此,我正在尝试使用 Azure Devops Pipelines 和 ARM 模板对我的所有 Azure 基础架构进行编码。这很困难,但我可以看到部署在 5 分钟内为我提供 20 个资源的好处,这些资源都很好!

但是,我遇到了一个问题。我想部署一个新的 Keyvault。打勾,轻松!我想存储一个 x509 证书,它是我的 Web 应用程序使用的通配符证书。打勾轻松搞定。现在我想创建一个“Microsoft.Web/Certificates”证书资源,然后我可以使用它来为我的 Web 应用程序创建 SSL 自定义绑定。这失败了:

"The service does not have access to '...microsoft.keyvault/vaults/gs-prd1-kv-apps' Key Vault.

这在此处的示例模板中合理地有详细记录:https://github.com/Azure/azure-quickstart-templates/tree/master/201-web-app-certificate-from-key-vault。事实证明,**Microsoft.Azure.Websites”资源提供者无权访问 Keyvault。要解决此问题,指导是运行 powershell 或 az cli 命令将 RP 添加到我的新 Keyvault

Set-AzureRmKeyVaultAccessPolicy -VaultName KEY_VAULT_NAME -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd -PermissionsToSecrets get

问题是,我需要在 Devops 管道或 ARM 模板中执行此操作,但我完全不知道该怎么做。

我尝试将 az 命令添加到新的构建任务中,但是运行管道的服务原则 ALSO 没有正确的权限来添加它。

有人可以帮忙吗?必须有一种方法可以使用 x509 证书部署 Keyvault 并将此资源分配给 Web 应用程序?

【问题讨论】:

  • 你可以看看这个:Using Az powershell modules with Azure Devops, medium.com/@harioverhere/…
  • 谢谢南希。是的,它确实突出了创建和使用服务主体来启用要创建的资源。但是,我想为我在 ARM 模板本身中创建的 Keyvault 添加一个服务主体的访问策略。我可以看到如何执行此操作,但我需要服务主体的 ObjectId。

标签: azure azure-devops azure-keyvault


【解决方案1】:

我想我会分享我现在解决这个问题的方法。因此,让我们澄清一下我们想要在 ARM 模板中部署的内容:

  • 一个新的 KeyVault (Microsoft.KeyVault/vaults),它有一个 x509 证书作为 pkcs12 格式的机密存储
  • 新的应用服务计划 (Microsoft.Web/serverfarms)
  • 应用服务计划中的新 Web 证书 (Microsoft.Web/certificates ),可用于使用 HTTPS 定义自定义域名。这是已放置在新 KeyVault 中的 x509 证书

除了用于创建应用服务计划的资源提供者没有新 Keyvault 的访问策略并且因此无法提取 x509 证书之外,这一切都可以正常工作。这记录在问题中引用的示例模板中。指导是运行命令为资源提供者添加访问策略。但是,正如我在问题中所述,我们正试图完全在 ARM 模板中完成此操作。

解决方案是在 ARM 模板中为资源提供者定义访问策略。但是,有两个问题:

  1. 我不确定要使用哪个资源提供程序
  2. 我不知道如何获取此资源提供者使用的服务主体的 ObjectId

我从this SO question 那里得到了提示并做了以下事情。

1.创建新的 Keyvault 并将 x509 证书作为机密添加到其中

2。运行 az CLI 命令以获取“Microsoft Azure 应用服务”的服务主体

az ad sp list --display-name "Microsoft Azure App Service"

这显示了服务的许多属性,包括我可以复制以在 ARM 模板中使用的 [objectId]

3.在 ARM 模板中为“Microsoft Azure App Service”服务主体创建 Keyvault 访问策略资源 - 使用上面的 [objectId]。仅授予此主体“获取”机密的权限。

4.为其创建应用服务计划和新的 Web 证书资源


现在,当我运行 Microsoft Azure App Service 主体有权从新 Keyvault 检索 x509 证书并在服务计划中创建 Web 证书资源的模板时。

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2019-01-31
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多