Azure VNetピアリング設定ガイド|リージョン間・テナント間のセキュア接続を完全解説
生徒
「Azure(アジュール)で別のネットワークにあるサーバー同士を通信させたいのですが、どうすればいいですか?」
先生
「それならAzure VNet(ブイネット)ピアリングという機能を使うのが一番です。まるで一つのネットワークのように繋ぐことができるんですよ。」
生徒
「遠く離れた場所(リージョン)や、別の契約(テナント)の間でも繋ぐことは可能なんですか?」
先生
「はい、もちろんです!設定も簡単で、セキュリティも非常に高いのが特徴です。具体的な仕組みと設定方法を学んでいきましょう。」
1. Azure VNetピアリングとは?
Azure VNet(Virtual Network:仮想ネットワーク)ピアリングとは、Microsoft Azure(マイクロソフト アジュール)のクラウド上にある二つの独立したネットワークを、Microsoftの高速なバックボーン回線を経由して直接接続する技術です。通常、異なるネットワーク間で通信を行うには、インターネットを経由したり、VPN(ブイピーエヌ:仮想専用線)を構築したりする必要がありますが、ピアリングを使えばそれらは不要です。
ピアリングを設定すると、異なるネットワークに所属する仮想マシン(VM)同士が、プライベートIPアドレスを使って直接やり取りできるようになります。これは、あたかも物理的なLAN(ラン)ケーブルで二つの拠点を直結したような状態になることを意味します。この接続は公共のインターネットを通らないため、非常に安全で低遅延(通信の遅れが少ないこと)なのが最大のメリットです。
2. リージョン間ピアリングとグローバルピアリング
Azureのネットワーク接続には、大きく分けて二つのパターンがあります。一つは同じ場所(リージョン)にあるネットワーク同士を繋ぐ「ローカルVNetピアリング」です。例えば、東日本リージョン内にある二つのネットワークを接続する場合がこれに該当します。もう一つは、異なる場所に位置するネットワーク同士を繋ぐ「グローバルVNetピアリング」です。
グローバルVNetピアリングを使えば、東京(東日本)にあるサーバーと、アメリカのセントラルUSにあるサーバーを、安全な社内ネットワークのように接続できます。かつてはリージョンをまたぐ接続には複雑な設定が必要でしたが、現在は数クリックで設定が完了します。これにより、災害対策(DR:ディザスタリカバリ)のためにデータを遠隔地に同期させる仕組みも、非常にシンプルに構築できるようになりました。
3. テナント間ピアリングで組織をまたぐ接続
さらに高度な使い方として「テナント間ピアリング」があります。Azureにおけるテナントとは、一つの契約単位や組織のようなものです。例えば、親会社と子会社で別々にAzureを契約している場合や、開発環境と本番環境でアカウントを分けている場合に、それらを接続する必要が出てきます。これを「クロスリソースマネージャー接続」とも呼びます。
通常、別のテナントは完全に隔離されていますが、相手のディレクトリID(識別番号)を指定して許可を与えることで、セキュアに通信を確立できます。これにより、会社をまたいだ共同プロジェクトや、BtoB(企業間取引)のシステム連携が非常にスムーズになります。設定には双方の管理者の承認が必要になるため、意図しない接続が作られる心配もなく、ガバナンス(統制)を保った運用が可能です。
4. VNetピアリングの設定手順(Azureポータル)
実際の設定は、Azureポータルという管理画面から行います。まずは接続元の仮想ネットワークを開き、「設定」メニューの中にある「ピアリング」を選択します。ここで「追加」ボタンを押し、接続先のネットワーク情報を入力します。重要なポイントは、双方向の接続が必要なため、一度の操作で両方のネットワークにピアリング設定を作成するオプションにチェックを入れることです。
設定時には「仮想ネットワークアクセス」や「転送されたトラフィック」の許可設定を確認しましょう。これらを有効にすることで、ネットワーク間のパケットが正しく流れるようになります。また、IPアドレスの範囲(アドレス空間)が重複していると接続できないというルールがあるため、事前にネットワーク設計をしっかり行い、住所が重ならないようにしておく必要があります。
5. Azure CLIを使ったピアリング設定の自動化
初心者のうちはポータル画面からの操作が分かりやすいですが、慣れてくるとコマンドライン(CUI)を使った操作が便利です。Azure CLI(アジュール シーエルアイ)を使うと、同じ設定を何度も繰り返したり、スクリプトで自動化したりできます。以下は、二つのネットワークを接続するための基本的なコマンドの例です。
az network vnet peering create --name MyPeeringToVNet2 --resource-group MyResourceGroup --vnet-name VNet1 --remote-vnet VNet2ID --allow-vnet-access
Finished successfully. PeeringState: Initiated
このように、一行のコマンドで設定を開始できます。ピアリングの状態を確認するには、以下のコマンドを使用します。
az network vnet peering list --resource-group MyResourceGroup --vnet-name VNet1 --output table
Name ResourceGroup PeeringState AllowVnetAccess
---------------- --------------- -------------- -----------------
MyPeeringToVNet2 MyResourceGroup Connected True
状態が「Connected(コネクテッド)」になっていれば、接続成功です。コマンドを覚えることで、大量のネットワーク管理も一瞬で行えるようになります。
6. ピアリング接続の疎通確認テスト
設定が終わったら、本当に通信ができるか確認しましょう。Linux(リナックス)サーバーであれば、pingコマンドやtracerouteコマンドを使って、相手のプライベートIPアドレスにパケットが届くかを調べます。Windowsであれば、PowerShell(パワーシェル)を使ってポートの開放状況を確認するのが一般的です。
ping -c 4 10.1.0.4
PING 10.1.0.4 (10.1.0.4) 56(84) bytes of data.
64 bytes from 10.1.0.4: icmp_seq=1 ttl=64 time=1.23 ms
64 bytes from 10.1.0.4: icmp_seq=2 ttl=64 time=1.15 ms
64 bytes from 10.1.0.4: icmp_seq=3 ttl=64 time=1.18 ms
64 bytes from 10.1.0.4: icmp_seq=4 ttl=64 time=1.20 ms
--- 10.1.0.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
もし通信が通らない場合は、ネットワークセキュリティグループ(NSG)というファイアウォールの設定を確認してください。ピアリング自体が繋がっていても、NSGでポートが閉じられていると通信は遮断されてしまいます。初心者が最も陥りやすい罠なので、ピアリングとNSGはセットで考える癖をつけましょう。
7. Pythonでピアリング情報を取得するプログラム
Azure SDK for Python(エスディーケー)を利用すると、プログラムからピアリングの情報を取得することも可能です。例えば、現在設定されているすべてのピアリング一覧を表示して、異常がないかチェックするツールを作ることができます。以下に簡単なサンプルコードを紹介します。
from azure.identity import DefaultAzureCredential
from azure.mgmt.network import NetworkManagementClient
# 認証情報の取得
credential = DefaultAzureCredential()
subscription_id = "your-subscription-id"
network_client = NetworkManagementClient(credential, subscription_id)
# ピアリング一覧の取得と表示
peerings = network_client.virtual_network_peerings.list("MyResourceGroup", "VNet1")
for p in peerings:
print(f"ピアリング名: {p.name}")
print(f"ステータス: {p.peering_state}")
print(f"リモートVNet: {p.remote_virtual_network.id}")
このコードを実行すると、プログラムが自動的にAzureへログインし、指定したネットワークに紐付いているピアリング名とその状態を画面に出力します。大規模なシステム運用では、こうした自動化プログラムが欠かせません。Python(パイソン)はライブラリが豊富なので、初心者でも比較的簡単にクラウド操作の自動化に挑戦できます。
8. データベース接続への応用とメリット
VNetピアリングの代表的な活用事例は、Webサーバー(フロントエンド)とデータベースサーバー(バックエンド)の分離です。セキュリティを高めるために、データベースはインターネットから直接アクセスできない隠れたネットワークに配置します。そして、Webサーバーがあるネットワークとの間だけをピアリングで繋ぐのです。
SQL(エスキューエル)データベースを例に、接続を確認するための情報を整理してみましょう。以下のような構成でデータを管理しているとします。
id | server_name | private_ip | role
---+-------------+-------------+------------
1 | WebSrv01 | 10.0.0.5 | Frontend
2 | WebSrv02 | 10.0.0.6 | Frontend
3 | DbSrv01 | 10.1.0.10 | Database
4 | DbSrv02 | 10.1.0.11 | Database
この状態で、WebSrv01からDbSrv01に対してSQLクエリを発行します。ピアリングが正しく機能していれば、安全な社内経路を通ってデータを取得できます。
SELECT customer_name, order_date
FROM orders
WHERE status = 'Pending';
実行結果は以下のようになります。
customer_name | order_date
--------------+------------
田中太郎 | 2026-03-25
佐藤花子 | 2026-03-26
鈴木一郎 | 2026-03-27
このように、ピアリングを利用することで、パフォーマンスを犠牲にすることなく、強固なセキュリティ設計を実現できるのです。企業の基幹システムや個人情報の取り扱いなど、機密性の高いデータを扱う場面では必須のテクニックと言えるでしょう。
9. 料金体系と注意点について
最後に、気になる料金についても触れておきます。VNetピアリングの設定自体に月額固定費用はかかりません。しかし、「データ転送料」という形で費用が発生します。ネットワーク間を行き来したデータの量に応じて、1GB(ギガバイト)あたり数円程度の課金がなされます。リージョン内ピアリングよりも、リージョンをまたぐグローバルピアリングの方が単価が高く設定されているため注意が必要です。
また、ピアリングは「推移的(すいいてき)な接続」をサポートしていません。例えば、AとBが繋がっていて、BとCが繋がっていても、AとCは直接通信できません。AとCを通信させるには、AとCの間にも直接ピアリングを張るか、「VPNゲートウェイ」や「Azure Firewall」をハブ(中心)にして経由させる構成にする必要があります。これを「ハブ・アンド・スポーク」構成と呼び、大規模な設計では非常によく使われる手法です。
まとめ
ここまで、Azure VNetピアリングの基本概念から具体的な設定方法、自動化、そして実運用におけるデータベース接続の事例まで詳しく解説してきました。Azure VNetピアリングは、クラウドネイティブなネットワーク構築において、切っても切り離せない重要なコンポーネントです。従来のVPN接続と比較して、設定が容易であるだけでなく、Microsoftの堅牢なバックボーンネットワークを直接利用できるため、圧倒的な低遅延と高帯域幅を確保できるのが最大の強みです。
特に、グローバルVNetピアリングを活用することで、物理的な距離を感じさせないシステム連携が可能になります。例えば、日本国内のユーザー向けフロントエンドサーバーと、米国にあるデータ解析基盤をセキュアに直結するといった構成も、複雑なルーティング設定なしで実現できます。また、テナント間ピアリング(クロスリソースマネージャー接続)は、組織改編や企業間提携に伴うシステム統合において、非常に強力な解決策となります。
C#によるネットワーク管理の自動化例
開発現場では、インフラの構築や状態監視をプログラムから制御したいというニーズが多くあります。Azure SDK for .NETを使用すれば、C#言語を用いてVNetピアリングの状態をプログラムから確認したり、必要に応じて動的に設定を変更したりすることが可能です。以下に、特定の仮想ネットワークに紐付くピアリング情報を一覧表示する簡単なサンプルコードを紹介します。
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Network;
using System;
// Azureのリソース管理クライアントを初期化
var armClient = new ArmClient(new DefaultAzureCredential());
string resourceGroupId = "MyResourceGroup";
string vnetName = "VNet1";
// 仮想ネットワークリソースを取得
var resourceGroup = armClient.GetDefaultSubscription().GetResourceGroups().Get(resourceGroupId).Value;
var vnet = resourceGroup.GetVirtualNetworks().Get(vnetName).Value;
// ピアリングの一覧を取得してループ処理
foreach (var peering in vnet.GetVirtualNetworkPeerings())
{
Console.WriteLine($"ピアリング名: {peering.Data.Name}");
Console.WriteLine($"ステータス: {peering.Data.PeeringState}");
Console.WriteLine($"リモートVNet ID: {peering.Data.RemoteVirtualNetwork.Id}");
Console.WriteLine("----------------------------------");
}
上記のプログラムを実行すると、コンソールには以下のような実行結果が出力されます。これにより、管理画面を開かなくても現在の接続状況を一目で把握できます。
ピアリング名: MyPeeringToVNet2
ステータス: Connected
リモートVNet ID: /subscriptions/xxx/resourceGroups/MyRG/providers/Microsoft.Network/virtualNetworks/VNet2
----------------------------------
ピアリング名: GlobalPeeringToUS
ステータス: Connected
リモートVNet ID: /subscriptions/yyy/resourceGroups/US-RG/providers/Microsoft.Network/virtualNetworks/VNet-US
----------------------------------
SQL Serverでのデータ操作とネットワーク分離
実務におけるVNetピアリングの最も価値ある活用シーンの一つが、データベース層の分離です。例えば、顧客情報を管理するデータベースを「DB-VNet」に配置し、Webアプリケーションが動く「Web-VNet」からのみアクセスを許可する構成を考えます。ピアリングによって、あたかも隣にあるサーバーを操作するようにSQLを実行できます。
まず、現在のデータベースに登録されているユーザー情報のテーブルを確認してみましょう。
id | user_name | email | location | status
---+------------+--------------------+--------------+---------
1 | 佐藤健一 | sato@example.com | Tokyo | Active
2 | 高橋美紀 | taka@example.com | Osaka | Active
3 | 伊藤博 | ito@example.com | Nagoya | Inactive
4 | 渡辺直美 | nabe@example.com | Fukuoka | Active
5 | 小林誠 | koba@example.com | Sapporo | Active
このテーブルに対して、ピアリング経由で特定の条件に合致するユーザーを抽出するSQLを実行します。通信は完全にプライベートネットワーク内で行われるため、外部漏洩のリスクを最小限に抑えられます。
SELECT user_name, email, location
FROM user_master
WHERE status = 'Active' AND location != 'Tokyo';
実行結果は以下の通りです。このように、VNetピアリングを活用することで、セキュアかつ高速にデータを取得できるインフラが整います。
user_name | email | location
----------+--------------------+----------
高橋美紀 | taka@example.com | Osaka
渡辺直美 | nabe@example.com | Fukuoka
小林誠 | koba@example.com | Sapporo
注意すべき「推移的接続」とハブ構成
導入時に陥りやすいのが「AとB、BとCが繋がっていれば、AとCも通信できるはずだ」という思い込みです。これを「推移的接続」と呼びますが、Azure VNetピアリング単体ではこの機能は提供されていません。もし複数のVNetを網羅的に接続したい場合は、ハブ・アンド・スポーク構成を採用し、ハブとなるVNetに「Azure Firewall」や「VPNゲートウェイ」を配置してパケットを転送(ゲートウェイ通過)させる必要があります。
また、IPアドレス空間の重複禁止という大原則も忘れてはなりません。将来的なネットワーク拡張を見越し、各VNetに割り当てるCIDRブロック(アドレス範囲)が重ならないよう、設計段階で慎重にIPアドレスを割り振ることが、長期的な運用を成功させる鍵となります。
先生
「さて、一通りAzure VNetピアリングについて学びましたが、理解は深まりましたか?」
生徒
「はい!最初は難しい設定が必要だと思っていましたが、Microsoftのバックボーンを使って直接繋げるというのは驚きでした。まるで一つの大きなLANを作っているような感覚ですね。」
先生
「その通りです。特にグローバルVNetピアリングを使えば、地球の裏側にあるサーバーとも安全に通信できる。これは大きなメリットですよ。何か気になる点はありましたか?」
生徒
「料金面が少し気になります。設定は無料でも、データの移動にお金がかかるんですよね。大量のバックアップデータを別リージョンに送る時は、コスト計算をしっかりしておかないと怖いです。」
先生
「鋭いですね。転送量に応じた従量課金なので、大規模なデータ転送を行う場合は事前に試算しておくのが賢明です。それから、IPアドレスが重なってはいけないというルールも覚えていますか?」
生徒
「もちろんです!家のアドレスが近所と同じだったら手紙が届かないのと同じですよね。最初にネットワーク全体の設計図を描くことの大切さがよくわかりました。」
先生
「素晴らしい例えです!さらにC#やPythonを使って自動化もできるので、手動設定に慣れたら次はコードでの管理にも挑戦してみてください。クラウドエンジニアとしての幅がぐっと広がりますよ。」
生徒
「ありがとうございます!まずは自分の環境で小さなVNetを二つ作って、実際にpingを通すところから始めてみます。NSG(ネットワークセキュリティグループ)の設定ミスにも気をつけます!」