Azure Virtual MachinesのIPアドレス管理を徹底解説!パブリックとプライベートの使い分けルール
生徒
「Azure(アジュール)で仮想(かそう)マシンを作ったのですが、IP(アイピー)アドレスの設定がよく分かりません。パブリックとプライベートって何が違うんですか?」
先生
「それはクラウド構築(こうちく)の第一歩ですね。パブリックIPアドレスはインターネットの世界で通信するための住所、プライベートIPアドレスはAzureの内部ネットワークだけで使う住所のことですよ。」
生徒
「なるほど!住所が二つあるようなイメージですね。どうやって使い分ければいいんでしょうか?」
先生
「セキュリティを守りながら正しく通信するためのルールがあるんです。初心者の方でも分かりやすく、具体例を交えて解説していきますね!」
1. AzureのIPアドレスとは?基本の仕組みを学ぼう
Azure Virtual Machines(アジュールバーチャルマシン)を利用する際、必ずセットで考える必要があるのがIPアドレスです。IPアドレスとは、ネットワークに接続(せつぞく)されたコンピュータを識別(しきべつ)するための番号のことです。インターネット上の「住所(じゅうしょ)」と例えると分かりやすいでしょう。
Azureの世界では、仮想マシンに割り当てられる番号には大きく分けて2つの種類があります。それが「パブリックIPアドレス」と「プライベートIPアドレス」です。これらを適切(てきせつ)に管理(かんり)することが、安全なクラウド運用(うんよう)の鍵となります。まずは、それぞれの役割(やくわり)を整理(せいり)していきましょう。
2. パブリックIPアドレスの役割とインターネット接続
パブリックIPアドレスは、インターネットから直接(ちょくせつ)アクセスできる番号です。Webサイトを公開したり、自分のパソコンからAzure上のサーバーを操作(そうさ)したりする場合に必要になります。世界中の誰(だれ)からでも見える「表札(ひょうさつ)」のようなものです。
Azureでは、このパブリックIPを「動的(どうてき)」にするか「静的(せいてき)」にするか選ぶことができます。動的(Dynamic)な設定だと、仮想マシンを再起動(さいきどう)したときに番号が変わってしまうことがありますが、静的(Static)な設定にすれば、固定(こてい)の番号を使い続けることができます。サーバーを運用するなら、番号が変わらない静的な設定が一般的(いっぱんてき)です。
3. プライベートIPアドレスの役割と内部ネットワーク
一方で、プライベートIPアドレスは、Azureの内部ネットワーク(VNet:仮想ネットワーク)内だけで通用する番号です。インターネットからは直接見ることができません。これは、会社や学校の「内線番号(ないせんばんごう)」に似ています。
例えば、Webサーバーとデータベースサーバーを連携(れんけい)させる場合、データベースサーバーをインターネットに公開(こうかい)するのは危険(きけん)です。そこで、データベースにはプライベートIPだけを割り当て、Webサーバーとの間だけで通信(つうしん)できるように設定します。これにより、外部(がいぶ)からの攻撃(こうげき)リスクを大幅(おおはば)に減らすことができるのです。
4. Azure PowerShellを使ってIPアドレスを確認してみよう
実際にAzure上の仮想マシンがどのようなIPアドレスを持っているか、コマンドを使って確認する方法を紹介(しょうかい)します。ここでは「Azure PowerShell」というツールを使ってみましょう。初心者の方でも、以下のコマンドを入力するだけで簡単に情報を取得(しゅとく)できます。
Get-AzPublicIpAddress -ResourceGroupName "MyResourceGroup"
Name : myPublicIP
ResourceGroupName : MyResourceGroup
Location : japaneast
IpAddress : 203.0.113.10
PublicIpAllocationMethod : Static
上記のコマンドを実行(じっこう)すると、指定したリソースグループ内にあるパブリックIPアドレスの詳細が表示されます。IpAddressの部分が、あなたのサーバーのインターネット上の住所になります。
5. パブリックとプライベートを使い分ける重要ルール
IPアドレスの使い分けには、セキュリティ上の鉄則(てっそく)があります。基本的には、「パブリックIPは最小限(さいしょうげん)にする」というルールです。インターネットに窓(まど)を開けるのは、必要(ひつよう)なサーバーだけに絞(しぼ)るべきです。
例えば、社内(しゃない)システムや開発(かいはつ)環境(かんきょう)であれば、パブリックIPを持たせずに、VPN(ブイピーエヌ)やAzure Bastion(バスティオン)という踏み台(ふみだい)機能(きのう)を使って接続するのが安全です。プライベートIPのみで運用することで、ハッカーによる不正(ふせい)アクセスの経路(けいろ)を遮断(しゃだん)できるのです。これがクラウド管理者の心得(こころえ)となります。
6. Azure仮想ネットワークの接続性をテストする
次に、仮想マシン同士(どうし)がプライベートIPで通信できているかを確認するLinux(リナックス)のコマンドを見てみましょう。サーバー内部から別のサーバーへ接続テストを行う際には、pingやcurlといったコマンドをよく使います。
ping -c 4 10.0.0.5
PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data.
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=0.825 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=0.742 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=0.715 ms
64 bytes from 10.0.0.5: icmp_seq=4 ttl=64 time=0.698 ms
このように、Azureの内部ネットワーク内(10.0.x.xなど)で応答(おうとう)が返ってくれば、正しくプライベートIPでの通信が行われています。インターネットを経由(けいゆ)せずに通信できている証拠(しょうこ)ですね。
7. PythonプログラムでIP情報を取得する例
プログラミングを使って、自分のサーバーのネットワーク情報を取得(しゅとく)することも可能です。ここでは、Python(パイソン)という言語を使って、OSのネットワーク設定(せってい)から情報を引き出す簡単なコードを作成(さくせい)してみましょう。プログラム初心者の方でも、ライブラリを使えば数行で書けます。
import socket
def get_internal_ip():
# ホスト名を取得
hostname = socket.gethostname()
# プライベートIPアドレスを取得
private_ip = socket.gethostbyname(hostname)
print(f"ホスト名: {hostname}")
print(f"プライベートIPアドレス: {private_ip}")
if __name__ == "__main__":
get_internal_ip()
このプログラムを実行すると、現在(げんざい)実行しているマシンの内部的な識別情報を表示します。実行結果は以下のようになります。
ホスト名: AzureVM-Web01
プライベートIPアドレス: 10.0.0.4
8. データベース管理とIP制限のSQL操作
セキュリティを高めるためには、データベース側でも「どのIPアドレスからの接続を許可(きょか)するか」を管理する必要があります。SQL(エスキューエル)を使って、アクセスログや許可リストを確認するイメージを持っておきましょう。以下の例では、接続元(せつぞくもと)のIP情報を管理するテーブルを想定(そうてい)しています。
id | server_name | allowed_ip | description
---+-------------+-------------+-------------------
1 | WebServer01 | 10.0.0.4 | フロントエンド
2 | AdminPC | 192.168.1.1 | 管理用PC
3 | BackupServer| 10.0.0.10 | バックアップ用
特定のサーバーからのアクセスのみを許可(きょか)する設定(せってい)を確認するためのSQL文は以下のようになります。
SELECT server_name, allowed_ip
FROM firewall_settings
WHERE allowed_ip LIKE '10.0.%';
実行結果は以下の通りです。内部ネットワーク(10.0.始まり)からの接続だけが抽出(ちゅうしゅつ)されました。
server_name | allowed_ip
-------------+-------------
WebServer01 | 10.0.0.4
BackupServer | 10.0.0.10
9. IPアドレス管理でよくあるトラブルと解決策
最後に、Azure初心者が陥(おちい)りやすい失敗(しっぱい)を紹介します。最も多いのは、「パブリックIPでWebサイトを公開したのに見られない」という問題です。これは多くの場合、IPアドレス自体の問題ではなく、「NSG(ネットワークセキュリティグループ)」というファイアウォールの設定で通信を遮断(しゃだん)していることが原因(げんいん)です。
IPアドレスはあくまで「住所」であり、NSGは「門番(もんばん)」です。住所が合っていても、門番が通してくれなければ中には入れません。パブリックIPを使って外部からアクセスさせる場合は、必ずポート番号(80番や443番)の受信(じゅしん)許可設定(せってい)を忘れないようにしましょう。これにより、安心安全で快適(かいてき)なAzureライフを送ることができます。
まとめ
Azure Virtual MachinesにおけるIPアドレス管理は、クラウドインフラを構築する上での最重要事項の一つです。これまで解説してきた通り、パブリックIPアドレスは「インターネットという広大な海」に面した窓口であり、外部からのアクセスを可能にするための必須コンポーネントです。一方、プライベートIPアドレスは「仮想ネットワーク(VNet)という安全な家」の中だけで通用する識別子であり、バックエンドのデータベースやアプリケーションサーバーを外部の脅威から隔離するために不可欠な役割を果たします。
効率的なIPアドレス運用のためのポイント
実務においてAzureのネットワークを設計する際は、単に通信ができるかどうかだけでなく、セキュリティ、コスト、可用性の三要素をバランスよく考慮する必要があります。例えば、パブリックIPアドレスを静的に固定する場合、予約費用が発生することを念頭に置く必要があります。また、不必要にパブリックIPを付与することは、攻撃者に攻撃対象領域(アタックサーフェス)を広げてしまうリスクを招きます。
さらに、Azure環境でのトラブルシューティングにおいては、OS内部のネットワーク設定だけでなく、Azureプラットフォーム側の設定、特にネットワークインターフェース(NIC)やサブネットの構成を正しく理解しておくことが求められます。C#などのプログラミング言語を用いて、自動化スクリプトを作成し、定期的にIPアドレスの使用状況を監視することも、大規模な環境を運用するエンジニアにとっては非常に有効な手段となります。
C#によるネットワーク情報の取得サンプル
Azure上のWindows VMなどで動作する、自身のネットワークインターフェース情報を詳細に取得するC#プログラムの例を紹介します。このコードを実行することで、現在のマシンに割り当てられているIPアドレス情報を一括で確認できます。
using System;
using System.Net;
using System.Net.NetworkInformation;
class AzureNetworkMonitor
{
public static void DisplayNetworkInfo()
{
Console.WriteLine("--- Azure VM ネットワーク構成確認 ---");
// ローカルマシンのネットワークインターフェースをすべて取得
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in interfaces)
{
// 動作しているインターフェースのみを表示
if (adapter.OperationalStatus == OperationalStatus.Up)
{
Console.WriteLine($"名前: {adapter.Name}");
Console.WriteLine($"種類: {adapter.NetworkInterfaceType}");
IPInterfaceProperties properties = adapter.GetIPProperties();
foreach (UnicastIPAddressInformation ip in properties.UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
Console.WriteLine($"プライベートIPアドレス: {ip.Address}");
}
}
Console.WriteLine("------------------------------------");
}
}
}
static void Main()
{
DisplayNetworkInfo();
}
}
上記のプログラムを実行すると、以下のような結果が得られます。仮想マシンに複数のニックカードが刺さっている場合でも、それぞれの情報を網羅的に取得することが可能です。
--- Azure VM ネットワーク構成確認 ---
名前: Ethernet 2
種類: Ethernet
プライベートIPアドレス: 10.0.0.4
------------------------------------
データベースでのIPアドレス管理の高度な運用
クラウドネイティブな環境では、接続許可リストを動的に管理することが推奨されます。例えば、特定のプロジェクト期間中のみ特定のプライベートIP範囲(セグメント)からのアクセスを許可し、終了後に削除するといった運用です。以下のSQL操作例では、現在のネットワークアクセス制御リストの状態を把握するための手法を示します。
まず、現在の接続管理用テーブルの状態を確認しましょう。
access_id | resource_name | source_network | access_level | last_updated
----------+---------------+----------------+--------------+--------------------
101 | DBServer_Prod | 10.0.1.0/24 | ReadWrite | 2026-03-01 10:00:00
102 | DBServer_Prod | 10.0.2.5 | ReadOnly | 2026-03-05 14:20:00
103 | WebServer_DMZ | 203.0.113.50 | FullAccess | 2026-03-10 09:15:00
104 | Test_Cluster | 192.168.10.0 | None | 2026-03-15 18:00:00
特定のネットワーク範囲(10.0.x.x)からのアクセスのみを抽出し、更新日が新しい順に並べるSQLクエリは以下の通りです。
SELECT resource_name, source_network, access_level
FROM network_access_control
WHERE source_network LIKE '10.0.%'
AND access_level <> 'None'
ORDER BY last_updated DESC;
実行結果は以下の通りです。これにより、現在有効な内部ネットワークのアクセス権限を一目で把握できます。
resource_name | source_network | access_level
--------------+----------------+--------------
DBServer_Prod | 10.0.2.5 | ReadOnly
DBServer_Prod | 10.0.1.0/24 | ReadWrite
生徒
「先生、まとめまで読んで、AzureのIPアドレス管理がいかに大切か実感がわいてきました!特にパブリックIPを最小限にするという『最小権限の原則』は、セキュリティを考える上で基本なんですね。」
先生
「その通りです! 素晴らしい気づきですね。インターネットに公開されている住所(パブリックIP)は、常に世界中から鍵が開いていないか試されているようなものですから、本当に必要な時だけ使うのが鉄則ですよ。」
生徒
「C#のコードでネットワーク情報を取得する方法も勉強になりました。これを使えば、スクリプトで自動的に自分の環境をチェックできそうです。あと、NSG(ネットワークセキュリティグループ)が『門番』だという例えも分かりやすかったです。」
先生
「そう言ってもらえると嬉しいです。 住所(IP)があっても門(NSG)が閉まっていれば通信はできませんし、逆に門が開いていても住所が間違っていればたどり着けません。この両方をセットで考えるのがAzure運用のコツです。」
生徒
「SQLでのアクセス管理も、実務ではこうやってリスト化してチェックしているんですね。プライベートIP(内線番号)を賢く使って、安全なシステムを作れるようになりたいです!」
先生
「その意気です! クラウドの学習は、実際に手を動かしてコマンドを叩いてみるのが一番の近道です。もし通信がうまくいかないときは、まずpingやAzure PowerShellを使って、現在の状態を正しく把握することから始めてみてくださいね。」