Remediation
Deleting Snapshotsβ
If a snapshot is no longer required for operational, compliance, or recovery purposes, it should be permanently deleted to eliminate unnecessary storage charges.
Azure CLIβ
Use the az snapshot delete
command to remove the snapshot:
az snapshot delete \
--resource-group {{resource-group-name}} \
--name {{snapshot-name}} \
--yes
PowerShellβ
Use the Remove-AzSnapshot
cmdlet:
Remove-AzSnapshot `
-ResourceGroupName "{{resource-group-name}}" `
-SnapshotName "{{snapshot-name}}" `
-Force
Archiving Snapshotsβ
Snapshots that must be retained for compliance or archival purposes can be exported as VHDs and stored in a lower-cost blob storage tier.
Export Snapshot to Page Blob (VHD)β
Generate a short-lived SAS for the snapshot and copy it to a designated storage account container as a Page Blob:
Azure CLIβ
subscriptionId={{subscription-id}}
resourceGroupName={{resource-group-name}}
snapshotName={{snapshot-name}}
sasExpiryDuration=3600
storageAccountName={{storage-account-name}}
storageContainerName={{storage-container-name}}
storageAccountKey={{storage-account-key}}
destinationVHDFileName={{vhd-file-name}}
az account set --subscription $subscriptionId
#Generate the SAS for the snapshot
sas=$(az snapshot grant-access \
--resource-group $resourceGroupName \
--name $snapshotName \
--duration-in-seconds $sasExpiryDuration \
-o tsv)
#Copy the snapshot to the storage account
az storage blob copy start \
--destination-blob $destinationVHDFileName \
--destination-container $storageContainerName \
--account-name $storageAccountName \
--account-key $storageAccountKey \
--source-uri $sas
PowerShellβ
$subscriptionId = "{{subscription-id}}"
$resourceGroupName ="{{resource-group-name}}"
$snapshotName = "{{snapshot-name}}"
$sasExpiryDuration = "3600"
$storageAccountName = "{{storage-account-name}}"
$storageContainerName = "{{storage-container-name}}"
$storageAccountKey = "{{storage-account-key}}"
$destinationVHDFileName = "{{vhd-file-name}}"
Select-AzSubscription -SubscriptionId $SubscriptionId
#Generate the SAS for the snapshot
$sas = Grant-AzSnapshotAccess `
-ResourceGroupName $ResourceGroupName `
-SnapshotName $SnapshotNameΒ `
-DurationInSecond $sasExpiryDuration `
-Access Read
#Create the context for the storage account which will be used to copy snapshot to the storage account
$destinationContext = New-AzStorageContext `
-StorageAccountName $storageAccountName `
-StorageAccountKey $storageAccountKey
#Copy the snapshot to the storage account
Start-AzStorageBlobCopy `
-AbsoluteUri $sas.AccessSAS `
-DestContainer $storageContainerName `
-DestContext $destinationContext `
-DestBlob $destinationVHDFileName
Copy Page Blob to Block Blobβ
Convert the Page Blob into a Block Blob and move it into an archive or cold tier using AzCopy
:
source="https://$storageAccountName.blob.core.windows.net/$storageContainerName/$destinationVHDFileName?$sas"
destination="https://$storageAccountName.blob.core.windows.net/archive/{{name-of-new-block-blob}}"
azcopy copy "$source" "$destination" --blob-type BlockBlob --block-blob-tier {{Cold/Archive}}
Importantβ
Once the block blob has been successfully moved to the desired access tier, perform the following cleanup actions to prevent ongoing costs:
- Delete the original snapshot.
- Delete the intermediate Page Blob (VHD).
- Revoke the SAS token used for access to ensure security and prevent unauthorized usage:
az snapshot revoke-access --resource-group $resourceGroupName --name $snapshotName
Revoke-AzSnapshotAccess -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName