【ITニュース解説】Create and configure network security groups
2025年09月24日に「Dev.to」が公開したITニュース「Create and configure network security groups」について初心者にもわかりやすく解説しています。
ITニュース概要
NSGとASGは、Azureでネットワーク通信を制御する機能だ。ASGはWebサーバーなど同じ役割のサーバーをグループ化し、NSGルールと組み合わせることで、そのグループへのアクセスを許可・拒否する。個別のIPアドレス管理が不要になり、複雑なアプリケーションのセキュリティ設定を簡素化し、柔軟に運用できる。
ITニュース解説
クラウド環境、特にAzureのようなパブリッククラウドを利用する際、組織のデジタル資産を守るネットワークセキュリティは極めて重要だ。インターネットに接続されたシステムは常に外部からの脅威に晒されており、適切なセキュリティ対策がなければ情報漏洩やサービス停止のリスクが高まる。この記事では、Azure環境でネットワークトラフィックをきめ細かく制御し、アプリケーションのセキュリティを強化するための重要なツールである「ネットワークセキュリティグループ(NSG)」と「アプリケーションセキュリティグループ(ASG)」について、システムエンジニアを目指す初心者が理解しやすいように解説する。
まず、今回のシナリオから見ていこう。ある組織は、仮想ネットワーク(app-vnet)内のネットワークトラフィックを厳密に管理したいと考えている。この仮想ネットワークは、「フロントエンドサブネット」と「バックエンドサブネット」という二つの部分に分かれている。フロントエンドサブネットには、インターネットからアクセスされるWebサーバーが配置される。これらのWebサーバーの管理を容易にするため、Webサーバー群をひとつのまとまりとして扱う「アプリケーションセキュリティグループ(ASG)」の利用が求められている。このASGは、各Webサーバーの仮想マシンインターフェースに関連付けられることで、グループ内のサーバー全体に対して一貫したセキュリティポリシーを適用できるようになる。一方、バックエンドサブネットには、フロントエンドのWebサーバーからのみアクセスされるデータベースサーバーが配置される。このデータベースサーバーへのアクセスを厳しく制御するため、「ネットワークセキュリティグループ(NSG)」が必要となる。NSGは、データベースサーバーの仮想マシンインターフェースに関連付けられ、Webサーバーからのアクセスのみを許可するルールを設定することになる。さらに、テスト目的で、フロントエンドサブネットに仮想マシンVM1、バックエンドサブネットに仮想マシンVM2をデプロイし、これらを使ってセキュリティ設定が正しく機能するかを検証する計画だ。これらの仮想マシンは、Azureリソースマネージャテンプレートを使って簡単にデプロイできるUbuntuサーバーである。
次に、ネットワークセキュリティグループ(NSG)とは何かを理解しよう。NSGは、Azure仮想ネットワーク内のサブネットや個々の仮想マシン(VM)のネットワークインターフェースに対して、送受信されるネットワークトラフィックをフィルタリングするための、仮想的なファイアウォール機能を提供する。NSGは、セキュリティルールと呼ばれる一連の指示で構成されており、これらのルールによって、特定のプロトコル、特定のポート、特定のIPアドレス範囲からのトラフィックを許可するか、拒否するかを細かく設定できる。例えば、「インターネットからのHTTP(ポート80)トラフィックはWebサーバーに許可する」といったルールや、「データベースサーバーへのSSH(ポート22)接続は特定の管理用IPアドレスからのみ許可する」といったルールを作成できる。各ルールには優先順位が設定されており、数字が小さいほど優先度が高い。トラフィックは、これらのルールを優先順位の高い順に評価され、最初に見つかった一致するルールが適用される。NSGは、セキュリティを確保するための基盤となる要素であり、仮想ネットワーク内のリソースを守る上で不可欠な存在なのだ。
続いて、アプリケーションセキュリティグループ(ASG)について説明する。ASGは、NSGの管理をさらに簡素化し、強化するために導入された仕組みだ。従来のNSGルールでは、特定のIPアドレスを指定してトラフィックを制御していたため、仮想マシンのIPアドレスが変更されたり、新しい仮想マシンを追加したりするたびに、NSGルールを修正する必要があった。これは、大規模な環境や動的に変化する環境では非常に手間がかかり、設定ミスにつながる可能性もあった。ASGは、このような課題を解決するために考案された。ASGを使うと、仮想マシンやネットワークインターフェースを、それらが担当する「アプリケーションの役割」に基づいて論理的にグループ化できる。例えば、すべてのWebサーバーを「Web-ASG」というグループに、すべてのデータベースサーバーを「DB-ASG」というグループにまとめることができるのだ。このASGをNSGルールの中で「送信元」または「宛先」として参照することで、IPアドレスの代わりにアプリケーションの役割を指定してセキュリティルールを作成できるようになる。
ASGがもたらす主なメリットは以下の通りだ。一つ目は、ルールの管理が非常にシンプルになることだ。IPアドレスごとにルールを定義するのではなく、ASGに対して一度ルールを定義すれば、そのASGに属するすべてのリソースに自動的に適用される。二つ目は、スケーラビリティが向上することだ。アプリケーションの負荷に応じて新しいWebサーバーが自動的に追加された場合でも、そのサーバーを適切なASGに追加するだけで、既存のセキュリティルールが自動的に適用されるため、手動でのルール変更は不要になる。三つ目は、柔軟性と動的な適応性だ。仮想マシンのIPアドレスが変わっても、ASGへの所属が変わらなければ、NSGルールを変更する必要はない。これにより、クラウドの動的な性質に合わせたセキュリティ管理が可能になる。例えば、「Web-ASGからのトラフィックのみをDB-ASGに許可する」というNSGルールを作成すれば、WebサーバーのIPアドレスが変更されても、データベースへのアクセスルールを修正する必要がなくなる。このように、NSGとASGを組み合わせることで、多層アプリケーションのセキュリティを、より簡単かつ堅牢に管理できるようになるのだ。
実際のAzure環境での設定手順を見ていこう。まず、Cloud Shellセッションを起動し、必要な仮想ネットワークとサブネットが事前にデプロイされていることを確認する。提供されたテンプレートを使ってテスト用の仮想マシン(VM1とVM2)を展開する。
次に、アプリケーションセキュリティグループ(ASG)を作成する。Azureポータルで「アプリケーションセキュリティグループ」を検索し、「+作成」を選択する。ASGの名前(例:app-frontend-asg)と、既存の仮想ネットワークと同じリージョンを指定して作成する。作成したASGは、その後、VM1(フロントエンドサブネットの仮想マシン)のネットワークインターフェースに関連付ける。VM1の「ネットワーク」設定の中から「アプリケーションセキュリティグループ」を選択し、作成したASGを追加する手順だ。これにより、VM1が「app-frontend-asg」というグループの一部として認識されるようになる。
続いて、ネットワークセキュリティグループ(NSG)を作成する。Azureポータルで「ネットワークセキュリティグループ」を検索し、「+作成」を選択する。NSGの名前(例:app-vnet-nsg)とリージョンを指定して作成する。このNSGは、バックエンドサブネット全体に関連付ける。作成したNSGのリソースに移動し、「設定」メニューから「サブネット」を選択し、「+関連付け」からバックエンドサブネットを選び、NSGを関連付ける。これにより、バックエンドサブネット内のすべてのリソースに対して、このNSGのルールが適用されるようになる。
最後に、作成したNSGに対してセキュリティルールを追加する。今回は特にインバウンドセキュリティルールを作成する。app-vnet-nsgを選択し、「設定」メニューから「インバウンドセキュリティルール」を選び、「+追加」を選択する。ここで、送信元としてフロントエンドASG(app-frontend-asg)を指定し、宛先としてバックエンドASG(DB-ASG、または特定のポートとプロトコル)を指定するといった、具体的なアクセス制御ルールを設定していく。例えば、Webサーバーからのデータベースアクセス(例:ポート3306のMySQL)のみを許可するルールを作成できる。このように、ASGを送信元または宛先としてNSGルールに組み込むことで、IPアドレスに依存しない、よりアプリケーション中心のセキュリティポリシーを定義し、管理できるようになるのだ。
NSGとASGは、Azureにおけるネットワークセキュリティ管理の二つの柱であり、これらを効果的に組み合わせることで、クラウド環境の複雑なネットワークトラフィックをシンプルかつ安全に制御できる。NSGは仮想ネットワーク内のトラフィックをフィルタリングする基本的なファイアウォール機能を提供し、ASGはアプリケーションの役割に基づいてリソースをグループ化することで、NSGルールの管理を大幅に簡素化し、スケーラビリティと柔軟性を向上させる。システムエンジニアを目指す者として、これらの概念を深く理解し、適切に活用する能力は、現代のクラウド環境で堅牢なシステムを構築するために不可欠なスキルとなるだろう。