首页 > 解决方案 > Azure ARM 模板密钥库资源不断删除其他访问策略

问题描述

我创建了一个 ARM 模板来部署一个 Azure WebApp,它使用托管服务身份验证和 KeyVault 来获取机密。因此 ARM 模板创建 WebApp 资源并启用 MSI,还创建 KeyVault 资源并将 WebApp 租户 ID 和 objectid 添加到 accessPolicies,但是,ARM 模板还会从我的 Keyvault 中删除所有其他现有访问策略。

有没有办法对访问策略进行增量部署,这样我就不必在部署后将用户添加回 KeyVault 访问策略?

{
  "type": "Microsoft.KeyVault/vaults",
  "name": "[parameters('ICMODSKeyVaultName')]",
  "apiVersion": "2016-10-01",
  "location": "[resourceGroup().location]",
  "properties": {
    "sku": {
      "family": "A",
      "name": "standard"
    },
    "tenantId": "[reference(variables('identityResourceId'), '2015-08-31-PREVIEW').tenantId]",
    "accessPolicies": [
      {
        "tenantId": "[reference(variables('identityResourceId'), '2015-08-31-PREVIEW').tenantId]",
        "objectId": "[reference(variables('identityResourceId'), '2015-08-31-PREVIEW').principalId]",
        "permissions": {
          "secrets": [
            "get"
          ]
        }
      }
    ],
    "enabledForDeployment": true,
    "enabledForTemplateDeployment":  true
  },
  "dependsOn": [
    "[concat('Microsoft.Web/sites/', parameters('AppName'))]"
  ]
}

标签: azuredeploymentazure-keyvault

解决方案


这是您应该得到的行为,因为 ARM 模板是幂等的。如果您将访问策略创建为单独的资源,您将能够更改此行为:

{
  "name": "vaultName/policyName",
  "location": xxx,
  "api-version": "2016-10-01",
  "type": "Microsoft.KeyVault/vaults/accessPolicies",
  "properties": {
    "accessPolicies": [
      {
        "tenantId": "00000000-0000-0000-0000-000000000000",
        "objectId": "00000000-0000-0000-0000-000000000000",
        "permissions": {
          "keys": [
            "encrypt"
          ],
          "secrets": [
            "get"
          ],
          "certificates": [
            "get"
          ]
        }
      }
    ]
  }
}

请记住,这是一个粗略的草图,它可能不起作用,但你可以很容易地让它工作。这是为了说明这个想法。

参考:https ://docs.microsoft.com/en-us/rest/api/keyvault/vaults/updateaccesspolicy


推荐阅读