无法计算语言表达式Property'0',在添加密钥存储库访问策略时,属性名称必须是字符串臂模板错误 [英] The language expression property '0' can't be evaluated, property name must be a string - ARM Template error while adding Key Vault access policy

查看:0
本文介绍了无法计算语言表达式Property'0',在添加密钥存储库访问策略时,属性名称必须是字符串臂模板错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在处理一个问题,似乎被卡住了,所以请继续询问,以防有人可以帮助我。

为了描述该问题,我有一个现有的Azure密钥库设置,并希望向此资源组添加多个访问策略。它需要是有条件的,因为如果函数名称是";False";,则不应将该函数添加到密钥保管库访问策略。

变量部分:

 "variables": {
    "functionAccess": {
      "value": [
        {
          "name": "[parameters('Function_1')]"
        },
        {
          "name": "[parameters('Function_2')]"
        },
        {
          "name": "[parameters('Function_3')]"
        }
      ]
    }
  }

我的模板:

{
  "apiVersion": "2016-10-01",
  "condition": "[not(equals(variables('functionAccess')[CopyIndex()].name, 'false'))]",
  "copy": {
    "batchSize": 1,
    "count": "[length(variables('functionAccess'))]",
    "mode": "Serial",
    "name": "accessPolicies"
  },
  "name": "[concat(parameters('KeyVault_Name'), '/add')]",
  "properties": {
    "accessPolicies": [
      {
        "tenantId": "[subscription().tenantId]",
        "objectId": "[if(not(equals(variables('functionAccess')[CopyIndex()].name, 'false')), reference(concat('Microsoft.Web/sites/', variables('functionAccess')[CopyIndex()].name), '2016-08-01', 'Full').identity.principalId, json('null'))]",
        "permissions": {
          "keys": [
            "get",
            "list"
          ],
          "secrets": [
            "get",
            "list"
          ],
          "certificates": [
            "get",
            "list"
          ]
        }
      }
    ]
  },
  "type": "Microsoft.KeyVault/vaults/accessPolicies"
}

当我为Azure密钥库部署ARM模板时,收到以下错误消息:

无法计算语言表达式属性"0",属性名必须为字符串。

下面也尝试了,但相同的错误:

{
  "apiVersion": "2018-02-14",
  "name": "[concat(parameters('KeyVault_Name'), '/add')]",
  "properties": {
    "copy": [
      {
        "batchSize": 1,
        "count": "[length(variables('functionAccess'))]",
        "mode": "serial",
        "name": "accessPolicies",
        "input": {
          "condition": "[not(equals(variables('functionAccess')[copyIndex('accessPolicies')].name, 'false'))]",
          "tenantId": "[subscription().tenantId]",
          "objectId": "[if(not(equals(variables('functionAccess')[copyIndex('accessPolicies')].name, 'false')), reference(concat('Microsoft.Web/sites/', variables('functionAccess')[copyIndex('accessPolicies')].name), '2016-08-01', 'Full').identity.principalId, json('null'))]",
          "permissions": {
            "keys": [
              "get",
              "list"
            ],
            "secrets": [
              "get",
              "list"
            ],
            "certificates": [
              "get",
              "list"
            ]
          }
        }
      }
    ]
  },
  "type": "Microsoft.KeyVault/vaults/accessPolicies"
}

推荐答案

有几个选项可用于筛选copy操作的数组。我从PowerShell脚本部署ARM模板,并使用PowerShell设置参数值。当我需要特殊的逻辑来处理不同环境的不同输入时,我会让PowerShell来处理。

如果您必须在ARM中处理过滤,并且您可以选择输入CSV函数列表,则以下方法可能会起作用。然后可以使用functionAccessArraycopy操作中迭代。

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {

  },
  "variables": {
    "functionAccessCsv": "Function-0,Function-1,false,Function-4,false,Function-6,Function-7",
    "functionAccessFiltered": "[replace(replace(variables('functionAccessCsv'), 'false', ''), ',,', ',')]",
    "functionAccessArray": "[split(variables('functionAccessFiltered'), ',')]"
  },
  "resources": [
  ],
  "outputs": {
    "functionAccessCsvFiltered": {
      "type": "string",
      "value": "[variables('functionAccessFiltered')]"
    },
    "functionAccessArray": {
      "type": "array",
      "value": "[variables('functionAccessArray')]"
    }
  }
}

结果:

这篇关于无法计算语言表达式Property'0',在添加密钥存储库访问策略时,属性名称必须是字符串臂模板错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