はじめに
近年、セキュリティ意識の高まりにより、Azure SQL Database をインターネットに公開せず、「Private Endpoint」 を使って閉域網(仮想ネットワーク内)に閉じ込める構成が一般的になっています。
これはセキュリティの観点では有効ですが、開発者にとっては一つの悩みの種になります。
インターネットから繋がらないから、手元の PC(Power BI Desktop)から直接データが見れない……

仕方なく、Azure 上の作業用 VM にリモートデスクトップ接続して開発を行おうとしても、VM のスペック(メモリ不足など)や画面の描画遅延に悩まされ、ストレスを感じている方も多いのではないでしょうか。
そこで解決策となるのが、Azure VPN Gateway を使った「ポイント対サイト接続(P2S VPN)」 です。 これを導入することで、インターネットへの公開を避けつつ、あたかも「社内 LAN にケーブルを挿している」かのように、手元のハイスペックな PC から安全にデータベースへ接続できるようになります。
本記事では、この快適な開発環境を構築するための全手順を解説します。
- 概要: Azure VPN(P2S)の仕組みとメリット
- 構築: 証明書認証を使った VPN Gateway の設定手順
- 重要: つながらない最大の原因「名前解決(hosts)」の対処法
今回の構成概要
本記事で構築する環境の全体像は以下の通りです。 「管理作業」と「開発作業」でルートを使い分けています。
通信の流れ
[管理者 PC] (HTTPS) [Azure Bastion] [作業用 VM][Private SQL]
データベースの作成やメンテナンスなど、高い安定性が求められる作業で使用します。
[ローカル PC] (P2S VPN トンネル) [VPN Gateway] [Azure VNet] [Private SQL]
インターネットを通らず、暗号化されたトンネルを経由して SQL Database に直接アクセス
役割分担:なぜ使い分けるのか?
| 役割 | 使用する環境 | 目的とメリット |
|---|---|---|
| DB 管理者 (インフラ担当) | Bastion 経由の VM | 【安定・安全】 Azure バックボーン内での作業になるため通信が途切れにくく、DB作成やDDL変更などの重要作業を安全に行えます。 |
| BI 開発者 (アプリ担当) | VPN 経由のローカルPC | 【快適・高速】 手元の PC の豊富なメモリや CPU を使い、Power BI Desktop のような重いツールを快適に動かせます。 |



今回は、まず「管理ルート(VM)」を使って土台となるデータを準備し、その後に「開発ルート(VPN)」を構築して接続する順序で進めていきます。
手順
テストデータの準備(Bastion VM 経由)
まずは「管理ルート」を使って、SQL Database にテストデータを投入します。 この作業を通じて、「SQL Database が正常に稼働しており、VNet 内から正しくアクセスできること」 を確定させます。
- 管理用 VM へのログイン
Azure Portal から Bastion を経由して、VNet 内にある管理用 VM にログインしてください。
- VS Code での接続
VM 上で VS Code を起動し、拡張機能「SQL Server (mssql)」を使って Private SQL Database に接続します。 (SSMS でも構いませんが、今回は軽量な VS Code を使用します)
- Server name: Azure Portal で確認した SQL Server 名(例:
sql-private.database.windows.net) - Database: 作成済みのデータベース名
- User / Password: 管理者アカウント情報
- テストデータの作成
接続できたら、以下のクエリを実行してテーブル作成とデータ投入を行います。 ※ 何度実行してもエラーにならないよう、再作成用のコマンドにしています。
-- 既存のテーブルがあれば削除(リセット)
DROP TABLE IF EXISTS SalesData;
-- テーブル作成
CREATE TABLE SalesData (
ID int IDENTITY(1,1) PRIMARY KEY,
Product nvarchar(50),
Amount int,
SalesDate date
);
-- テストデータ投入
INSERT INTO SalesData (Product, Amount, SalesDate) VALUES
('Laptop', 120000, '2026-01-20'),
('Mouse', 3000, '2026-01-21'),
('Keyboard', 8000, '2026-01-22'),
('Monitor', 25000, '2026-01-23'),
('Headset', 5000, '2026-01-23');
-- 確認用
SELECT * FROM SalesData;- 実行結果の確認
実行後に結果ウィンドウにデータ一覧が表示されれば成功です。


右下の対象 DB は「master」以外(例: test-db)に変更してください。



