azure - 如何在ARM模板中添加多个访问策略

标签 azure azure-keyvault azure-rm-template

我正在尝试有条件地将访问策略添加到 Key Vault,问题是模板中不能有超过 1 个名称为 KeyVault/accessPolicies/add 的资源

这实际上是我想要实现的目标:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "vaultName": {
            "type": "string"
        }
    },
    "resources": [
        {
            "condition": "[parameters('someCondition')]",
            "type": "Microsoft.KeyVault/vaults/accessPolicies",
            "name": "[concat(parameters('vaultName'), '/add')]",
            "apiVersion": "2016-10-01",
            "properties": {
                "accessPolicies": [
                    {
                        "tenantId": "[if(parameters('someCondition'), reference(variables('someAppServiceResourceId'), '2015-08-31-PREVIEW').tenantId, json('null'))]",
                        "objectId": "[if(parameters('someCondition'), reference(variables('someAppServiceResourceId'), '2015-08-31-PREVIEW').principalId, json('null'))]",
                        "permissions": {
                            "keys": ["all"],
                            "secrets": ["all"],
                            "certificates": ["all"],
                            "storage": ["all"]
                        }
                    }
                ]
            }
        },
        {
            "condition": "[parameters('otherCondition')]",
            "type": "Microsoft.KeyVault/vaults/accessPolicies",
            "name": "[concat(parameters('vaultName'), '/add')]",
            "apiVersion": "2016-10-01",
            "properties": {
                "accessPolicies": [
                    {
                        "tenantId": "[if(parameters('otherCondition'), reference(variables('someOTHERAppServiceResourceId'), '2015-08-31-PREVIEW').tenantId, json('null'))]",
                        "objectId": "[if(parameters('otherCondition'), reference(variables('someOTHERAppServiceResourceId'), '2015-08-31-PREVIEW').principalId, json('null'))]",
                        "permissions": {
                            "keys": ["all"],
                            "secrets": ["all"],
                            "certificates": ["all"],
                            "storage": ["all"]
                        }
                    }
                ]
            }
        }
    ],
    "outputs": {
    }
}

但是,在此部署中我只能拥有一个名为“KeyVaultName/add”的资源。

我想我可以有条件地在变量中构建访问策略数组并进行一些数组串联,但它不起作用,因为我在访问策略中使用引用()函数来获取租户和主体 ID .

最佳答案

为什么你认为这行不通?

"properties": {
    "copy": [
        {
            "name": "accessPolicies",
            "count": "[xxx]",
            "input": {
                "tenantId": "[if(parameters('otherCondition'), reference(variables('someOTHERAppServiceResourceId'), '2015-08-31-PREVIEW').tenantId, json('null'))]",
                "objectId": "[if(parameters('otherCondition'), reference(variables('someOTHERAppServiceResourceId'), '2015-08-31-PREVIEW').principalId, json('null'))]",
                "permissions": {
                    "keys": ["all"],
                    "secrets": ["all"],
                    "certificates": ["all"],
                    "storage": ["all"]
                }
            }
        }
    ]
}

关于azure - 如何在ARM模板中添加多个访问策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61338977/

相关文章:

Azure DevOps -> 管道 -> 库 -> 访问 Azure Key Vault -> Key Vault 不允许从所有网络访问

azure - 来自 Azure Key Vault 的引用 secret

azure - 如何在ARM模板中多次运行相同的脚本?

azure - 通过ARM模板重新部署资源时如何保留现有标签?

Azure 搜索 - 上传与合并或上传之间的区别

c# - 如何在 lambda 表达式中定义为 LINQ Select 方法中的另一个函数

Azure管道-terratest-错误: Please run 'az login' to setup account

azure - 通过 ARM 模板将 Key Vault 引用用于应用服务

c# - 通过 C# 访问 Azure 中的 keyvault 时引发异常

azure - ARM 模板应用程序服务配置 - 竞争条件/行为不一致