错误:“无法评估数组值上的命名属性或非整数索引“id”。”

问题描述 投票:0回答:1

我是二头肌新手,正在尝试部署具有访问策略的 keyvault。在我的场景中,像 dev 和 load 这样的环境可以具有通用的访问策略,但 prod 应该具有特定于区域的访问策略。

下面是kv模块内访问策略代码的代码-

kv-vault.bicep

param objectIds object

resource KeyVault 'Microsoft.KeyVault/vaults@2019-09-01' = {
  name: KeyVaultName
  location: location
  properties: {
    tenantId: 'abcdxyz'
    accessPolicies: [for objectId in items(objectIds): {
        objectId: objectId.value.id
        tenantId: 'abcdxyz'
        permissions: {
          keys:objectId.value.key
          secrets: objectId.value.secret
          certificates:objectId.value.certificate
        }
      }]
   }
}

下面是我在 main.bicep 文件中调用 kv 模块的方式

主要.二头肌

var objectid = isAME ? (isLOAD || isDEV || isQA ? common.objectIds 
               : common.objectIds.us) 
               : isEMA ? (isLOAD || isDEV || isQA ? common.objectIds 
               : common.objectIds.ema) 
               :  (isLOAD || isDEV || isQA ? common.objectIds 
               : common.objectIds.apa) 

module KeyVault './modules/key-vault.bicep' = {
  name: 'keyvaultdeployment-${uniqueName}'
  scope: resourceGroup(resourceGroupName)
  params: {
    objectIds: objectid
    KeyVaultName: KeyVaultName
    location: rg.outputs.location
  dependsOn: [
    vnet
    rg
  ]
}

我有一个公共文件,所有对象 ID 都在其中传递。

commom.json

  "objectIds":{
    "us": {
      "id": "abcd-1234",
      "key": ["all"],
      "secret": ["all"],
      "certificate": ["all"]
    },
    "apa": {
      "id": "abcd-4567",
      "key": ["all"],
      "secret": ["all"],
      "certificate": ["all"]
    },
    "ema": {
      "id": "abcd-7890",
      "key": ["all"],
      "secret": ["all"],
      "certificate": ["all"]
    }
}

因此,当我尝试在 EMA 的产品中部署时,它应该只从 common.jason 文件中获取“ema”。但我收到一个错误 - “无法评估数组值上的命名属性或非整数索引“id”。”

请帮帮我。如果您需要有关现有代码的更多信息,请告诉我。预先感谢。

我尝试了所有基本的故障排除方法并浏览了 Microsoft 文档,但没有帮助我解决问题。

azure azure-keyvault azure-bicep
1个回答
0
投票

当您调用 EMA 中的

key-vault.bicep
模块时,传入的值将是:

[
    {
        "key": "apa",
        "value": {
            "id": "abcd-4567",
            "key": [
                "all"
            ],
            "secret": [
                "all"
            ],
            "certificate": [
                "all"
            ]
        }
    },
    {
        "key": "ema",
        "value": {
            "id": "abcd-7890",
            "key": [
                "all"
            ],
            "secret": [
                "all"
            ],
            "certificate": [
                "all"
            ]
        }
    },
    {
        "key": "us",
        "value": {
            "id": "abcd-1234",
            "key": [
                "all"
            ],
            "secret": [
                "all"
            ],
            "certificate": [
                "all"
            ]
        }
    }
]

[
    {
        "key": "certificate",
        "value": [
            "all"
        ]
    },
    {
        "key": "id",
        "value": "abcd-7890"
    },
    {
        "key": "key",
        "value": [
            "all"
        ]
    },
    {
        "key": "secret",
        "value": [
            "all"
        ]
    }
]

如果是后者,

key-vault.bicep
模板将尝试在循环的第一次迭代中取消引用
.id
["all"]
属性。数组没有 ID 属性,这会导致您看到错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.