見出し画像

NSG を使ってインターネット接続できないサブネットを作成してみよう!

以前に書いた記事でご紹介しましたが、明示的に制限しない限りAzure VM はインターネット接続できてしまいます。

制限をかける手段としては、

  • ルーティング ( ルートテーブル )

  • NSG ( 送信セキュリティ規則 )

があります。

今回は、後者 ( NSG ) を使ってサクッとインターネットにつながらないサブネットを作成してみたいと思います。

環境を準備する

以前に書いたこちらの記事で作成した環境に少し手を加えて構築します。

ネットワーク セキュリティ グループ ( NSG )

サービスタグを使い以下のように記述しました。

1️⃣
'VirtualNetwork' から 'Internet' への通信は拒否する。

2️⃣
この VNet へのリモートデスクトップ接続は許可しておきます。
Azure VM ( Windows Server ) を作成しそこからインターネットアクセスを試したいので。

resource subnet2nsg 'Microsoft.Network/networkSecurityGroups@2021-05-01' = { 
  name: 'private-subnet-nsg' 
  location: location 
  properties: { 
    securityRules: [  
      { 
        name: 'Deny-Internet-All' // 1️⃣
        properties: { 
          direction: 'Outbound' 
          protocol: '*' 
          access: 'Deny' 
          priority: 1100 
          sourceAddressPrefix: 'VirtualNetwork'
          sourcePortRange: '*' 
          destinationAddressPrefix: 'Internet'
          destinationPortRange: '*' 
        } 
      } 
      { 
        name: 'Allow-RDP-All' // 2️⃣ 
        properties: { 
          access: 'Allow' 
          direction: 'Inbound' 
          protocol: 'Tcp' 
          priority: 1200 
          sourceAddressPrefix: '*' 
          sourcePortRange: '*' 
          destinationAddressPrefix: 'VirtualNetwork' 
          destinationPortRange: '3389' 
        } 
      } 
    ] 
  } 
}

実際にこれを使ってデプロイしたものは以下となります。

NSG をサブネットに紐づけ

先ほど記述した NSG を subnet2 に割り当てるように記述します。

var subnet2 = { 
    name: 'privateSubnet' 
    properties: { 
      addressPrefix: '${addressPrefix}1.0/24'  
      networkSecurityGroup: { 
        id: subnet2nsg.id //👈
      } 
    } 
}

実際にこれを使ってデプロイしたものは以下となります。

これでこのサブネットに紐づいた VM はインターネットに接続できなくなったハズです。

Azure VM ( Windows Server )

インターネットに接続できないかを検証するための VM を用意します。
まず今回は 『 subnet2 』 に VM を所属させたいので、VNet 作成のモジュールファイルで

output subnet1Idinfo string = vnet.properties.subnets[1].id

と出力を定義し、VM 作成のモジュールファイルにパラメーターとして渡すことにします。
VM の作成についてはこちらの記事で書いた内容のものを使います。

ここに書かれている NSG は不要なので削除して問題ありません。

あと、パブリックIPアドレスを持たないサブネットがプライベートサブネットなわけなので、基本的には Bastion を用意しましょう。

もちろん軽く面倒くさいのでパブリックIPを持たせておいて直接リモートデスクトップ接続させても全く問題ありません。

Bicepファイルで書く場合には、VNet 作成のモジュールファイルで例えば専用サブネットを 『 subnet3 』 として定義し以下のように記述すれば併せてデプロイできます。

var subnet3 = { 
    name: 'AzureBastionSubnet' 
    properties: { 
      addressPrefix: '${addressPrefix}255.0/24' 
    } 
}

resource bh 'Microsoft.Network/bastionHosts@2021-05-01' = { 
  name: '${vnetName}-bastion' 
  location: location 
  sku: { 
    name: 'Basic' 
  } 
  properties: { 
    ipConfigurations: [ 
      { 
        name: 'ipconfig-${vnetName}-bastion' 
        properties: { 
          subnet: { 
            id: vnet.properties.subnets[2].id 
          } 
          publicIPAddress: { 
            id: pip.id 
          } 
          privateIPAllocationMethod: 'Dynamic' 
        } 
      } 
    ] 
  } 
}

resource pip 'Microsoft.Network/publicIPAddresses@2021-05-01' = { 
  name: '${vnetName}-bastion-pip' 
  location: location 
  sku: { 
    name: 'Standard' 
  } 
  properties: { 
    publicIPAllocationMethod: 'Static' 
    publicIPAddressVersion: 'IPv4' 
    } 
  }

試してみる

デプロイされた Azure VM ( Windows Server ) にサインインして、note のトップページにブラウザでアクセスしてみます。

はい、狙い通りページが表示できません。

一応、Chrome でも試してみます。

はい、もちろんアクセスできませんね。

送信セキュリティ規則を削除

インターネットへの接続を拒否する NSG 規則によって Web ページが開けないことを念のため検証するため、この規則を削除します。

削除ができたので、ブラウザ ( Chrome ) の更新ボタンを押してみると

はい、想定通りページを表示できました。

ということで、今回作成したこの VM が所属するサブネットに紐づけられた NSG ( 送信セキュリティ規則 ) が確かにインターネットへの接続を制御していたことが確認できました。

🟠 さいごに 🔚

今回はサブネットにインターネットアクセスができない NSG を関連付けて実現しましたが、もちろん NIC に紐づけて任意の VM 単位で制御することもできます。
このような送信セキュリティ規則は Azure portal でも簡単に作成できますので、もしインターネットアクセスを禁止する必要が出てきたらサクッと設定しちゃいましょう!

今後も Azure に関する技術情報やその他の資格試験に関する記事を書いていこうと思いますので、よろしければフォローをお願いします🔆

また、この記事が少しでもタメになった、面白かったという方がいらっしゃいましたら、ぜひ 「 スキ 」 ボタンのクリックをお願いします😋

最後までお読みいただきありがとうございました 😊

▶ 続けて読むのにおススメな記事

▶ おススメ Azure 学習書籍


この記事が参加している募集

スキしてみて

つくってみた

もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。