2

我想部署使用ARM模板將自定義腳本擴展添加到Azure VM,並且我想讓它使用SAS令牌從存儲帳戶下載文件。Azure VM自定義腳本擴展SAS令牌支持

這裏是模板(簡化):

{ 
    "name": "CustomScriptExtension" 
    "type": "Microsoft.Compute/virtualMachines/extensions", 
    "location": "eastus", 
    "properties": { 
     "publisher": "Microsoft.Compute", 
     "type": "CustomScriptExtension", 
     "typeHandlerVersion": "1.8", 
     "settings": { 
      "fileUris": [ 
       "https://{storage-account}.blob.core.windows.net/installers/{installer}.msi?sv=2015-04-05&sig={signature}&st=2017-05-03T05:18:28Z&se=2017-05-10T05:18:28Z&srt=o&ss=b&sp=r" 
      ], 
      "commandToExecute": "start /wait msiexec /package {installer}.msi /quiet" 
     }, 
    } 
} 

和部署它會導致這個錯誤:

{ 
    "name": "CustomScriptExtension", 
    "type": "Microsoft.Compute.CustomScriptExtension", 
    "typeHandlerVersion": "1.8", 
    "statuses": [ 
    { 
     "code": "ProvisioningState/failed/3", 
     "level": "Error", 
     "displayStatus": "Provisioning failed", 
     "message": "Failed to download all specified files. Exiting. Error Message: Missing mandatory parameters for valid Shared Access Signature" 
    } 
    ] 
} 

如果我打與SAS的URL令牌其直接拉低文件只是好,所以我知道SAS令牌是正確的。自定義腳本擴展是否不支持包含SAS令牌的URL?

回答

4

我想明白了,這必須是自定義腳本擴展中的一個錯誤,導致它不支持存儲帳戶級SAS令牌。如果我在SAS令牌的末尾添加&sr=b(它不是存儲帳戶級別SAS令牌規範的一部分),它開始工作。

我發現這個信息在這裏: https://azureoperations.wordpress.com/2016/11/21/first-blog-post/

+0

非常好,非常感謝。這解決了我的問題! –

1

正如@ 4c74356b41說。現在,客戶腳本擴展模板不支持SAS令牌。如果您想從私人存儲帳戶下載文件,則可以使用存儲帳戶密鑰。請參閱此example

{ 
     "type": "Microsoft.Compute/virtualMachines/extensions", 
     "name": "[concat(variables('vmName'),'/', variables('extensionName'))]", 
     "apiVersion": "[variables('apiVersion')]", 
     "location": "[resourceGroup().location]", 
     "dependsOn": [ 
     "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]" 
     ], 
     "properties": { 
     "publisher": "Microsoft.Azure.Extensions", 
     "type": "CustomScript", 
     "typeHandlerVersion": "2.0", 
     "autoUpgradeMinorVersion": true, 
     "settings": { 
      "fileUris": "[split(parameters('fileUris'), ' ')]", 
      "commandToExecute": "[parameters('commandToExecute')]" 
     }, 
     "protectedSettings": { 
      "storageAccountName": "[parameters('customScriptStorageAccountName')]", 
      "storageAccountKey": "[parameters('customScriptStorageAccountKey')]" 
     } 
     } 
    } 
+0

看看我的示例腳本,我再次把SAS令牌到URL,因此,如果您知道完整的URL(因爲你有SAS令牌)它是一個公共網址,這就像說公共網址不被支持。我明白了,看到我上面的答案。 – gregjhogan