Azure Private Endpoint 設定手順: VM から Blob Storage への閉域接続

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

はじめに

本記事では、Azure Storage へのアクセスを閉域網(プライベート IP)に限定する Private Endpoint(プライベートエンドポイント) の設定手順を紹介します。

Azure Storage や SQL Database などの PaaS サービスは、標準状態ではインターネット経由(パブリック IP)でアクセスする仕様になっています。しかし、エンタープライズ環境やセキュリティ要件が高い案件では、「インターネット経由のアクセスを禁止し、社内ネットワークからのみ接続させたい」 という要件が必須となるケースが多々あります。

今回は、仮想ネットワーク(VNet)内の仮想マシンから、Private Endpoint を経由して、インターネットに出ることなくセキュアに Blob Storage へ接続する環境を構築します。

この記事でわかること
  • Private Endpoint を使用した Blob Storage への接続構成
  • 閉域接続における DNS(Private DNS Zone)の役割
  • Azure Bastion(Standard)を利用したファイル転送と閉域操作

構成概要と仕組み

設定に入る前に、今回構築する環境と、Private Endpoint を理解する上で最も重要な「DNS の仕組み」について解説します。

検証構成

今回は以下の構成を作成します。 クライアントとなる仮想マシン(VM)はパブリック IP を持たず、インターネットから隔離されています。 VM から Storage へのアクセスは、Private Endpoint を介して Azure のバックボーンネットワークのみを通ります。

Private Endpoint とは

Private Endpoint は、Azure の PaaS サービス(Storage, SQL Database など)に対して、自分の VNet 内のプライベート IP アドレス を割り当てる機能です。

  • 通常(パブリックエンドポイント): インターネット上のパブリック IP アドレスに対してアクセスします。
  • Private Endpoint: VNet 内の 10.0.0.5 のような プライベート IP アドレス に対してアクセスします。

これにより、あたかも「同じ LAN 内にあるファイルサーバー」にアクセスするような感覚で、セキュアにクラウドサービスを利用できるようになります。

DNS の重要性(仕組み)

Private Endpoint を導入する際、最も重要なのが DNS 設定 です。ここが設定されていないと、せっかく Private Endpoint を作っても接続できません。

なぜ DNS が必要なのか?

Private Endpoint を有効にしても、接続先の URL(FQDN)は mystorage.blob.core.windows.net のまま変わりません。 しかし、クライアント(VM)がこの URL にアクセスしようとした際、通常の DNS(インターネット上の電話帳)を使ってしまうと、「パブリック IP」 が返ってきてしまいます。これでは Private Endpoint を通りません。

そこで、「この URL の正解は、パブリック IP ではなくプライベート IP(10.x.x.x)だよ」 と VNet 内のサーバーに教えてあげるための Private DNS Zone(専用の電話帳) が必要になります。

本手順では、この DNS 統合も含めて設定を行っていきます。

設定手順①: 検証用リソースの作成 (VM / Bastion)

まずは、検証の土台となる仮想ネットワークと、クライアント役の仮想マシン、そしてそこへ安全に接続するための踏み台(Azure Bastion)を作成します。

STEP
仮想ネットワーク(VNet)の作成
  1. Azure Portal 上部の検索バーで「仮想ネットワーク」を検索し、[作成] をクリックします。
  2. [基本] タブで以下を入力します。
    • リソースグループ: 新規作成 (例: rg-private-link-test)
    • 名前: 任意の VNet 名 (例: vnet-test)
    • 地域: 任意のリージョン (例: Japan East)
  3. [IP アドレス] タブへ進みます。
    • デフォルトのアドレス空間 (10.0.0.0/16) で問題ありません。
    • デフォルトのサブネット (default) があることを確認します。
    • 【重要】 Bastion 用のサブネットを追加します。
      • [サブネットの追加] をクリック。
      • 名前: AzureBastionSubnet (※この名前は固定です!)
      • アドレス範囲: 10.0.1.0/26 (または /24)
  4. [レビューと作成] をクリックして作成します。
STEP
Azure Bastion のデプロイ (Basic SKU)

