无法从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”对象的文档。