仮想マシンを作成した際に、「できるだけ通信可能な箇所を限定したい」そんな時ありますよね!!
そこで活躍するのが「NSG」なのですが、Azureの場合、各種Azureサービスは各リージョンのPIPを利用しているため、全通信をブロックするわけにはいきません。
※ExpressRouteでも解決可能
では、該当リージョンのPIPを登録すればいいじゃないか~ と思うのですが、これがポータルから行うと大変なのです。
Azure データセンターのIPアドレス一覧はこちらで公開されています。
※どうやら、リスト以外のIPもAzureで利用しているようです。
見て頂ければ、わかると思うのですが、全リージョンで2800近くのセグメントがあり、登録するだけでも大変なのに、これが! 週に一度(水曜:リスト更新、月曜:適用)のペースでIPが変わる可能性があるのです。
やってられませんね!!
そこで今回は、指定したリージョンのPIPをNSGに一気に登録する、スクリプトを試してみたいと思います。
いつもの PowerShell 起動!! ※青字箇所は適宜変更して下さい。
$rgName = “tushigami-group“ ←既存RGを指定
$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 でもいける模様
※注意事項
・リージョンを特定できないAzureサービスには注意が必要です。
・Azureエージェントが行う通信にも気をつけてください。
・Windows Update & Linuxリポジトリ