Azure DevOps - ARM 部署 - Key Vault 和托管身份

Azure DevOps - ARM deployment - Key Vault and Managed Identities

我想弄清楚在 Azure DevOps 中将 Key Vault 集成到 ARM 部署中的最佳方法。

例如,部署应用服务并创建托管服务标识,以便它可以从预先存在的数据库的密钥保管库中获取机密。

1) 在 Azure 门户中,我在访问策略中使用 "Get" 和 "List" 权限为应用服务手动创建了一个新的服务主体。

2) 在项目设置下的My DevOps Project中我创建了一个服务连接。

3) 我在 DevOps 中使用相关的 Key Vault Secrets 创建了一个变量组。

4) 在我的应用服务 ARM 模板中,我参考了变量参数的服务标识。

这是将 Key Vault 与 DevOps 部署集成的正确方法吗?

每当我需要向环境部署新服务时(比如说现在我想部署一个 API),我是否需要在 Azure 中手动创建另一个托管身份以用于 Key Vault 访问或是否存在一种创建它作为 API 服务初始部署的一部分的方法?

提前感谢您的帮助。

如果您使用的是 MSI,建议通过将

  "identity": {
    "type": "SystemAssigned"
  },

正在定义应用服务。这将在每次部署时重新创建 MSI。它将被命名为相同但在每次部署后在 AD 中将具有不同的指纹。对于 Key Vault 来说,这非常好。

在您的 Key Vault ARM 模板中(如果它不在同一个模板中)访问策略可以通过以下方式引用 MSI:

  "tenantID": "[subscription().tenantId]",
        "objectId": "[reference(resourceId('Microsoft.Web/sites', INSERT APP SERVICE NAME), '2018-02-01', 'Full').identity.principalId]",

这将引用应用服务部署创建的 ID。

如果使用它,请确保应用服务配置依赖于 Key Vault 和机密(如果在 ARM 模板中引用机密),访问策略取决于 Key Vault 和应用服务的创建,以及任何机密创建的集合也依赖于 Key Vault,以确保分配以正确的顺序发生。