NSGでホワイトリストに挑戦!!

いいね!!

仮想マシンを作成した際に、「できるだけ通信可能な箇所を限定したい」そんな時ありますよね!!

そこで活躍するのが「NSG」なのですが、Azureの場合、各種Azureサービスは各リージョンのPIPを利用しているため、全通信をブロックするわけにはいきません。
※ExpressRouteでも解決可能

では、該当リージョンのPIPを登録すればいいじゃないか~ と思うのですが、これがポータルから行うと大変なのです。

Azure データセンターのIPアドレス一覧はこちらで公開されています。
※どうやら、リスト以外のIPもAzureで利用しているようです。

見て頂ければ、わかると思うのですが、全リージョンで2800近くのセグメントがあり、登録するだけでも大変なのに、これが! 週に一度(水曜:リスト更新、月曜:適用)のペースでIPが変わる可能性があるのです。

やってられませんね!!

そこで今回は、指定したリージョンのPIPをNSGに一気に登録する、スクリプトを試してみたいと思います。


いつもの PowerShell 起動!! ※青字箇所は適宜変更して下さい。

$rgName = “tushigami-group

$downloadUri = “https://www.microsoft.com/en-in/download/confirmation.aspx?id=41653”

$downloadPage = Invoke-WebRequest -Uri $downloadUri

$xmlFileUri = ($downloadPage.RawContent.Split(‘”‘) -like “https://*PublicIps*”)[0]

$response = Invoke-WebRequest -Uri $xmlFileUri

[xml]$xmlResponse = [System.Text.Encoding]::UTF8.GetString($response.Content)

$regions = $xmlResponse.AzurePublicIpAddresses.Region

$selectedRegions = “japanwest

$ipRange = ( $regions | where-object Name -In $selectedRegions ).IpRange

$rules = @()

$rulePriority = 1000
ForEach ($subnet in $ipRange.Subnet) {
$ruleName = $subnet.Replace(“/”,”-“)
$rules += New-AzureRmNetworkSecurityRuleConfig `
-Name $ruleName `
-Description “Allow outbound to Azure $subnet” `
-Access Allow `
-Protocol * `
-Direction Outbound `
-Priority $rulePriority `
-SourceAddressPrefix VirtualNetwork `
-SourcePortRange * `
-DestinationAddressPrefix “$subnet” `
-DestinationPortRange *
$rulePriority++
}

$nsg = New-AzureRmNetworkSecurityGroup `
-Name “tushigami-Azure_PIP” `
-ResourceGroupName $rgName `
-Location japanwest `
-SecurityRules $rules


西日本リージョンのPIPが登録されたNSGが出来ています!
後は、KMSサーバー[23.102.135.246 (kms.core.windows.net)]を許可し、
優先度4000あたりに、Internet向けの通信を拒否するルールを追加すると完成です。
※KMS=168.63.129.16:1688 でもいける模様

nsg019

※注意事項
・リージョンを特定できないAzureサービスには注意が必要です。
・Azureエージェントが行う通信にも気をつけてください。
・Windows Update & Linuxリポジトリ