【Azure】ローカル PC から閉域網の SQL へ安全に接続 | P2S VPN 経由でPower BI を使用する方法

  • URLをコピーしました!
目次

はじめに

近年、セキュリティ意識の高まりにより、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)」を構築して接続する順序で進めていきます。

手順

STEP

テストデータの準備(Bastion VM 経由)

まずは「管理ルート」を使って、SQL Database にテストデータを投入します。 この作業を通じて、「SQL Database が正常に稼働しており、VNet 内から正しくアクセスできること」 を確定させます。

  1. 管理用 VM へのログイン

Azure Portal から Bastion を経由して、VNet 内にある管理用 VM にログインしてください。

  1. 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: 管理者アカウント情報
  1. テストデータの作成

接続できたら、以下のクエリを実行してテーブル作成とデータ投入を行います。 ※ 何度実行してもエラーにならないよう、再作成用のコマンドにしています。

-- 既存のテーブルがあれば削除(リセット)
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;
  1. 実行結果の確認

実行後に結果ウィンドウにデータ一覧が表示されれば成功です。

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

💡 VS Code のステータスバー(画面の一番右下) を見てください。
master と表示されていませんか?
そこをクリックすると、データベースの一覧が表示されるので、ご自身が作成したデータベース(例: test-db) を選択してください。

STEP

事前準備: ゲートウェイサブネットの作成

VPN Gateway を配置するには、仮想ネットワーク内に GatewaySubnet という特定の名前を持つ専用サブネットが必要です。まずはこれを作成します。

  1. Azure Portal で、SQL Database がある 仮想ネットワーク(VNet)のリソースを開きます。
  2. 左メニューの [サブネット] をクリックします。
  3. 画面上部にある [+ ゲートウェイ サブネット] をクリックします。
    • ※ 普通の「+ サブネット」ではなく、必ず「+ ゲートウェイ サブネット」を選んでください。名前が自動的に GatewaySubnet に固定されます。
  4. サブネット アドレス範囲: デフォルトのまま(例: 10.0.2.0/27 など)で OK ですが、推奨は /27 以上です。
  5. [保存] をクリックします。

これで「場所」の確保ができました。

STEP

Azure VPN Gateway の作成

ローカル PC からの接続を受け入れる「入り口」となる 仮想ネットワーク ゲートウェイ(VPN Gateway)を作成します。

  1. リソースの作成開始

Azure Portal の上部検索窓に「virtual network gateway(Marketplace)」と入力し、サービスを選択します。

  1. 基本設定(Basics)

