@@ -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,43 @@ 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 -eq " Allow" ) {
335+ return
338336 }
339337
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
338+ # Add firewall rules in cases where existing rules added were incomplete to enable blob removal
339+ Write-Host " Restricting network rules in storage account '$ ( $account.Name ) ' to deny access by default"
340+ Retry { Update-AzStorageAccountNetworkRuleSet - ResourceGroupName $ResourceGroupName - Name $account.Name - DefaultAction Deny }
341+ if ($CI -and $env: PoolSubnet ) {
342+ Write-Host " Enabling access to '$ ( $account.Name ) ' from pipeline subnet $ ( $env: PoolSubnet ) "
343+ Retry { Add-AzStorageAccountNetworkRule - ResourceGroupName $ResourceGroupName - Name $account.Name - VirtualNetworkResourceId $env: PoolSubnet }
344+ $appliedRule = $true
345+ }
346+ elseif ($AllowIpRanges ) {
347+ Write-Host " Enabling access to '$ ( $account.Name ) ' to $ ( $AllowIpRanges.Length ) IP ranges"
348+ $ipRanges = $AllowIpRanges | ForEach-Object {
349+ @ { Action = ' allow' ; IPAddressOrRange = $_ }
355350 }
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- }
351+ Retry { Update-AzStorageAccountNetworkRuleSet - ResourceGroupName $ResourceGroupName - Name $account.Name - IPRule $ipRanges | Out-Null }
352+ $appliedRule = $true
353+ }
354+ elseif (! $CI ) {
355+ Write-Host " Enabling access to '$ ( $account.Name ) ' from client IP"
356+ $clientIp ?? = Retry { Invoke-RestMethod - Uri ' https://icanhazip.com/' } # cloudflare owned ip site
357+ $clientIp = $clientIp.Trim ()
358+ $ipRanges = Get-AzStorageAccountNetworkRuleSet - ResourceGroupName $ResourceGroupName - Name $account.Name
359+ if ($ipRanges ) {
360+ foreach ($range in $ipRanges.IpRules ) {
361+ if (DoesSubnetOverlap $range.IPAddressOrRange $clientIp ) {
362+ return
366363 }
367364 }
368- Retry { Add-AzStorageAccountNetworkRule - ResourceGroupName $ResourceGroupName - Name $account.Name - IPAddressOrRange $clientIp | Out-Null }
369- $appliedRule = $true
370365 }
366+ Retry { Add-AzStorageAccountNetworkRule - ResourceGroupName $ResourceGroupName - Name $account.Name - IPAddressOrRange $clientIp | Out-Null }
367+ $appliedRule = $true
371368 }
372369 }
370+
373371 if ($appliedRule ) {
374372 Write-Host " Sleeping for 15 seconds to allow network rules to take effect"
375373 Start-Sleep 15
0 commit comments