Skip to content

Commit 36877b6

Browse files
committed
Disable network firewall by default in resource creation/removal
1 parent d096083 commit 36877b6

2 files changed

Lines changed: 36 additions & 35 deletions

File tree

eng/common/TestResources/Remove-TestResources.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ $verifyDeleteScript = {
257257
# Get any resources that can be purged after the resource group is deleted coerced into a collection even if empty.
258258
$purgeableResources = Get-PurgeableGroupResources $ResourceGroupName
259259

260-
SetResourceNetworkAccessRules -ResourceGroupName $ResourceGroupName -AllowIpRanges $AllowIpRanges -Override -CI:$CI
260+
SetResourceNetworkAccessRules -ResourceGroupName $ResourceGroupName -AllowIpRanges $AllowIpRanges -SetFirewall -CI:$CI
261261
Remove-WormStorageAccounts -GroupPrefix $ResourceGroupName -CI:$CI
262262

263263
Log "Deleting resource group '$ResourceGroupName'"

eng/common/scripts/Helpers/Resource-Helpers.ps1

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -308,11 +308,11 @@ function Remove-WormStorageAccounts() {
308308
}
309309
}
310310

311-
function SetResourceNetworkAccessRules([string]$ResourceGroupName, [array]$AllowIpRanges, [switch]$CI, [switch]$Override) {
312-
SetStorageNetworkAccessRules -ResourceGroupName $ResourceGroupName -AllowIpRanges $AllowIpRanges -CI:$CI -Override:$Override
311+
function SetResourceNetworkAccessRules([string]$ResourceGroupName, [array]$AllowIpRanges, [switch]$CI, [switch]$SetFirewall) {
312+
SetStorageNetworkAccessRules -ResourceGroupName $ResourceGroupName -AllowIpRanges $AllowIpRanges -CI:$CI -SetFirewall:$SetFirewall
313313
}
314314

315-
function SetStorageNetworkAccessRules([string]$ResourceGroupName, [array]$AllowIpRanges, [switch]$CI, [switch]$Override) {
315+
function SetStorageNetworkAccessRules([string]$ResourceGroupName, [array]$AllowIpRanges, [switch]$CI, [switch]$SetFirewall) {
316316
$clientIp = $null
317317
$storageAccounts = Retry { Get-AzResource -ResourceGroupName $ResourceGroupName -ResourceType "Microsoft.Storage/storageAccounts" }
318318
# Add client IP to storage account when running as local user. Pipeline's have their own vnet with access
@@ -331,45 +331,46 @@ function SetStorageNetworkAccessRules([string]$ResourceGroupName, [array]$AllowI
331331
# otherwise it's not worth updating due to timing and throttling issues.
332332
# If the network rules are deny only without any vnet/ip allowances, then we can't ever purge the storage account
333333
# when immutable blobs need to be removed.
334-
if ($Override -and $rules.DefaultAction -eq "Deny") {
335-
if ($rules.VirtualNetworkRules.Length -gt 0 -or $rules.IpRules.Length -gt 0) {
336-
return
337-
}
334+
if (!$rules -or !$SetFirewall -or $rules.DefaultAction -ne "Deny") {
335+
return
336+
}
337+
if ($rules.VirtualNetworkRules.Length -gt 0 -or $rules.IpRules.Length -gt 0) {
338+
return
338339
}
339340

340-
if ($rules -and ($Override -or $rules.DefaultAction -eq "Allow")) {
341-
Write-Host "Restricting network rules in storage account '$($account.Name)' to deny access by default"
342-
Retry { Update-AzStorageAccountNetworkRuleSet -ResourceGroupName $ResourceGroupName -Name $account.Name -DefaultAction Deny }
343-
if ($CI -and $env:PoolSubnet) {
344-
Write-Host "Enabling access to '$($account.Name)' from pipeline subnet $($env:PoolSubnet)"
345-
Retry { Add-AzStorageAccountNetworkRule -ResourceGroupName $ResourceGroupName -Name $account.Name -VirtualNetworkResourceId $env:PoolSubnet }
346-
$appliedRule = $true
347-
}
348-
elseif ($AllowIpRanges) {
349-
Write-Host "Enabling access to '$($account.Name)' to $($AllowIpRanges.Length) IP ranges"
350-
$ipRanges = $AllowIpRanges | ForEach-Object {
351-
@{ Action = 'allow'; IPAddressOrRange = $_ }
352-
}
353-
Retry { Update-AzStorageAccountNetworkRuleSet -ResourceGroupName $ResourceGroupName -Name $account.Name -IPRule $ipRanges | Out-Null }
354-
$appliedRule = $true
341+
# Add firewall rules in cases where existing rules added were incomplete to enable blob removal
342+
Write-Host "Restricting network rules in storage account '$($account.Name)' to deny access by default"
343+
Retry { Update-AzStorageAccountNetworkRuleSet -ResourceGroupName $ResourceGroupName -Name $account.Name -DefaultAction Deny }
344+
if ($CI -and $env:PoolSubnet) {
345+
Write-Host "Enabling access to '$($account.Name)' from pipeline subnet $($env:PoolSubnet)"
346+
Retry { Add-AzStorageAccountNetworkRule -ResourceGroupName $ResourceGroupName -Name $account.Name -VirtualNetworkResourceId $env:PoolSubnet }
347+
$appliedRule = $true
348+
}
349+
elseif ($AllowIpRanges) {
350+
Write-Host "Enabling access to '$($account.Name)' to $($AllowIpRanges.Length) IP ranges"
351+
$ipRanges = $AllowIpRanges | ForEach-Object {
352+
@{ Action = 'allow'; IPAddressOrRange = $_ }
355353
}
356-
elseif (!$CI) {
357-
Write-Host "Enabling access to '$($account.Name)' from client IP"
358-
$clientIp ??= Retry { Invoke-RestMethod -Uri 'https://icanhazip.com/' } # cloudflare owned ip site
359-
$clientIp = $clientIp.Trim()
360-
$ipRanges = Get-AzStorageAccountNetworkRuleSet -ResourceGroupName $ResourceGroupName -Name $account.Name
361-
if ($ipRanges) {
362-
foreach ($range in $ipRanges.IpRules) {
363-
if (DoesSubnetOverlap $range.IPAddressOrRange $clientIp) {
364-
return
365-
}
354+
Retry { Update-AzStorageAccountNetworkRuleSet -ResourceGroupName $ResourceGroupName -Name $account.Name -IPRule $ipRanges | Out-Null }
355+
$appliedRule = $true
356+
}
357+
elseif (!$CI) {
358+
Write-Host "Enabling access to '$($account.Name)' from client IP"
359+
$clientIp ??= Retry { Invoke-RestMethod -Uri 'https://icanhazip.com/' } # cloudflare owned ip site
360+
$clientIp = $clientIp.Trim()
361+
$ipRanges = Get-AzStorageAccountNetworkRuleSet -ResourceGroupName $ResourceGroupName -Name $account.Name
362+
if ($ipRanges) {
363+
foreach ($range in $ipRanges.IpRules) {
364+
if (DoesSubnetOverlap $range.IPAddressOrRange $clientIp) {
365+
return
366366
}
367367
}
368-
Retry { Add-AzStorageAccountNetworkRule -ResourceGroupName $ResourceGroupName -Name $account.Name -IPAddressOrRange $clientIp | Out-Null }
369-
$appliedRule = $true
370368
}
369+
Retry { Add-AzStorageAccountNetworkRule -ResourceGroupName $ResourceGroupName -Name $account.Name -IPAddressOrRange $clientIp | Out-Null }
370+
$appliedRule = $true
371371
}
372372
}
373+
373374
if ($appliedRule) {
374375
Write-Host "Sleeping for 15 seconds to allow network rules to take effect"
375376
Start-Sleep 15

0 commit comments

Comments
 (0)