【问题标题】:ARM KeyVault Access Policies Conditional AddARM KeyVault 访问策略有条件添加
【发布时间】:2020-09-02 13:43:10
【问题描述】:

是否可以通过条件语句添加访问策略?基本上,如果 environment == production 我不想添加注册。

我的模板中有以下内容,但是如果环境是生产环境,我不希望添加名为 foobarApplicationId 的应用程序。我可以内联执行此操作还是需要单独的模板?将foobarApplicationId 设置为空字符串是否有效?

    {
      "name": "[variables('keyVault-name')]",
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2016-10-01",
      "location": "[resourceGroup().location]",
      "properties": {
        "tenantId": "[subscription().tenantId]",
        "sku": {
          "family": "A",
          "name": "standard"
        },
        "accessPolicies": [
          {
            "tenantId": "[subscription().tenantId]",
            "objectId": "[parameters('keyVaultOwner')]",
            "permissions": {
              "keys": [
                "all"
              ],
              "secrets": [
                "all"
              ],
              "certificates": [
                "all"
              ],
              "storage": [
              ]
            }
          },
          {
            "tenantId": "[subscription().tenantId]",
            "objectId": "[parameters('foobarApplicationId')]",
            "permissions": {
              "keys": [
                "get",
                "wrapKey",
                "unwrapKey",
                "sign",
                "verify",
                "list"
              ],
              "secrets": [
                "get",
                "list"
              ],
              "certificates": [
                "get",
                "list"
              ],
              "storage": [
              ]
            }
          },

【问题讨论】:

    标签: azure-keyvault arm-template


    【解决方案1】:

    它将在个人访问策略中添加一个条件部分,该部分将采用如下环境参数:

     {
            "condition": "[not(equals(parameters('environment'),'PROD'))]"
            "tenantId": "[subscription().tenantId]",
            "objectId": "[parameters('foobarApplicationId')]",
            "permissions": {
              "keys": [
                "get",
                "wrapKey",
                "unwrapKey",
                "sign",
                "verify",
                "list"
              ],
              "secrets": [
                "get",
                "list"
              ],
              "certificates": [
                "get",
                "list"
              ],
              "storage": [
              ]
            }
          }
    

    【讨论】:

    • 你想如何添加它?
    • 我将其添加为Microsoft.KeyVault/vaults/accessPolicies。我需要根据环境添加策略。我最终只是有条件地部署了 ARM 模板本身。
    • 这行得通吗?我找不到任何有关在访问策略对象中使用条件键的文档
    • 是的,条件部署是通过 ARM docs.microsoft.com/en-us/azure/azure-resource-manager/templates/… 在任何 azure 资源上的一项功能,如果不满足条件,它将跳过该资源。
    • 但是您在实际访问策略对象 (docs.microsoft.com/en-us/azure/templates/microsoft.keyvault/…) 中拥有“条件”键,而不是资源对象。您提供的链接仅涉及资源。
    【解决方案2】:

    "accessPolicies" 内的"condition" 似乎对我没有任何影响。它不会导致任何验证或部署错误,但即使条件评估为 false,也会添加访问策略。

    我发现以下技巧效果更好:为您的 "objectId""permissions" 使用 if 子句,这样如果条件为假,您将为空 GUID 分配一组空权限,有效地成为无操作。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
    
      "variables": {
        "keyVaultNoPermissions": { },
        "keyVaultAppReadPermissions": {
          "keys": [ "get", "wrapKey", "unwrapKey", "sign", "verify", "list" ],
          "secrets": [ "get", "list" ],
          "certificates": [ "get", "list" ]
        }
      },
    
      "resources": [
        // ...
        {
          "type": "Microsoft.KeyVault/vaults/accessPolicies",
          "apiVersion": "2016-10-01",
          "name": "[concat(parameters('keyVaultName'), '/add')]",
          "location": "[resourceGroup().location]",
          "dependsOn": [
            "[parameters('keyVaultName')]"
          ],
          "properties": {
            "accessPolicies": [
              {
                "tenantId": "[subscription().tenantId]",
                "objectId": "[if(not(equals(parameters('environment'), 'PROD')), parameters('foobarApplicationId'), '00000000-0000-0000-0000-000000000000')]",
                "permissions": "[if(not(equals(parameters('environment'), 'PROD')), variables('keyVaultAppReadPermissions'), variables('keyVaultNoPermissions'))]"
              }
            ]
          }
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2020-04-21
      相关资源
      最近更新 更多