【问题标题】:Dynamically retrieving azure storage account key in ARM template在 ARM 模板中动态检索 Azure 存储帐户密钥
【发布时间】:2017-01-02 20:29:36
【问题描述】:

我正在尝试使用资源管理器模板自动为 Azure 中的存储帐户创建 API 连接。

我在 ARM 中使用 listKeys 方法来检索存储帐户的访问密钥。我经历了这个question,它对我不起作用。 当我使用模板的outputs 部分中的方法时,它工作正常并成功检索和显示访问密钥。

"outputs": { "listKeysOutput": { "type": "string", "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storagename')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]" } }

但是,当我尝试在连接资源中使用相同的函数时(如下所示),模板执行时没有任何错误。但是在从 Azure 门户访问 API 连接时,它会显示“缺少参数”。

"parameterValues": { "accesskey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storagename')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]", "accountName": "[parameters('storagename')]" }

我在这里遗漏了什么吗?或者'accesskey'属性不接受listKeys的输出?

【问题讨论】:

标签: azure azure-storage azure-management-api arm-template


【解决方案1】:

几个月前我有过类似的经历,通过直接在我的代码中使用连接字符串然后将连接字符串传递给连接来解决它。该值如下所示:

[concat('DefaultEndpointsProtocol=https;AccountName=',  variables('storageConfigs')[0].name,';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts/',  variables('storageConfigs')[0].name), variables('defaultStorageApiVersion')).key1)]

我使用了一个存储配置对象作为输入,这就是为什么它看起来像上面的原因,您可以将variables('storageConfigs')[0].name 替换为您在代码中使用的任何名称或变量函数。看起来上面可能是storagename

【讨论】:

    【解决方案2】:

    可能导致问题的两件事:

    1. 确保 API 连接依赖于存储帐户
    2. 将“accessKey”中的键大写(模板中的某些内容区分大小写)

    【讨论】:

      【解决方案3】:

      @Naren,我建议你可以使用这个 API 函数来获取你的存储密钥

      发布 https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys?api-version={api-version}

      您可以获得与模板相同的结果。

          {
        “keys”: [
          {
            “keyName”: “key1”,
            “value”: "key1Value”,
            “permissions”: “FULL”
          },
          {
            “keyName”: “key2”,
            “value”: "key2Value”,
            “permissions”: “FULL”
          },
        ]
      }
      

      仅供参考: https://msdn.microsoft.com/en-us/library/mt163589.aspx

      【讨论】:

        【解决方案4】:

        依赖关系确实是一个要求,因此在启动 api 连接部署之前已经创建了存储帐户。

        OP 模板代码的问题是使用 accesskey 而正确的参数名称是 accessKey(注意大写 K)用于 Azure Blob api 连接资源。

        对于因缺少 API 连接资源所需参数的文档而苦苦挣扎的人 - 启动此 API 调用:

        https://management.azure.com/subscriptions/<YOUR SUBSCRIPTION ID>/providers/Microsoft.Web/locations/<YOUR LOCATION>/managedApis/<API TYPE>?api-version=2016-06-01

        <API TYPE> 应该是要检查的连接的 api 类型,例如 azureblob、azurequeues 或 documentdb。

        所有预期参数的描述与该资源的其他描述信息一起返回。

        【讨论】:

          猜你喜欢
          • 2018-02-09
          • 1970-01-01
          • 1970-01-01
          • 2019-04-06
          • 2019-09-17
          • 1970-01-01
          • 2021-09-13
          • 2016-06-28
          • 1970-01-01
          相关资源
          最近更新 更多