@@ -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