💡 VS Code のステータスバー(画面の一番右下) を見てください。master と表示されていませんか?
そこをクリックすると、データベースの一覧が表示されるので、ご自身が作成したデータベース(例: test-db) を選択してください。
事前準備: ゲートウェイサブネットの作成
VPN Gateway を配置するには、仮想ネットワーク内に GatewaySubnet という特定の名前を持つ専用サブネットが必要です。まずはこれを作成します。
- Azure Portal で、SQL Database がある 仮想ネットワーク(VNet)のリソースを開きます。
- 左メニューの [サブネット] をクリックします。
- 画面上部にある [+ ゲートウェイ サブネット] をクリックします。
- ※ 普通の「+ サブネット」ではなく、必ず「+ ゲートウェイ サブネット」を選んでください。名前が自動的に
GatewaySubnetに固定されます。
- ※ 普通の「+ サブネット」ではなく、必ず「+ ゲートウェイ サブネット」を選んでください。名前が自動的に
- サブネット アドレス範囲: デフォルトのまま(例:
10.0.2.0/27など)で OK ですが、推奨は/27以上です。 - [保存] をクリックします。
これで「場所」の確保ができました。
Azure VPN Gateway の作成
ローカル PC からの接続を受け入れる「入り口」となる 仮想ネットワーク ゲートウェイ(VPN Gateway)を作成します。
- リソースの作成開始
Azure Portal の上部検索窓に「virtual network gateway(Marketplace)」と入力し、サービスを選択します。
- 基本設定(Basics)
以下の設定値を入力します。
- サブスクリプション / リソースグループ: VM や SQL と同じものを選択
- 名前: 任意の名前(例:
vpngw-test) - 地域: 必ず VNet と同じ地域(例: Japan West)を選択
- ゲートウェイの種類:
VPN - SKU:
VpnGw1 - 仮想ネットワーク: SQL Database がある VNet を選択
- 💡ここで VNet を選ぶと、自動的に先ほど作った
GatewaySubnetが認識されます。
- 💡ここで VNet を選ぶと、自動的に先ほど作った
- パブリック IP アドレス: 「新規作成」を選択し、適当な名前を付けます。
入力が終わったら「確認と作成」→「作成」をクリックします。



