投稿日

新タイプの VPG で Azure Storage とプライベートネットワークを構成する

こんにちは、Customer Reliability Engineer (CRE) の三國です。

当ブログでは SORACOM Discovery 2020発表された新タイプの Virtual Private Gateway (VPG) を使用して Microsoft Azure の Azure Storage へプライベート接続する方法を紹介します。SORACOM・Azure の設定で Azure Storage とプライベートネットワークを構成できます。

はじめに

先日公開したブログ「新タイプの VPG で Azure Virtual Machine とプライベートネットワークを構成する」では VPG から Azure VPN Gateway へ SORACOM Door で接続し、Azure Virtual Machine (Azure VM) のプライベート IP アドレスへアクセスしました。

今回のブログでは、2020 年に一般提供となった Private Link を利用して Azure Storage へアクセスします。Private Link を利用することで、Azure Storage や各種データベースサービス、PaaS へもプライベート IP アドレスで接続できます。今回は簡単な例として、Azure Storage からファイルをダウンロードします。

構成

以下のような構成で接続します。Azure におけるプライベートエンドポイントの IP アドレスはインターネットからは解決できませんので、こちらのブログで作成した Azure VM を DNS フォワーディング用のサーバーとして利用しています。Azure 公式ドキュメントに記載されているように DNS フォワーダーを Virtual Network 内に建て、168.63.129.16 という Azure の仮想パブリック IP アドレスへ名前解決しにいく必要があるためです。

事前準備

こちらのブログの手順を実施し、プライベート IP で Azure VM へアクセスできていることを前提とします。

手順

以下の手順で、Azure Storage へアクセスします。

  1. Azure Storage を作成
  2. パブリックアクセスが有効化なコンテンツをアップロード
  3. Azure Private Link を作成
  4. Azure VM の DNS フォワーディングを設定
  5. SORACOM のカスタム DNS を設定
  6. (参考) SORACOM Peek でファイルダウンロードのパケットを確認

1. Azure Storage を作成

まずは接続先のストレージアカウントを作成します。ポータルから blob をアップロードするので最初は Public endpoint (all networks) を有効にしておきましょう。

2. パブリックアクセスが有効化なコンテンツをアップロード

デバイスからアクセスするためのコンテンツをアップロードします。今回は簡単のために blob への anonymous read access が有効なコンテナを作成し、適当な内容を記載したテキストファイルをアップロードします。

アップロードが完了したら、curl コマンドやブラウザで参照できることを確認します。

$ curl -v https://doorstr.blob.core.windows.net/publicblob/sample.txt
*   Trying 52.239.144.42...
* TCP_NODELAY set
* Connected to doorstr.blob.core.windows.net (52.239.144.42) port 443 (#0)
... (中略)
hello from storage account!
* Connection #0 to host doorstr.blob.core.windows.net left intact

ストレージアカウントのファイアウォール設定からアクセス元を制限すれば、インターネット経由でのアクセスが禁止されます。

3. Azure Private Link を作成

Azure Storage へプライベート接続するために Azure Private Link を作成します。blob をターゲットにし、Gateway Subnet 以外のサブネットに指定します。また、ドメイン名でアクセスできるよう Private DNS とも統合しましょう。

作成に成功すると プライベート IP アドレスが確認できます。

4. Azure VM の DNS フォワーディングを設定

こちらのブログで作成した Azure VM を DNS フォワーダーとして利用するため、Bind の設定をします。Azure VM に SSH 接続して、後述するコマンドを実行しましょう。allow-query には、VPG のアドレス空間 (当ブログでは 100.67.2.0/27、確認方法は後述) を指定してください。forwarders に 168.63.129.16 を指定することでプライベートエンドポイントの名前解決するためのフォーワーダーを構築できます。

sudo apt-get update -y
sudo apt-get install bind9 -y

sudo cat > named.conf.options << EndOFNamedConfOptions
options {
 directory "/var/cache/bind";
 recursion yes;
 # DNS for Azure platform resources
 allow-query { 100.67.2.0/27; localhost; };
 forwarders { 168.63.129.16; };
 forward only;
 dnssec-validation auto;
 auth-nxdomain no; # conform to RFC1035
 listen-on { any; };
};
EndOFNamedConfOptions

sudo cp named.conf.options /etc/bind
sudo systemctl restart bind9

インストールが成功したかは systemctl status bind9 で確認しましょう。

nmikuni@door-vm:~$ systemctl status bind9
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-07-20 05:46:03 UTC; 1s ago
(以下略)

なお VPG のアドレス空間は、VPG 管理画面に記載された「高度な設定 タブ > VPG の Gate Peer 一覧 > トンネル接続用 IP アドレス」が含まれるプレフィックス /27 のレンジです。

5. SORACOM のカスタム DNS を設定

SORACOM ではカスタム DNS という機能でグループに属した SIM が利用する DNS サーバーを指定できます。VPG を利用しているとカスタム DNS は無料できますので、SIM が所属しているグループにて Azure VM のアドレスを設定しましょう。

運用で利用される際は DNS サーバーをもう一台作成し、それぞれのプライベート IP アドレスをカスタム DNS サーバーとして設定しましょう。

DNS サーバーを設定し、こちらのドキュメントに従ってセッションを切断すると、利用する DNS サーバーが更新されます。nslookup コマンドなどで作成した DNS フォーワーダーを参照していることを確認してみましょう。

pi@raspberrypi:~ $ nslookup doorstr.blob.core.windows.net
Server:         10.0.0.5
Address:        10.0.0.5#53

Non-authoritative answer:
doorstr.blob.core.windows.net   canonical name = doorstr.privatelink.blob.core.windows.net.
Name:   doorstr.privatelink.blob.core.windows.net
Address: 10.0.0.4

これにより、ドメイン名で Azure Storage へアクセスできます。

$ curl https://doorstr.blob.core.windows.net/publicblob/sample.txt
hello from storage account!

6. (参考) SORACOM Peek でファイルダウンロードのパケットを確認

Discovey 2020 で発表された新サービス SORACOM Peek では、VPG を流れるパケットをキャプチャできます。http アクセスを有効にし、パケットの中身を見てみましょう。http アクセスを有効にするため、ストレージアカウントの Secure transfer required を Disabled とします。

SORACOM Peek ユーザーガイドに従ってパケットキャプチャセッションを作成し、今度は http でアクセスしてみます。

$ curl http://doorstr.blob.core.windows.net/publicblob/sample.txt
hello from storage account!

パケットキャプチャセッションからキャプチャファイルをダウンロードすると、名前解決をし、80 番ポートへアクセスしてファイルを取得できていることがわかります。

まとめ

今回のブログでは、DNS フォーワーダー VM をカスタム DNS として利用することでプライベートエンドポイントの名前を解決し、Private Link 経由で Azure Storage へアクセスしました。
今回は Azure Storage へアクセスしましたが、これを応用することで様々な Azure サービスへプライベート接続が可能となります。是非ご活用ください。