次に、ブラウザ経由で VM に RDP 接続するための Bastion を作成します。今回はファイル転送機能を使わない(VM 内で直接 DL する)ため、安価な Basic SKU を使用します。

  1. 検索バーで「Bastion」を検索し、[作成] をクリックします。
  2. 以下のように設定します。
    • 名前: 任意の名前 (例: bas-test)
    • 地域: VNet と同じリージョン
    • 仮想ネットワーク: 先ほど作成した vnet-test を選択 (自動的に AzureBastionSubnet が選ばれます)
  3. SKU の設定
    • レベル(SKU): Basic を選択します。
  4. [確認と作成] をクリックしてデプロイします。
    • (※デプロイには 10〜15分ほど時間がかかります。待っている間に次の VM 作成へ進みましょう)
STEP
仮想マシン(VM)の作成

検証用のクライアント端末を作成します。インターネットからの直接アクセスを遮断するため、パブリック IP は付与しません。

  1. 検索バーで「仮想マシン」を検索し、[作成] > [Azure 仮想マシン] を選択します。
  2. [基本] タブ:
    • 仮想マシン名: 任意の名前 (例: vm-client)
    • 可用性オプション: インフラストラクチャ冗長は必要ありません
    • セキュリティの種類: Standard
    • イメージ: Windows Server 2022 Datacenter など
    • 管理者アカウント: ログイン用のユーザー名とパスワードを設定
  3. [ネットワーク] タブ (※ここが重要です!):
    • 仮想ネットワーク: vnet-test
    • サブネット: default
    • パブリック IP:「なし (None)」 を選択
      • ※ここを「なし」にすることで、この VM はインターネットから直接到達できなくなります(閉域化)
  4. [確認と作成] をクリックして作成します。

これで、インターネットから隔離された「閉域 VM」と、そこに接続するための「入り口(Bastion)」の準備が整いました。

設定手順②: ストレージアカウントの作成

接続先となる Azure Storage を作成し、テスト用のファイルをアップロードするための「コンテナ」を準備します。

STEP
Storage Account の作成
  • Azure Portal の検索バーで「ストレージ アカウント」を検索し、[作成] をクリックします。
  • [基本] タブで以下のように設定します。
    • リソースグループ: 作成済みのグループ (例: rg-private-link-test)
    • ストレージアカウント名:全世界で一意の名前 を入力してください (例: stprivatelinktest2026)
      • ※すでに誰かが使っている名前は使用できません。
    • 地域: VNet と同じリージョン (例: Japan East)
    • 冗長性: テスト用なので 「ローカル冗長ストレージ (LRS)」 で十分です(コスト節約)
  • [ネットワーク] タブを確認します。
    • パブリック ネットワーク アクセス: 「無効」 を選択します。
    • ※これにより、インターネットからのアクセスを最初から完全に遮断します。この時点ではまだどこからも接続できない「孤立したストレージ」となります。
  • [確認] > [作成] をクリックしてデプロイします。
STEP
コンテナの作成

ストレージアカウントができたら、その中にファイルを保存するための箱(コンテナ)を作成します。

  1. 作成したストレージアカウントのリソース画面へ移動します。
  2. 左メニューの [データ ストレージ] > [コンテナ] をクリックします。
  3. 上部の [+ コンテナ] をクリックします。
  4. 以下のように設定して [作成] をクリックします。
    • 名前: 任意の名前 (例: test-container)
    • パブリック アクセス レベル:「プライベート (匿名アクセスなし)」
      • ※ここを「プライベート」にしても、認証を通せばアクセス可能です。今回はセキュアな構成を目指すため、匿名アクセスは許可しません。

これで、接続先となるストレージと、ファイルの格納場所が準備できました。

設定手順③:Private Endpoint の作成と DNS 設定

いよいよ本記事のメイン設定です。 ストレージアカウントに対して Private Endpoint(プライベート接続口)を作成し、VNet 内のプライベート IP を割り当てます。

STEP
作成ウィザードの開始

Private Endpoint は「Private Link センター」からも作成できますが、接続したいリソース(今回の場合は Storage)の画面から作成する方が設定が自動入力されるため簡単です。

  1. 作成したストレージアカウント (stprivatelinktest...) の画面を開きます。
  2. 左メニューの [セキュリティ + ネットワーク] > [ネットワーク] をクリックします。
  3. [プライベート エンドポイント接続] タブを開き、[+ プライベート エンドポイント] をクリックします。
