使用 powershell 实现 Azure 资源管理器安全规则

使用 powershell 实现 Azure 资源管理器安全规则

我一直在尝试通过 powershell 推送 Azure NetworkSecurityGroup 规则。

使用控制台我似乎能够创建我想要的东西,但是使用 powershell 我却收效甚微。

使用以下语法:

Get-AzureRmNetworkSecurityGroup -Name $SecGroup -ResourceGroupName $RGName 
| Set-AzureRmNetworkSecurityGroup 
| Add-AzureRmNetworkSecurityRuleConfig  
    -Name 'MSTSC' 
    -Direction Inbound 
    -Priority 100 
    -Access Allow 
    -SourceAddressPrefix 'INTERNET'  
    -SourcePortRange '65456' 
    -DestinationAddressPrefix '*' 
    -DestinationPortRange '3389' 
    -Protocol '*'

我收到一个输出窗口,似乎表明安全规则已创建: 输出

但是,如果我随后检查门户网站,或者

Get-AzureRmNetworkSecurityGroup -Name $SecGroup -ResourceGroupName $RGName

新添加的规则不存在。
但是,如果我使用门户添加规则,并尝试使用 powershell 命令创建它,我会收到以下错误:

Add-AzureRmNetworkSecurityRuleConfig:具有指定名称的规则已存在

我忽略了一些东西,但是是什么呢?

答案1

这其实是一个非常愚蠢的问题。

向安全组添加新规则时应采取的步骤:

  1. 使用以下方式获取安全组Get-AzureRmNetworkSecurityGroup
  2. 使用以下方式添加新的 RuleConfigAdd-AzureRmNetworkSecurityRuleConfig
  3. 使用以下方法在 Azure 中设置新的安全组(即发布它)Set-AzureRmNetworkSecurityGroup

我对这些步骤理解不足,只是从互联网上复制粘贴,导致了我的错误。
当它到达第二个管道时,它会设置尚未更新的安全组(所以我只是按照我拉动的方式推送该组)并给我成功消息。
之后,我将Add新组放入我的缓存中,这是规则的本地副本,但未发布它。

因此正确的做法是:

Get-AzureRmNetworkSecurityGroup -Name $SecGroup -ResourceGroupName $RGName | 
Add-AzureRmNetworkSecurityRuleConfig 
    -Name 'MSTSC' 
    -Direction Inbound 
    -Priority 100 
    -Access Deny 
    -SourceAddressPrefix 'INTERNET'  
    -SourcePortRange '3389' 
    -DestinationAddressPrefix '*' 
    -DestinationPortRange '3389' 
    -Protocol '*' |
Set-AzureRmNetworkSecurityGroup

相关内容