Azure Keyvault通过ARM添加功能MSI

Hof*_*nia 6 azure azure-keyvault azure-managed-identity

我认为托管服务标识是一个伟大的概念,我喜欢keyvault.然而:

当我使用增量资源组部署使用脚本时:

为简洁起见,修改了样本

{
      "type": "Microsoft.KeyVault/vaults",
      "name": "[parameters('keyvaultName')]",
      "apiVersion": "2015-06-01",
      "properties": {            
        "accessPolicies": [
          {
            "objectId": "[reference(parameters('functionAppName'), '2016-08-01', 'Full').identity.principalId]",
            "permissions": {
              "keys": [],
              "secrets": [
                "Get"
              ]
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
      ]
    },
    {
      "apiVersion": "2016-08-01",
      "type": "Microsoft.Web/sites",
      "name": "[parameters('functionAppName')]",
      "kind": "functionapp",
      "identity": {
        "type": "SystemAssigned"
      },
    }
Run Code Online (Sandbox Code Playgroud)

它成功部署并将MSI添加到keyvault,但是 -

它吹走了已经分配的访问策略.arm是否可以保留accessPolicies并仅添加/更新匹配的策略?

如果没有这个,就不可能使用MSI完全编写部署脚本,并将主体分配给keyvault.

我错过了什么吗?

Mat*_*all 5

作为博客文章的作者,我将根据mods发布详细信息:

当您部署名称为“ add”的Microsoft.KeyVault / vaults / accessPolicies类型的资源时,该资源将合并到您的更改中。创建这种特殊的子资源类型是为了允许在托管服务身份方案中,您在部署VM之前不知道VM的身份,并且要在部署过程中向该保管库授予该身份访问权限。

增量部署可以与此json一起使用以实现目标:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "vaultName": {
            "type": "string"
        }
    },
    "resources": [
        {
            "type": "Microsoft.KeyVault/vaults/accessPolicies",
            "name": "[concat(parameters('vaultName'), '/add')]",
            "apiVersion": "2016-10-01",
            "properties": {
                "accessPolicies": [
                    {
                        "tenantId": "dfe47ca8-acfc-4539-9519-7d195a9e79e4",
                        "objectId": "5abe9358-10ae-4195-ba23-d34111430329",
                        "permissions": {
                            "keys": ["all"],
                            "secrets": ["all"],
                            "certificates": ["all"],
                            "storage": ["all"]
                        }
                    }
                ]
            }
        }
    ],
    "outputs": {
    }
}
Run Code Online (Sandbox Code Playgroud)