Microsoft Azure
Azure Deployment
Section titled “Azure Deployment”Arrow produces a fixed-size VHD image for Azure. Azure requires this format for managed images.
Each Arrow Azure build produces a ZIP package containing:
- The disk image (
.vhd) - Deployment instructions (text file)
- An automated deploy script (bash for macOS/Linux, PowerShell for Windows)
Prerequisites
Section titled “Prerequisites”| Tool | Install Link |
|---|---|
Azure CLI (az) | Install Azure CLI |
| AzCopy | Install AzCopy |
Authenticate before running any commands:
az loginDeploy Script (macOS/Linux)
Section titled “Deploy Script (macOS/Linux)”Extract the ZIP and run the deploy script:
unzip kali-arrow-client-azure-*.zipcd kali-arrow-client-azure-*/chmod +x deploy-to-azure.shImport Mode (default)
Section titled “Import Mode (default)”./deploy-to-azure.shThe script will interactively guide you through:
- Resource Group — Select existing or create new
- Region — Auto-detected from existing RG, or choose from common regions
- Storage Account — Select existing or create new
- VHD Upload — Uses
azcopyfor fast sparse page blob upload (skips zero-filled pages) - Managed Image Creation — Creates an Azure Managed Image from the VHD
- VM Launch — Optionally launch a VM with interactive VNet, Subnet, NSG, SSH key, and VM size selection
- Cleanup — Optionally remove the uploaded VHD blob from storage
Launch Mode
Section titled “Launch Mode”Launch a VM from a previously imported Arrow image:
# Interactive — lists available Arrow images./deploy-to-azure.sh --launch
# Specify image name directly./deploy-to-azure.sh --launch kali-arrow-client-20260304-153000Cleanup Mode
Section titled “Cleanup Mode”Remove all Arrow deployment resources from Azure:
./deploy-to-azure.sh --cleanupScans for and offers to delete:
- Arrow managed images
- VMs created from Arrow images
- VHD blobs in storage accounts
Deploy Script (Windows PowerShell)
Section titled “Deploy Script (Windows PowerShell)”# Extract the ZIPExpand-Archive kali-arrow-client-azure-*.zip -DestinationPath .\azure-deploy
# Run the scriptcd azure-deploy.\Deploy-To-Azure.ps1Same modes are available:
# Import (default).\Deploy-To-Azure.ps1
# Launch a VM.\Deploy-To-Azure.ps1 -Launch
# Launch a specific image.\Deploy-To-Azure.ps1 -Launch -ImageName "kali-arrow-client-20260304-153000"
# Cleanup all Arrow resources.\Deploy-To-Azure.ps1 -CleanupManual Deployment
Section titled “Manual Deployment”If you prefer to run the commands yourself:
Step 1: Upload VHD to Blob Storage
Section titled “Step 1: Upload VHD to Blob Storage”# Create a storage containeraz storage container create \ --account-name <storage_account> \ --name vhds \ --auth-mode key
# Upload using azcopy (recommended — skips zero pages for fast upload)azcopy copy "kali-arrow-client-azure.vhd" \ "https://<storage_account>.blob.core.windows.net/vhds/kali-arrow-client.vhd?<SAS_TOKEN>" \ --blob-type PageBlobStep 2: Create Managed Image
Section titled “Step 2: Create Managed Image”az image create \ --resource-group <resource_group> \ --name kali-arrow-client \ --os-type Linux \ --source "https://<storage_account>.blob.core.windows.net/vhds/kali-arrow-client.vhd" \ --location <region>Step 3: Launch a VM
Section titled “Step 3: Launch a VM”az vm create \ --resource-group <resource_group> \ --name kali-arrow-vm \ --image kali-arrow-client \ --size Standard_D4s_v3 \ --admin-username <username_from_portal> \ --authentication-type ssh \ --ssh-key-name <your_key> \ --vnet-name <vnet> \ --subnet <subnet>Recommended VM Sizes
Section titled “Recommended VM Sizes”| Size | vCPU | RAM | Use Case |
|---|---|---|---|
| Standard_D4s_v3 | 4 | 16 GB | Recommended |
| Standard_D8s_v3 | 8 | 32 GB | High performance |
| Standard_D16s_v3 | 16 | 64 GB | Maximum performance |
Troubleshooting
Section titled “Troubleshooting”| Issue | Solution |
|---|---|
azcopy not found | Install from AzCopy downloads |
| Upload takes very long | Ensure you’re using azcopy with --blob-type PageBlob (skips zero pages) |
| VHD size is 120GB | Expected. Azure requires fixed-size VHDs. Actual data is ~30-40GB. azcopy only transfers non-zero pages. |
| ”The VHD must be aligned to a 1 MB boundary” | Arrow VHDs are built with force_size which ensures correct alignment |
| Can’t SSH into the VM | Ensure the NSG allows inbound port 22 |
| Password doesn’t work | Credentials are generated at build time. Retrieve them from the ARROW Portal under your device’s details page. |