我一直在尝试通过 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
这其实是一个非常愚蠢的问题。
向安全组添加新规则时应采取的步骤:
- 使用以下方式获取安全组
Get-AzureRmNetworkSecurityGroup
- 使用以下方式添加新的 RuleConfig
Add-AzureRmNetworkSecurityRuleConfig
- 使用以下方法在 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