您可以使用listkeys访问私有blob上的链接arm模板吗?

时间:2017-11-08 17:38:45

标签: azure templates azure-resource-manager arm-template

有没有办法使用'listkeys'访问私有blob存储上的链接模板。这样我每次部署时都不需要生成SAS令牌。有点像:

   try {
        JSONObject oResponse = new JSONObject(response)
        JSONArray userArray = oResponse.getJSONArray("data");


        for (int i=0;userArray.length()<i;i++){
             final JSONObject o = userArray.getJSONObject(i);
             User user=new User();

            // You must know what type you expect from your response
            // eg. String, int, ...
            String name= o.optString("name", "");
            String empcode= o.optString("empcode", "");
            String location= o.optString("location", "");
            String department= o.optString("department", "");
            String username= o.optString("username", "");
            // You need to add the setter to your model class
            user.setName(name);
            user.setEmpcode(empcode);
            // ... and so on ...
            userlist.add(user);

         }

进入:

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

MS文档没有提及它,但它很容易部署而无需生成令牌。

回应汤姆为什么我不能使用keyVault,因为它仍然需要输入。以下是需要在内部参数中的令牌代码:

"parameters": {
    "sasToken": { "type": "securestring" }
},
"resources": [
    {
        "apiVersion": "2017-05-10",
        "name": "linkedTemplate",
        "type": "Microsoft.Resources/deployments",
        "properties": {
          "mode": "incremental",
          "templateLink": {
            "uri": "[concat('https://storagecontosotemplates.blob.core.windows.net/templates/helloworld.json', parameters('sasToken'))]",
            "contentVersion": "1.0.0.0"
          }
        }
    }
],

...在Azure模板中看起来像这样。如您所见,您仍需要输入一些凭据:(

Azure Templates

1 个答案:

答案 0 :(得分:0)

  

无需生成令牌即可轻松部署

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

您提到的代码是从存储帐户获取连接字符串。 Azure存储提供主键和辅助键,因此我们可以使用列表键API来获取帐户密钥。 但是对于SAS token我们需要生成它,我们需要提供开始时间,到期时间,访问权限等。根据我的经验,没有与listkey生成sas令牌相同的方式。

  

这样,每次我去除

时,我都不需要生成SAS令牌

但是我们可以将SAS令牌存储在Key Vault中,然后我们可以在ARM模板中动态获取值。我们可以参考此blog的详细信息。

 {
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {

    "sasToken": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group name}/providers/Microsoft.KeyVault/vaults/MyUniqueKeyVaultName"
        },
        "secretName": "secretName"
      }
    }
  }

}