以下の設定値を入力します。

  • サブスクリプション / リソースグループ: VM や SQL と同じものを選択
  • 名前: 任意の名前(例: vpngw-test
  • 地域: 必ず VNet と同じ地域(例: Japan West)を選択
  • ゲートウェイの種類: VPN
  • SKU:VpnGw1
  • 仮想ネットワーク: SQL Database がある VNet を選択
    • 💡ここで VNet を選ぶと、自動的に先ほど作った GatewaySubnet が認識されます。
  • パブリック IP アドレス: 「新規作成」を選択し、適当な名前を付けます。

入力が終わったら「確認と作成」→「作成」をクリックします。

VPN Gateway のデプロイは、完了までに通常 20〜30分程度かかります。他の作業を進めるなりして、気長に待ちましょう。

STEP

ポイント対サイト(P2S)構成の設定

VPN Gateway が完成したら、そこを通るための「鍵(証明書)」を作成し、Azure に登録します。

  1. 証明書の作成(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")
  1. ルート証明書のデータを取得

作成したルート証明書の「公開鍵データ」を取り出します。

  1. Windows キー + R を押し、certmgr.msc と入力して実行
  2. [個人] > [証明書] を開くと、P2SRootCert があるので、右クリック > [すべてのタスク] > [エクスポート]
  3. ウィザードでは以下を選択:
    • 「いいえ、秘密キーをエクスポートしません」
    • 「Base-64 encoded X.509 (.CER)」
  4. 適当な場所(デスクトップ等)に root.cer として保存します。
  5. 保存した root.cerメモ帳 で開きます。
  6. -----BEGIN CERTIFICATE----------END CERTIFICATE----- の行を除いた、中身の文字列だけをすべてコピーします。
  1. Azure 側での設定(P2S 構成)

Azure Portal に戻り、作成した VPN Gateway の画面を開きます。

  1. 左メニューの [ポイント対サイトの構成] をクリック
  2. [今すぐ構成] をクリックし、以下を設定します。
    • アドレス プール: VPN クライアントに割り当てる IP 範囲(例: 172.16.0.0/24
      • ※ VNet のアドレス範囲と重ならないものを指定してください。
    • トンネルの種類: IKEv2 and SSTP (SSL)
    • 認証の種類: Azure 証明書
  3. ルート証明書 のセクションに以下を入力します。
    • 名前: 任意の名前(例: MyRootCert
    • パブリック証明書データ: 先ほどメモ帳からコピーした文字列を貼り付け。
  4. 画面上部の [保存] をクリックします。
  1. VPN クライアントのダウンロードとインストール

保存が完了すると、画面上部に [VPN クライアントのダウンロード] というボタンが現れるのでクリックします。

  1. ダウンロードされた Zip ファイルを解凍します。
  2. 自分の PC に合ったフォルダ(通常は WindowsAmd64)を開き、VpnClientSetupAmd64.exe を実行してインストールします。
    • ※ SmartScreen の警告が出たら「詳細情報」→「実行」をクリック

これで、PC の「ネットワーク設定」に VPN 接続設定が追加されました。

⚠️ 注意!何も起きなくても正常です

インストーラーを実行しても、「完了しました」などのメッセージは一切表示されません。 一瞬黒い画面(コマンドプロンプト)が出てすぐに消えるか、場合によっては何も起きないように見えますが、これで正常にインストールされています。 「えっ、失敗した?」と不安にならず、次のステップへ進んでください。

マイクロソフトさん、せめて「完了しました」くらい出してよ・・・

STEP

【重要】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 だよ」と教えてあげる必要があります。

  1. SQL Database のプライベート IP を確認

まず、正解となる IP アドレスを調べます。

  1. Azure Portal で対象の SQL Database を開きます。
  2. 左メニューの [ネットワーク] > [プライベート アクセス] タブを開きます。
  3. 作成済みの プライベート エンドポイント のリンクをクリックします。
  4. [DNS 構成] メニューを見ると、割り当てられた IP アドレス(例: 10.0.0.6)が書いてあるのでメモします。
  1. メモ帳を「管理者として実行」する

hosts ファイルはシステムファイルなので、普通の開き方では保存できません。

  1. Windows のスタートメニューで「メモ帳」を検索します。
  2. アイコンを 右クリック し、[管理者として実行] を選択します。
  1. hosts ファイルを編集する
  1. メモ帳の [ファイル] > [開く] で、以下のパスに移動します。
    • C:\Windows\System32\drivers\etc
    • ※ 右下のフィルターを「テキスト文書 (.txt)」から「すべてのファイル (.*)」に変更しないと見えません。
  2. hosts というファイルを選択して開きます。
  3. ファイルの末尾に、以下の形式で 1 行追記します。
    • [プライベートIP] [SQL DatabaseのFQDN]
# Azure Private SQL Mapping
10.0.0.6  test-sqlsrv.database.windows.net
  1. 設定の確認(Ping コマンド)

設定が反映されたか確認します。 コマンドプロンプトを開き、SQL Database に対して ping を打ちます。

ping test-sqlsrv.database.windows.net
  • 成功:10.0.1.5 からの応答... (または IP が表示されてタイムアウト)
  • 失敗: パブリック IP らしき数字が表示される場合は、hosts の保存に失敗しています。

これで、PC は迷わず VPN トンネルを通ってデータベースに向かうようになりました。

STEP

ローカル Power BI Desktop からの接続確認

  • VPN の接続

インストールした VPN 設定は、Windows のネットワーク設定の中に隠れています。

  1. Windows タスクバー右下の 「ネットワークアイコン(Wi-Fi やスピーカーのマーク)」 をクリックします。
  2. 開いたメニューの中に、仮想ネットワークと同じ名前(例: vnet-test) の接続先が追加されているはずです。
  3. それをクリックし、「接続」 ボタンを押します。

認証画面などは出ず、すんなりと「接続済み」になれば、VPN トンネルが開通しています。PC は、仮想的に Azure の VNet 内部に存在している状態です。

  1. Power BI Desktop からの接続

手元のローカル PC で Power BI Desktop を起動します。

  1. 「データを取得」 > 「SQL Server」 を選択
  2. 以下の通りに入力して「OK」をクリック
    • サーバー: test-sqlsrv.database.windows.net(hosts に書いた FQDN)
    • データベース: 作成したデータベース名(省略可)
    • データ接続モード: インポート
  3. 認証画面:
    • 必ず 「データベース」 タブを選択してください(Windows 認証は使えません)
    • 管理用 VM で設定した SQL ユーザー名とパスワードを入力して「接続」
  1. データの取得成功

ナビゲーター画面が開き、先ほど Bastion 経由で作成した SalesData テーブル が表示されれば……

成功です🎉

あとは「読み込み」をクリックすれば、ローカル PC リソースを使って、レポート開発を行えます。

VPN を切断すれば接続は切れ、インターネット側からは一切アクセスできないセキュアな状態に戻ります。

まとめ

本記事では、「Azure VPN Gateway(P2S)」 を活用して、閉域網内の SQL Database にローカル PC から安全に接続する方法を解説しました。

今回のポイント
  • 快適さ: 使い慣れたローカル PC で開発できる。
  • 安全性: インターネットにポートを開けず、暗号化された VPN トンネルのみを通す。
  • 裏技: VPN で名前解決できない問題は、ローカルの hosts ファイル で解決する。

以上、最後までお読みいただきありがとうございました。


よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次