Azure Powershell-Skript zum Klonen von NSG-Regeln über Abonnements hinweg im selben Mandanten

Azure Powershell-Skript zum Klonen von NSG-Regeln über Abonnements hinweg im selben Mandanten

Ich brauche Hilfe mit einem Powershell-Skript, das NSG-Regeln von einer bestimmten NSG in einem Abonnement auf eine NSG in einem anderen Abonnement klont. Ich habe ein Skript, das dies erreicht, wenn sich beide NSGs im selben Abonnement befinden, aber nicht, wenn sie sich in unterschiedlichen Abonnements befinden. Hier ist, was ich habe. Jede Hilfe wäre willkommen.

#name of NSG that you want to copy 
$nsgOrigin = ""
#name new NSG  
$nsgDestination = "" 
#Resource Group Name of source NSG 
$rgName = "" 
#Resource Group Name when you want the new NSG placed 
$rgNameDest = ""
 
$nsg = Get-AZNetworkSecurityGroup -Name $nsgOrigin -ResourceGroupName $rgName 
$nsgRules = Get-AZNetworkSecurityRuleConfig -NetworkSecurityGroup $nsg 
$newNsg = Get-AZNetworkSecurityGroup -name $nsgDestination -ResourceGroupName $rgNameDest 
foreach ($nsgRule in $nsgRules) { 

$acl = @{Name = $nsgRule.Name; Protocol = $nsgRule.Protocol; SourcePortRange= $nsgRule.SourcePortRange; DestinationPortRange = $nsgRule.DestinationPortRange;Priority = $nsgRule.Priority;Direction = $nsgRule.Direction; Access = $nsgRule.Access; SourceApplicationSecurityGroup = $nsgRule.SourceApplicationSecurityGroups }


if ( $nsgRule.DestinationAddressPrefix.count -gt 0 ) { 
$acl  += @{DestinationAddressPrefix = $nsgRule.DestinationAddressPrefix }
} 
if ( $nsgRule.SourceAddressPrefix.count -gt 0 ) {
$acl  += @{SourceAddressPrefix = $nsgRule.SourceAddressPrefix }
}
if ( $nsgRule.SourceApplicationSecurityGroups.count -gt 0 ) {
$acl  += @{SourceApplicationSecurityGroup = $nsgRule.SourceApplicationSecurityGroups }
}
if ( $nsgRule.DestinationApplicationSecurityGroups.count -gt 0 ) {
$acl  += @{DestinationApplicationSecurityGroup = $nsgRule.DestinationApplicationSecurityGroups }
}


Add-AZNetworkSecurityRuleConfig -NetworkSecurityGroup $newNsg @acl
       
} 
Set-AZNetworkSecurityGroup -NetworkSecurityGroup $newNsg

Antwort1

Sie müssen lediglich den Abonnementkontext vor und nach der ursprünglichen NSG wie folgt festlegen

Set-AzContext -SubscriptionName 'SUBNAME'

$nsg = Get-AZNetworkSecurityGroup -Name $nsgOrigin -ResourceGroupName $rgName $nsgRules = Get-AZNetworkSecurityRuleConfig -NetworkSecurityGroup $nsg

Set-AzContext -SubscriptionName 'SUBNAME'

verwandte Informationen