无法从ARM模板中的存储资源获取Azure存储密钥

无法从ARM模板中的存储资源获取Azure存储密钥,azure,azure-storage,azure-resource-manager,azure-storage-account,arm-template,Azure,Azure Storage,Azure Resource Manager,Azure Storage Account,Arm Template,我正在尝试从模板中其他地方使用的存储帐户构建连接字符串,我已经 "StorageConnectionString": { "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageName'),';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variable

我正在尝试从模板中其他地方使用的存储帐户构建连接字符串,我已经

"StorageConnectionString": {
               "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',
 variables('storageName'),';AccountKey=',
 listKeys(resourceId('Microsoft.Storage/storageAccounts',
 variables('storageName')), providers('Microsoft.Storage',
 'storageAccounts').apiVersions[0]).key1)]",
              "type": "Custom"
             },
但我从中发现,这个问题的语法似乎不再有效。我得到一个错误,
key1
不是已知的属性。显然有一个属性叫做
keys
,但正如人们所料,这是某种结构。我无法从该结构中找出主键的属性。我试过了

  • key1->模板语言表达式属性“key1”不存在,可用属性为“keys”
  • 键->为模板语言函数“concat”提供的参数无效。所有或任何参数都必须是数组
  • 重点1
  • 钥匙,主钥匙
  • 键[0]

所有这些都失败了。我试着在文件末尾添加一个
输出
,但输出键似乎没有输出任何值

您应该使用listKeys()函数


事实证明,从listKeys返回的对象的结构是一个键数组,如下所示

[
  { "keyName":"key1", "permissions":"Full", "value":"keyvalue1"},
  { "keyName":"key2", "permissions":"Full", "value":"keyvalue2"}
]

因此,获取该值的正确解决方案是执行
键[0]。value

我确实使用了listKeys,但似乎没有任何文档说明在对azure存储使用该键时返回了什么。它似乎是某种结构,但我不知道在concat中使用什么或如何获取密钥的文本表示形式。它返回一个based64编码字符串,表示帐户的主(或辅助)存储密钥。如果您看一下这个模板:并部署它,您可以看到输出。看起来是这样的:3mI6Qg6+TtZ3+aDp/awlft78uuuw7mlfodr6pcpyhbj0/iqmwnrju55qpb5bmngviis7v79bntrlywujstxqsw==事实上,listKeys函数返回的是一个“keys”对象,而不是基64字符串。很难找到关于“keys”对象的文档。