通过PowerShell向虚拟机规模集添加Blob中的Azure自定义脚本扩展
使用Azure存储账户私有Blob中的脚本配置CustomScriptExtension
没问题,完全可以实现用私有Blob容器里的脚本,不过存储访问密钥不能放在publicSettings里——因为publicSettings是公开可见的,密钥会直接泄露。正确的做法是把存储账户的认证信息放在protectedSettings里,这个对象里的内容会被加密存储,不会对外暴露。
具体操作步骤和代码示例如下:
核心配置要点
publicSettings里依旧填写私有Blob的完整URL(格式:https://<你的存储账户名>.blob.core.windows.net/<容器名>/azure_cse_vm_initial_script.ps1)- 新增
protectedSettings对象,专门存储你的存储账户名称和访问密钥 - 调用
Add-AzureRmVmssExtension时,同时传入Setting和ProtectedSetting两个参数
完整代码示例
# 替换成你的实际信息 $storageAccountName = "你的存储账户名称" $storageAccountKey = "你的存储账户访问密钥" $blobUri = "https://$storageAccountName.blob.core.windows.net/你的容器名/azure_cse_vm_initial_script.ps1" $argument = "你的脚本参数(如果有的话)" # 构造公开设置:指定脚本文件的URI和执行命令 $publicSettings = @{ "fileUris" = (,$blobUri); "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File azure_cse_vm_initial_script.ps1 $argument" } # 构造受保护设置:存储账户的认证信息(加密存储) $protectedSettings = @{ "storageAccountName" = $storageAccountName; "storageAccountKey" = $storageAccountKey } Write-Host " ==> Add-AzureRmVmssExtension" Add-AzureRmVmssExtension -VirtualMachineScaleSet $vmss ` -Name "customScript" ` -Publisher "Microsoft.Compute" ` -Type "CustomScriptExtension" ` -TypeHandlerVersion 1.8 ` -Setting $publicSettings ` -ProtectedSetting $protectedSettings
额外安全建议
优先使用SAS令牌替代账户密钥
如果你不想暴露存储账户的全局访问密钥,可以生成一个针对该Blob的SAS令牌(设置合适的有效期和只读权限),然后直接把SAS令牌附加到Blob URL后面,示例URL:https://<存储账户名>.blob.core.windows.net/<容器名>/azure_cse_vm_initial_script.ps1?sv=2023-11-03&ss=b&srt=o&sp=r&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=xxx这种情况下只需要
publicSettings,不需要额外配置protectedSettings,安全性更高。验证脚本执行状态
可以在VMSS实例的C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension路径下查看扩展日志,确认脚本是否成功下载和执行。
内容的提问来源于stack exchange,提问作者Daniel W.
相关产品推荐
相关产品推荐