VPN Gateway のデプロイは、完了までに通常 20〜30分程度かかります。他の作業を進めるなりして、気長に待ちましょう。
ポイント対サイト(P2S)構成の設定
VPN Gateway が完成したら、そこを通るための「鍵(証明書)」を作成し、Azure に登録します。
- 証明書の作成(PowerShell)
ローカル PC で PowerShell を「管理者として実行」し、以下のコマンドを順番に実行してください。 これで「ルート証明書(親)」と、そこから署名された「クライアント証明書(子)」が作成され、PC に自動インストールされます。
# ① ルート証明書の作成
$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature `
-Subject "CN=P2SRootCert" -KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 2048 `
-CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign
# ② クライアント証明書の作成(ルート証明書で署名)
New-SelfSignedCertificate -Type Custom -DnsName P2SChildCert -KeySpec Signature `
-Subject "CN=P2SChildCert" -KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 2048 `
-CertStoreLocation "Cert:\CurrentUser\My" `
-Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")- ルート証明書のデータを取得
作成したルート証明書の「公開鍵データ」を取り出します。
- Windows キー +
Rを押し、certmgr.mscと入力して実行 - [個人] > [証明書] を開くと、
P2SRootCertがあるので、右クリック > [すべてのタスク] > [エクスポート] - ウィザードでは以下を選択:
- 「いいえ、秘密キーをエクスポートしません」
- 「Base-64 encoded X.509 (.CER)」
- 適当な場所(デスクトップ等)に
root.cerとして保存します。 - 保存した
root.cerを メモ帳 で開きます。 -----BEGIN CERTIFICATE-----と-----END CERTIFICATE-----の行を除いた、中身の文字列だけをすべてコピーします。
- Azure 側での設定(P2S 構成)
Azure Portal に戻り、作成した VPN Gateway の画面を開きます。
- 左メニューの [ポイント対サイトの構成] をクリック
- [今すぐ構成] をクリックし、以下を設定します。
- アドレス プール: VPN クライアントに割り当てる IP 範囲(例:
172.16.0.0/24)- ※ VNet のアドレス範囲と重ならないものを指定してください。
- トンネルの種類:
IKEv2 and SSTP (SSL) - 認証の種類:
Azure 証明書
- アドレス プール: VPN クライアントに割り当てる IP 範囲(例:
- ルート証明書 のセクションに以下を入力します。
- 名前: 任意の名前(例:
MyRootCert) - パブリック証明書データ: 先ほどメモ帳からコピーした文字列を貼り付け。
- 名前: 任意の名前(例:
- 画面上部の [保存] をクリックします。
- VPN クライアントのダウンロードとインストール
保存が完了すると、画面上部に [VPN クライアントのダウンロード] というボタンが現れるのでクリックします。
- ダウンロードされた Zip ファイルを解凍します。
- 自分の PC に合ったフォルダ(通常は
WindowsAmd64)を開き、VpnClientSetupAmd64.exeを実行してインストールします。- ※ SmartScreen の警告が出たら「詳細情報」→「実行」をクリック
これで、PC の「ネットワーク設定」に VPN 接続設定が追加されました。
インストーラーを実行しても、「完了しました」などのメッセージは一切表示されません。 一瞬黒い画面(コマンドプロンプト)が出てすぐに消えるか、場合によっては何も起きないように見えますが、これで正常にインストールされています。 「えっ、失敗した?」と不安にならず、次のステップへ進んでください。



マイクロソフトさん、せめて「完了しました」くらい出してよ・・・
【重要】hosts ファイルの設定(名前解決)
VPN クライアントをインストールして「接続」ボタンを押せば、VPN 自体は繋がります。 しかし、そのまま Power BI Desktop から SQL Database に接続しようとしても、おそらくエラーになります。
なぜ繋がらないのか?(名前解決の罠)
PC は test-sqlsrv.database.windows.net という名前(FQDN)にアクセスする際、インターネット上の DNS サーバーに問い合わせを行います。 すると、DNS サーバーは「パブリック IP アドレス」を返してしまいます。
しかし、今回の SQL Database は Private Endpoint 以外の接続(パブリックアクセス)を遮断しているため、接続は拒否されます。 「VPN トンネルはあるのに、PC が玄関(パブリック IP)に向かって突撃してしまっている」 状態です。
これを解決するために、PC 内の電話帳である hosts ファイル を書き換えて、「その名前の行き先は、パブリックじゃなくてこのプライベート IP だよ」と教えてあげる必要があります。
- SQL Database のプライベート IP を確認
まず、正解となる IP アドレスを調べます。
- Azure Portal で対象の SQL Database を開きます。
- 左メニューの [ネットワーク] > [プライベート アクセス] タブを開きます。
- 作成済みの プライベート エンドポイント のリンクをクリックします。
- [DNS 構成] メニューを見ると、割り当てられた IP アドレス(例:
10.0.0.6)が書いてあるのでメモします。


- メモ帳を「管理者として実行」する
hosts ファイルはシステムファイルなので、普通の開き方では保存できません。
- Windows のスタートメニューで「メモ帳」を検索します。
- アイコンを 右クリック し、[管理者として実行] を選択します。
- hosts ファイルを編集する
- メモ帳の [ファイル] > [開く] で、以下のパスに移動します。
C:\Windows\System32\drivers\etc- ※ 右下のフィルターを「テキスト文書 (.txt)」から「すべてのファイル (.*)」に変更しないと見えません。
hostsというファイルを選択して開きます。- ファイルの末尾に、以下の形式で 1 行追記します。
[プライベートIP] [SQL DatabaseのFQDN]
# Azure Private SQL Mapping
10.0.0.6 test-sqlsrv.database.windows.net- 設定の確認(Ping コマンド)
設定が反映されたか確認します。 コマンドプロンプトを開き、SQL Database に対して ping を打ちます。
ping test-sqlsrv.database.windows.net- 成功:
10.0.1.5 からの応答...(または IP が表示されてタイムアウト) - 失敗: パブリック IP らしき数字が表示される場合は、hosts の保存に失敗しています。



これで、PC は迷わず VPN トンネルを通ってデータベースに向かうようになりました。
ローカル Power BI Desktop からの接続確認
- VPN の接続
インストールした VPN 設定は、Windows のネットワーク設定の中に隠れています。
- Windows タスクバー右下の 「ネットワークアイコン(Wi-Fi やスピーカーのマーク)」 をクリックします。
- 開いたメニューの中に、仮想ネットワークと同じ名前(例: vnet-test) の接続先が追加されているはずです。
- それをクリックし、「接続」 ボタンを押します。


認証画面などは出ず、すんなりと「接続済み」になれば、VPN トンネルが開通しています。PC は、仮想的に Azure の VNet 内部に存在している状態です。
- Power BI Desktop からの接続
手元のローカル PC で Power BI Desktop を起動します。
- 「データを取得」 > 「SQL Server」 を選択
- 以下の通りに入力して「OK」をクリック
- サーバー:
test-sqlsrv.database.windows.net(hosts に書いた FQDN) - データベース: 作成したデータベース名(省略可)
- データ接続モード: インポート
- サーバー:
- 認証画面:
- 必ず 「データベース」 タブを選択してください(Windows 認証は使えません)
- 管理用 VM で設定した SQL ユーザー名とパスワードを入力して「接続」
- データの取得成功
ナビゲーター画面が開き、先ほど Bastion 経由で作成した SalesData テーブル が表示されれば……
成功です🎉
あとは「読み込み」をクリックすれば、ローカル PC リソースを使って、レポート開発を行えます。





VPN を切断すれば接続は切れ、インターネット側からは一切アクセスできないセキュアな状態に戻ります。
まとめ
本記事では、「Azure VPN Gateway(P2S)」 を活用して、閉域網内の SQL Database にローカル PC から安全に接続する方法を解説しました。
- 快適さ: 使い慣れたローカル PC で開発できる。
- 安全性: インターネットにポートを開けず、暗号化された VPN トンネルのみを通す。
- 裏技: VPN で名前解決できない問題は、ローカルの
hostsファイル で解決する。
以上、最後までお読みいただきありがとうございました。








