Azure Private Linkをオンプレミスから利用!ExpressRoute経由の閉域アクセス完全解説
生徒
「会社のオンプレミス環境から、インターネットを通さずにAzureのサービスを安全に使いたいのですが、何か良い方法はありますか?」
先生
「それなら、Azure Private Link(アジュール プライベート リンク)とExpressRoute(エクスプレスルート)を組み合わせるのが最適ですよ。」
生徒
「ExpressRoute(エクスプレスルート)経由でプライベートな接続ができるんですね!具体的にどういう仕組みなんですか?」
先生
「一言で言うと、クラウド上のサービスを自社ネットワーク内のプライベートIPアドレスで呼び出せる仕組みです。さっそく、詳しく解説していきましょう!」
1. Azure Private Linkとは?初心者向け基礎知識
Azure Private Link(アジュール プライベート リンク)は、Azure上のサービス(SQL DatabaseやStorage Accountなど)を、仮想ネットワーク(VNet)内のプライベートエンドポイントとして公開する仕組みです。通常、クラウドサービスはインターネット経由でアクセスするのが一般的ですが、これを利用することで、インターネットに一切公開することなく、自分たち専用の「プライベートな道」を通って通信が可能になります。
なぜこれが重要かというと、セキュリティ(情報保護)の観点からです。インターネットに公開されている窓口(パブリックエンドポイント)を閉じてしまうことで、サイバー攻撃のリスクを劇的に減らすことができます。特に金融機関や医療機関など、高い信頼性が求められるシステムでは、この閉域網(へいきもう)接続が必須となるケースが多いです。
2. ExpressRoute(エクスプレスルート)の役割と仕組み
オンプレミス(自社内にサーバーを置く形態)からAzureを繋ぐ際、最も安定して高速なのがExpressRoute(エクスプレスルート)です。これはインターネットを経由しない専用線(せんようせん)接続サービスです。VPN(仮想専用線)も安全ですが、インターネットを通り道にするため、通信速度が周囲の利用状況に左右されることがあります。それに対して、ExpressRouteは帯域が保証されており、遅延が少なく、安定したパフォーマンスを発揮します。
Private LinkとExpressRouteを組み合わせると、オンプレミスの端末から見て、Azure上のデータベースがまるで「隣の部屋にあるサーバー」と同じように、社内IPアドレス(10.0.0.5など)でアクセスできるようになります。これがハイブリッドクラウド構成における、究極に安全な通信環境と言えるでしょう。
3. 接続に必要なコンポーネントと設定の流れ
この環境を構築するためには、いくつかの重要な部品を準備する必要があります。まず、Azure側にVirtual Network Gateway(仮想ネットワーク ゲートウェイ)を作成し、プロバイダー経由で物理的な専用線を接続します。次に、アクセスしたいサービス(例:Azure Storage)に対して、Private Linkを有効にします。すると、VNetの中に「プライベートエンドポイント」というネットワークインターフェースが作成されます。
ここで初心者が躓きやすいのが、IPアドレスの設計です。オンプレミスで使用しているIPアドレスの範囲と、Azure側の仮想ネットワークで使用するIPアドレスの範囲が重ならないように(重複しないように)設計しなければなりません。重なってしまうと、どちらのサーバーに通信を送ればいいか分からなくなり、エラーが発生してしまいます。
# Azure CLIを使用してプライベートエンドポイントの状態を確認する例
az network private-endpoint show \
--name myPrivateEndpoint \
--resource-group myResourceGroup
4. プライベートDNSゾーンによる名前解決の重要性
ネットワークが繋がっても、それだけでは不十分です。私たちは通常「10.5.0.4」という数字ではなく、「myserver.database.windows.net」といったドメイン名でアクセスします。Private Linkを使う場合、この名前解決をどう処理するかが鍵となります。これを解決するのが「プライベートDNS(ドメイン ネーム システム)ゾーン」です。
オンプレミスからアクセスする場合、社内のDNSサーバーからAzureのプライベートDNSに問い合わせを転送(フォワード)する設定が必要です。この設定を正しく行わないと、名前は解決できても、インターネット側の公開IPアドレスを指してしまい、せっかく作った閉域ルートを通ってくれません。名前解決まで含めて初めて、Private Linkの恩恵を受けることができます。
# 名前解決がプライベートIPになっているか確認するコマンド(nslookup)
nslookup my-storage-account.privatelink.blob.core.windows.net
# 期待される結果: 10.x.x.x (プライベートIPアドレス)
5. Linux環境からの疎通確認とコマンド操作
設定が完了したら、実際に通信ができるか確認します。Linux(リナックス)端末から疎通(そつう)確認を行う際は、nc(netcat)やtelnetといったコマンドをよく使用します。例えば、Azure SQL Databaseへの接続を確認する場合、ポート番号1433が開いているかを確認します。これにより、ファイアウォールの設定が正しいかどうかも判断できます。
初心者はまず、単純な疎通確認から始めましょう。ネットワークのトラブルシューティング(問題解決)では、一歩ずつ原因を切り分けることが大切です。まずはIPアドレスで繋がるか、次に名前で解決できるか、最後にアプリケーションからアクセスできるか、という順番で進めます。
nc -zv my-private-link-service.10.0.0.5 443
Connection to my-private-link-service.10.0.0.5 443 port [tcp/https] succeeded!
6. データベースへのアクセス例とSQL実行
Private Link経由で接続されたデータベースに対して、どのようにデータを操作するか見てみましょう。今回は例として、オンプレミス側の管理端末からAzure SQL Databaseへ接続し、簡単なユーザー情報を取得する場面を想定します。ネットワーク的には専用線を通っていますが、操作感は通常のデータベースと全く変わりません。
以下は、接続確認用のサンプルテーブルと、それに対してクエリ(命令)を発行する例です。セキュリティが確保されているため、安心して機密性の高いデータを扱うことができます。プライベートな環境下であれば、外部からの不当なアクセスを心配せずに開発に集中できるのが大きなメリットです。
id | username | department | last_login
---+----------+------------+-------------------
1 | 田中一郎 | 開発部 | 2026-03-31 10:00
2 | 佐藤美咲 | 営業部 | 2026-03-31 09:30
3 | 高橋健太 | 人事部 | 2026-03-30 18:00
4 | 伊藤あおい | 法務部 | 2026-03-31 08:45
-- プライベートリンク経由で接続したDBから特定の部署を抽出
SELECT username, last_login
FROM employees
WHERE department = '開発部';
username | last_login
---------+-------------------
田中一郎 | 2026-03-31 10:00
7. C#を使ったプログラムからの接続実装
次に、プログラミング言語のC#(シーシャープ)を使って、Private Link経由でストレージにアクセスするコードを見てみましょう。Azure SDK(開発キット)を使用する場合、接続文字列の中にプライベートなエンドポイント情報を記述します。コード自体はインターネット経由の場合とほとんど変わりませんが、裏側の経路が安全であることが保証されています。
以下のサンプルは、Azure Storage(アジュール ストレージ)からデータを取得するイメージです。初心者の方は、まず「接続文字列(ConnectionString)」というものが、サービスへ繋ぐための鍵であることを覚えておきましょう。Private Linkを使っている場合、この鍵を使って接続しに行く先が、自社ネットワーク内のIPアドレスになります。
using System;
using Azure.Storage.Blobs;
// プライベートエンドポイント経由での接続例
string connectionString = "DefaultEndpointsProtocol=https;AccountName=mystorage;AccountKey=xxx;EndpointSuffix=core.windows.net";
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
Console.WriteLine("ストレージへの接続に成功しました。");
8. セキュリティ面でのメリットと運用の注意点
Private LinkとExpressRouteの組み合わせには、多くのセキュリティ上の利点(メリット)があります。まず、データ漏洩(じょうほうろうえい)のリスクが極めて低くなります。データの通り道が完全に分離されているため、公共のインターネット空間をデータが漂うことがありません。また、アクセスコントロールが容易になり、特定のVNetやオンプレミスからのみ通信を許可するといった細かな制御が可能です。
一方で、運用の注意点もあります。専用線であるExpressRouteは、導入コスト(初期費用や月額料金)が通常のインターネット回線よりも高価です。また、回線自体のメンテナンスや障害時のバックアップ(冗長化)についても検討しておく必要があります。重要なシステムであれば、2本の回線を引いて冗長性を確保するのが一般的です。
9. トラブルシューティングのコツ
もし通信が繋がらない場合、どこに原因があるかを突き止める(切り分け)作業が必要です。まず、オンプレミスのルーターからExpressRouteの対向先へPing(ピング)が届くか確認します。次に、Azure側のゲートウェイまで到達しているかを見ます。最後に、プライベートエンドポイントの「承認状態」が「Approved(承認済み)」になっているかを確認してください。
初心者の方は、つい「全部壊れているのではないか」と不安になりがちですが、ネットワークの問題は大抵の場合、DNSの設定ミスか、NSG(ネットワーク セキュリティ グループ)という火の壁(ファイアウォール)での遮断が原因です。焦らず、一つ一つの扉が開いているか確認していきましょう。Azureポータルにある「接続モニター」というツールを使うと、どこで通信が止まっているか視覚的に確認できるので便利です。
# ルーティング情報の確認例(簡易版)
ip route show
default via 192.168.1.1 dev eth0 proto static
10.0.0.0/16 via 10.1.0.1 dev eth1
10. 今後の展望とモダンなネットワーク構成
現在は、Private Linkだけでなく、Azure Virtual WAN(仮想ワン)など、さらに大規模な拠点を一括で管理する仕組みも普及しています。技術は日々進化していますが、その根幹にある「いかに安全に、かつ高速にデータを運ぶか」というテーマは変わりません。Private LinkとExpressRouteの基本をマスターしておけば、将来より複雑なインフラ設計に携わる際も、その知識が強力な武器になります。
インフラエンジニアを目指す方は、まずは自分で小さな環境を作ってみることから始めましょう。理論だけでなく、実際に設定画面を触り、コマンドを叩いて通信が成功した時の喜びは、何物にも代えがたい学習体験になります。一歩ずつ、着実にスキルを磨いていってくださいね。
まとめ
今回の記事では、Azure Private Link(アジュール プライベート リンク)とExpressRoute(エクスプレスルート)を組み合わせた、高度にセキュアな閉域網接続について詳しく解説してきました。オンプレミス環境からクラウド上のリソースへアクセスする際、インターネットを経由しない専用の通り道を作ることは、現代のシステム構築において極めて重要です。特に機密情報を扱う企業にとって、パブリックエンドポイントを排除し、プライベートなIPアドレス空間だけで通信を完結させる手法は、セキュリティの最終防衛ラインとも言えます。
システム構成の核心とメリット
この構成の最大の利点は、外部からの攻撃経路(アタックサーフェス)を物理的・論理的に遮断できる点にあります。ExpressRouteによる帯域保証と低遅延、そしてPrivate Linkによる「サービスへの直接的な差し込み」が合わさることで、クラウドがまるで社内LANの一部であるかのように振る舞います。これは、パフォーマンスの安定性だけでなく、運用担当者の心理的な安心感にも繋がります。
また、プライベートDNSゾーンの適切な設計が、このシステムの成否を分けるポイントであることも学びました。ドメイン名が正しくプライベートIPに解決されなければ、せっかくの専用線も宝の持ち腐れとなってしまいます。ネットワーク層からアプリケーション層まで、一貫した名前解決の設計が求められます。
実践的な実装例:C#でのセキュアなアクセス
開発者の視点では、Private Linkを導入してもコードの書き方が劇的に変わるわけではありません。しかし、内部的には安全な経路を通るため、接続文字列の管理やネットワークセキュリティグループ(NSG)の設定がより重要になります。以下に、Azure SQL Databaseへ接続してデータを取得する、より詳細なC#のサンプルプログラムを示します。
using System;
using System.Data.SqlClient;
namespace AzurePrivateLinkApp
{
class Program
{
static void Main(string[] args)
{
// プライベートエンドポイント経由の接続文字列例
// ServerにはプライベートDNSで解決されるFQDNを指定します
string connectionString = "Server=tcp:my-private-sql.database.windows.net,1443;Initial Catalog=MyDatabase;Persist Security Info=False;User ID=adminUser;Password=SecurePassword123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
Console.WriteLine("i bi-check-circle-fill データベースへの閉域接続に成功しました。");
string sql = "SELECT id, app_name, status FROM system_status";
SqlCommand command = new SqlCommand(sql, connection);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"{reader["id"]} : {reader["app_name"]} - {reader["status"]}");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("i bi-exclamation-triangle-fill エラーが発生しました: " + ex.Message);
}
}
}
}
データベースの運用イメージ
次に、上記のプログラムがアクセスするデータベース内の状況を確認してみましょう。SQLを実行する前のテーブル状態は以下の通りです。
id | app_name | status | last_update
---+-------------+-------------+-------------------
1 | PortalSite | Running | 2026-03-31 10:00
2 | AuthEngine | Maintenance | 2026-03-31 09:30
3 | DataBatch | Running | 2026-03-31 11:00
4 | ApiGateway | Running | 2026-03-31 10:45
5 | LogManager | Stopped | 2026-03-30 23:00
特定の条件でデータを抽出するSQLを実行します。
-- 稼働中のアプリケーションのみを抽出
SELECT app_name, status
FROM system_status
WHERE status = 'Running';
実行結果は以下の通り、閉域網を経由して安全に取得されます。
app_name | status
------------+---------
PortalSite | Running
DataBatch | Running
ApiGateway | Running
メインフレーム等との連携:COBOLでの視点
エンタープライズ環境では、オンプレミスのメインフレームからAzure上のデータを利用するケースもあります。その際のインターフェースとなるプログラムのイメージ(COBOL風)も確認しておきましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. AZURE-CONNECT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-RESULT-CODE PIC X(02).
88 WS-SUCCESS VALUE "00".
01 WS-REST-API-URL PIC X(100) VALUE "https://my-private-api.azurewebsites.net/data".
PROCEDURE DIVISION.
DISPLAY "i bi-cpu-fill オンプレミス資産からAzure Private Link経由でアクセス開始".
PERFORM CONNECT-TO-AZURE-GATEWAY.
IF WS-SUCCESS
DISPLAY "データ連携が正常に完了しました。"
ELSE
DISPLAY "ネットワーク経路を確認してください。"
END-IF.
STOP RUN.
CONNECT-TO-AZURE-GATEWAY.
* 実際にはミドルウェアを経由してExpressRouteを通ります
SET WS-RESULT-CODE TO "00".
疎通確認とトラブルシューティングの重要性
構築の最終段階では、必ずコマンドラインでの検証が必要です。特に、ルーティングがインターネットに向いていないか、正しいゲートウェイを通っているかを厳密にチェックします。
# 指定したAzureリソースのプライベートIPに対してポート疎通を確認
curl -I http://10.1.0.5:80
HTTP/1.1 200 OK
Content-Type: text/html
Date: Tue, 31 Mar 2026 11:05:00 GMT
このように、各レイヤーでの確認を怠らないことが、安定したハイブリッドクラウド環境を維持する秘訣です。Azure Private LinkとExpressRouteの活用は、単なる技術的な選択ではなく、企業の信頼性を支える重要なインフラ戦略と言えるでしょう。
生徒
「先生、まとめを読んでさらによく分かりました!Private Linkを使うと、本当にAzureのサービスが自分の会社のネットワークの一部みたいになるんですね。でも、設定が複雑そうで少し不安です。」
先生
「その通りです。特にDNSの設定や、オンプレミスとAzureのIPアドレスが重ならないようにする設計は、最初にしっかりやる必要があります。でも、一度作ってしまえば、インターネットの脅威から切り離された非常に強力な環境になりますよ。」
生徒
「サンプルコードを見て安心しました。C#のプログラム側では、特別なライブラリを入れなくても、接続先をプライベートなものに変えるだけで動くんですね。COBOLの例もあって、古いシステムとの連携イメージも湧きました!」
先生
「そうですね、既存の資産を活かしつつ、クラウドの最新機能を取り入れるのがモダンなエンジニアリングです。もし繋がらないときは、さっきのcurlコマンドやnslookupを使って、どこで止まっているか探るのを忘れないでくださいね。」
生徒
「はい!まずは小さなテスト環境で、プライベートエンドポイントを作って、社内LANを想定した仮想ネットワークから接続できるか試してみます。セキュリティ第一で頑張ります!」
先生
「その意気です。一歩ずつ理解を深めていけば、複雑な構成も怖くありません。Azure Private Linkはインフラエンジニアにとっての強力な武器になりますから、ぜひマスターしてください!」