ARM - 如何从存储帐户获取访问密钥以便在模板中稍后在AppSettings中使用?

51

我正在创建一个Azure资源管理器模板,它可以实例化多个资源,包括Azure存储帐户和一个具有Web应用程序的Azure应用服务。

我想能够从新创建的存储帐户中捕获主访问密钥(或完整的连接字符串,两种方式都可以),并将其用作Web应用程序的一个AppSettings的值。

这是可能的吗?

4个回答

73

我已经在你的条目中添加了.key1(这是获取主访问密钥的属性),但这让我有所进展。谢谢你,也感谢艾米丽。 - Scott

45
自从接受其他答案以来,语法已发生变化。您现在会遇到的错误是: 'Template language expression property ' key1 'doesn' t exist, available properties are 'keys'

现在键被表示为一个键数组,语法现在是:

"StorageAccount": "[Concat('DefaultEndpointsProtocol=https;AccountName=',variables('StorageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]",

参见:在 ARM 脚本中检索 Azure 存储密钥


5
为了避免被当前和未来的更改破坏,使用一个接受 API 版本的 listKeys 重载函数。例如:listKeys(resourceId(...), '2015-05-01-preview').key1 - Iain

5
我曾两次遇到这个问题。第一次是在2015年,最近一次是在2017年五月。 我需要向WebApp添加连接字符串 - 我想从ARM模板中的生成资源自动添加字符串。这可以帮助后来不必手动添加这些值。
第一次我使用了旧版本的函数listKeys(旧版本似乎返回结果不是对象而是值):
"AzureWebJobsStorage": {
    "type": "Custom",
    "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2015-05-01-preview').key1)]"
},

今天的工作模板最新版本为:
"resources": [
    {
      "apiVersion": "2015-08-01",
      "type": "config",
      "name": "connectionstrings",
      "dependsOn": [
        "[resourceId('Microsoft.Web/Sites/', parameters('webSiteName'))]"
      ],
      "properties": {
        "DefaultConnection": {
          "value": "[concat('Data Source=tcp:', reference(resourceId('Microsoft.Sql/servers/', parameters('sqlserverName'))).fullyQualifiedDomainName, ',1433;Initial Catalog=', parameters('databaseName'), ';User Id=', parameters('administratorLogin'), '@', parameters('sqlserverName'), ';Password=', parameters('administratorLoginPassword'), ';')]",
          "type": "SQLServer"
        },
        "AzureWebJobsStorage": {
          "type": "Custom",
          "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2016-01-01').keys[0].value)]"
        },
        "AzureWebJobsDashboard": {
          "type": "Custom",
          "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2016-01-01').keys[0].value)]"
        }
      }
    },

感谢您。

这是一个包含函数详细信息的文档链接:https://learn.microsoft.com/zh-cn/azure/azure-resource-manager/resource-group-template-functions-resource#listkeys - Digiman

2
下面是将存储帐户添加到ADLA的示例。
"storageAccounts": [
                  {
                    "name": "[parameters('DataLakeAnalyticsStorageAccountname')]",
                    "properties": {
                      "accessKey": "[listKeys(variables('storageAccountid'),'2015-05-01-preview').key1]"
                    }
                }
            ],

在变量中,您可以保存

"variables": {
        "apiVersion": "[providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]]",
         "storageAccountid": "[concat(resourceGroup().id,'/providers/','Microsoft.Storage/storageAccounts/', parameters('DataLakeAnalyticsStorageAccountname'))]"
    },

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接