STEP
基本設定とリソース指定

ウィザードが開いたら、以下の手順で設定を進めます。

  1. [基本] タブ:
    • リソースグループ: rg-private-link-test
    • 名前: 任意の名前 (例: pe-storage-blob)
    • 地域: VNet と同じリージョン (例: Japan East)
  2. [リソース] タブ (※重要):
    • 対象サブリソース:「blob」 を選択します。
      • ※ここを間違えると(file や table を選ぶと)、Blob コンテナに接続できません。
STEP
仮想ネットワークとサブリネット

Private Endpoint を「どこに置くか」を指定します。

  1. [仮想ネットワーク] タブ:
    • 仮想ネットワーク: 作成済みの vnet-test を選択。
    • サブネット:default を選択。
      • ※Bastion 用のサブネット (AzureBastionSubnet) は選ばないでください。
STEP
DNS 統合設定(重要)

ここが接続の成否を分けるポイントです。 VNet 内からドメイン名 (mystorage...) でアクセスした際に、プライベート IP が返るように設定します。

  1. [DNS] タブへ進みます。
  2. プライベート DNS ゾーンと統合する: 「はい (Yes)」 が選択されていることを確認します。
  3. プライベート DNS ゾーン: (新規) privatelink.blob.core.windows.net となっていることを確認します。

なぜこの設定が必要か? ここを「はい」にすることで、Azure が自動的に以下の処理を行ってくれます。

  1. Private DNS Zone の作成: privatelink.blob.core.windows.net という名前解決用のゾーンを作成。
  2. Aレコードの登録: ストレージ名とプライベート IP (例: 10.0.0.5) の紐づけを登録。
  3. VNet リンク: 作成した DNS ゾーンを VNet に紐づけ。
STEP
作成の完了
  1. [確認と作成] をクリックして設定を完了します。
  2. デプロイが完了したら、作成された「Private Endpoint」のリソースへ移動し、[DNS 構成] メニューを確認してください。
    • 割り当てられた IP アドレス (例: 10.0.0.4 や 10.0.0.5) が表示されていれば設定完了です。

これで、「閉域網接続」の準備が整いました。 次章で、本当にプライベート IP で繋がるのか、動作確認を行いましょう。

STEP
DNS リンクの確認(トラブルシューティング)

作成ウィザードで自動設定されますが、稀に VNet との紐づけ(リンク)がうまくいかないことがあります。念のため確認しましょう。

  • 作成された Private DNS ゾーン (privatelink.blob.core.windows.net) を開きます。
  • 左メニューの [仮想ネットワーク リンク] をクリックします。
  • 今回の VNet (vnet-test) が一覧にあるか確認します。
  • もしなければ、[+ 追加] から手動で VNet を追加してください。
  • これがないと、VM から名前解決ができず接続に失敗します。

どうして自動で紐付かないことがある

再作成のタイミング: 以前に同じ名前で DNS ゾーンを作って削除した直後だと、裏側に「亡霊(メタデータ)」が残っていて、新規作成処理がスキップされることがあります。

処理の競合: Private Endpoint 本体と DNS 設定は別々に処理されるため、通信のタイミングによっては「リンク作成」だけがタイムアウトしてしまうことも…。

動作確認: ツールの準備と閉域接続

環境構築が完了しました。 VM にログインし、ツールをインストールして接続確認を行います。

STEP
ツールの準備(VM 内でダウンロード)
  1. Azure Portal から Bastion 経由で VM にログインします。
  2. VM 内でブラウザ(Microsoft Edge)を起動します。
  3. 「Azure Storage Explorer」で検索し、公式サイトからインストーラー(StorageExplorer-windows-x64)をダウンロードしてインストールします。

VM からはインターネットへの閲覧(アウトバウンド通信)が可能なため、直接ダウンロードできます

STEP
テスト用ファイルの作成

