【问题标题】:Unable to get Azure storage key from storage resource in ARM template无法从 ARM 模板中的存储资源获取 Azure 存储密钥
【发布时间】:2016-06-28 18:31:23
【问题描述】:

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

"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"
             },

我从ARM - How can I get the access key from a storage account to use in AppSettings later in the template? 找到的,但是该问题中的语法似乎不再有效。我得到一个错误,key1 不是已知的属性。显然有一个名为keys 的属性,但正如人们所预料的那样,它是某种结构。我一直无法从该结构中弄清楚主键的属性是什么。我试过了

  • key1 -> 模板语言表达式属性“key1”不存在,可用属性为“keys”
  • keys -> 为模板语言函数“concat”提供的参数无效。所有参数都必须是数组,或者没有参数必须是数组。
  • keys.key1
  • keys.primaryKey
  • 键[0]

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

【问题讨论】:

    标签: azure azure-storage azure-resource-manager azure-storage-account arm-template


    【解决方案1】:

    【讨论】:

    • 我确实使用了 listKeys 但似乎没有任何文档说明当用于天蓝色存储时它会返回什么。它似乎是某种结构,但我不知道什么或如何获取用于 concat 的键的文本表示。
    • 它返回一个 base64 编码的字符串,表示帐户的主(或辅助)存储密钥。如果您查看此模板:github.com/rjmax/ArmExamples/blob/master/listKeysSample.json 并部署它,您可以看到输出。看起来像这样:3mI6Qg6+TtZ3+aDp/AWlft78UuW7MLFOdR6pcpYHBj0/IQMWNRJU55QPB5bmNgVIIs7V79bNTrnlywujsTXqsw==
    • 事实上,listKeys 函数返回一个“keys”对象,而不是 base 64 字符串。很难找到有关“键”对象的文档。
    【解决方案2】:

    事实证明,从 listKeys 返回的对象的结构是一个键数组,看起来像

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

    因此,获取价值的正确解决方案是使用keys[0].value。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-06
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2018-02-09
      • 2019-01-14
      • 1970-01-01
      相关资源
      最近更新 更多