次に、Blob Storage にアップロードするためのテストファイルを作成します。 せっかくなので、PowerShell を使って「作成日時」が入ったファイルをサクッと作ってみましょう。

  1. VM 内で PowerShell を起動します。
  2. 以下のコマンドをコピー&ペーストして実行します。
# デスクトップに "testfile.txt" という名前で、現在時刻が入ったファイルを作成
$date = Get-Date
Set-Content -Path "$HOME\Desktop\testfile.txt" -Value "これは閉域網接続のテストです。作成日時: $date"

デスクトップに testfile.txt が作成されていれば OK です。

STEP
名前解決の確認(nslookup)

ツールを使う前に、ネットワーク的に「正しい経路(Private Endpoint)」を通っているかを確認します。 これが トラブルシューティングにおいて最も重要な手順 です。

  1. VM 内で コマンドプロンプト (cmd) を起動します。
  2. 以下のコマンドを実行します。
nslookup <作成したストレージアカウント名>.blob.core.windows.net
確認ポイント

結果の Address に注目してください。

  • 成功: 10.0.0.5 などの プライベート IP が返ってくる。
  • 失敗: グローバル IP が返ってくる(DNS 設定がうまくいっていません)。
STEP
Azure Storage Explorer での接続

経路が正しいことが確認できたので、実際にファイルをアップロードしてみましょう。 まずは、接続に必要な「鍵」を Azure Portal から取得します。

STEP
アクセスキーの取得(Azure Portal)
  1. VM 内のブラウザで Azure Portal を開きます。
  2. 作成した ストレージアカウント (stprivatelinktest...) の画面を開きます。
  3. 左メニューの [セキュリティ + ネットワーク] > [アクセス キー] をクリックします。
  4. key1[表示] ボタンを押し、[キー] の値をコピーしてメモ帳などに控えます。
    • ※これがこのストレージの「合鍵」になります。
STEP
Storage Explorer での接続
  1. インストールした Azure Storage Explorer を起動します。
  2. 左側の [接続ダイアログを開く] アイコン(プラグのマーク)をクリックします。
  3. [リソースの選択] 画面で以下を選択して進みます。
    • ストレージ アカウントまたはサービス を選択。
    • アカウント名とキー を選択。
  4. [アカウント名とキーを使用して接続] 画面で情報を入力します。
    • 表示名: 任意の名前 (例: Test-Connection)
    • アカウント名: 作成したストレージアカウント名 (stprivatelinktest...)
    • アカウント キー: 手順1でコピーした「key1」の値を貼り付け。
  5. [次へ] > [接続] をクリックします。
STEP
ファイルのアップロード
  1. 左ツリーに接続したストレージが表示されるので、[Blob Containers] > [test-container] を開きます。
  2. 先ほどデスクトップに作成した testfile.txt を、画面右側のエリアに ドラッグ&ドロップ します。
  3. 転送状況エリアに「完了」と表示され、ファイル一覧に表示されれば成功です!
    • インターネットを経由せず、閉域網だけでファイルが転送されました

まとめ

本記事では、Private Endpoint を使用して、インターネットを経由せずに Azure Storage へセキュアに接続する方法をご紹介しました。

手順は少し多かったかもしれませんが、やっていることは非常にシンプルです。 「PaaS サービスにプライベート IP を割り当て、DNS でその住所を教えてあげる」。これだけです。

今回のポイント
セキュアな接続

Private Endpoint を使うことで、通信はすべて Azure バックボーンネットワーク内(閉域網)で完結します。

DNS が重要

接続できないトラブルの 9割は DNS 設定です。「Private DNS Zone」が正しくリンクされているか、必ず確認しましょう。

確認の基本

nslookup コマンドで プライベート IP が返ってくること を確認するのが、トラブルシューティングの基本です。

この構成は、Azure のセキュリティ設計における「基本のキ」であり、実際のエンタープライズ案件では当たり前のように登場します。 今回のハンズオンで作成した環境は、そのまま実務の検証環境としても応用できますので、ぜひ活用してみてください。

検証が終わったら、課金(特に Bastion と VM)を防ぐために、作成したリソースグループ (例: rg-private-link-test) ごと削除することを忘れないようにしましょう。

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


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

この記事を書いた人

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

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

目次