18
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure 仮想ネットワークサービスエンドポイントと Azure Private Link の挙動確認

Last updated at Posted at 2020-09-07

はじめに

Azure の VNet 内の VM などから Azure PaaS リソース (Azure Storage、SQL Database など) に対して、Azure のバックボーンネットワーク経由で直接接続する方法として、Azure 仮想ネットワークサービスエンドポイントAzure Private Link の 2 つがあります。

これら 2 つの方法は、似ているようで挙動に違いがあります。詳細は以下ドキュメントを確認頂くとして、本記事では両者の構成や挙動がどのように違うかをストレージアカウントを例にして簡単にまとめたいと思います。

追記 (2020/9/9)

サービスエンドポイントと Private Link を 1 つのリソースで併用する方法について別記事にまとめています。よろしければこちらもご覧ください。

Azure 仮想ネットワークサービスエンドポイントと Azure Private Link の併用方法 - Qiita

構成図

qiita-service-endpoint-private-link.png

上記のように 2 つのストレージアカウントを作成し、1 つにサービスエンドポイント、もう 1 つにPrivate Link を設定します。これらのストレージアカウント内のデータにはインターネット経由ではアクセスできず、VNet 内の VM からのみアクセスが可能です。

オプションですが、VM の SSH のポート (Port: 22) をインターネットに露出させないように、Azure ポータル -> Azure Bastion ホストを経由して VM にアクセスするようにします。

事前作業

事前作業として以下を実施しておきます。

  1. 仮想ネットワーク (VNet) & サブネット作成
  2. 仮想マシン (VM) 作成
  3. Bastion ホスト作成
  4. Bastion ホスト -> VM 接続確認
  5. VM に Azure CLI をインストール

VNet & サブネット作成

キャプチャの通り、VNet とサブネットを作成します。
image.png

VM 作成

VMSubnet に VM を作成します。Bastion ホスト経由でアクセスするためパブリック IP は付与していません。
image.png

Bastion ホスト作成

AzureBastionSubnet に Bastion ホストを作成します。
image.png

Bastion ホスト -> VM 接続確認

VM の左側メニューの [Bastion] をクリックします。
image.png

VM 作成時に指定した認証の情報 (ここではユーザー名 & パスワード) を入力して VM に接続します。
image.png

以下のように Web ブラウザの別タブでターミナルが起動すれば接続 OK です。
image.png

VM に Azure CLI をインストール

この後の動作確認で使うため VM に Azure CLI をインストールします。
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-apt?view=azure-cli-latest

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

挙動確認 : サービスエンドポイント

それでは、サービスエンドポイントを設定したストレージアカウントの挙動を確認していきます。

ストレージアカウント作成

ストレージアカウントの作成画面です。[基本] ページでは必要な情報を入力すれば OK です。
image.png

[ネットワーク] ページで パブリックエンドポイント (選択されたネットワーク) にチェックし、[仮想ネットワーク] に接続を許可するサブネット (ここでは VmSubnet) を指定します。
image.png

他のページは特筆すべき点はありません。ストレージアカウントを作成します。
image.png

ストレージアカウント作成時にサービスエンドポイントで指定した VNet を見てみると以下キャプチャのようにサービスエンドポイントが追加されていることが確認できます。
image.png

名前解決

サービスエンドポイントを設定したサブネット VmSubnet 内の VM からストレージアカウントの FQDN (完全修飾ドメイン名) に対して名前解決のコマンド (nslookup) を実行するとパブリック IP アドレスに解決されます。
VNet 外のコンピューター (手元の PC) でも同じくパブリック IP アドレスに解決されます。

(VmSubnet の VM からの名前解決 : パブリック IP アドレスに解決される)

$ nslookup stnakazaxblobse1.blob.core.windows.net
Server:127.0.0.53
Address:127.0.0.53#53

Non-authoritative answer:
stnakazaxblobse1.blob.core.windows.netcanonical name = blob.mwh03prdstr03a.store.core.windows.net.
Name:blob.mwh03prdstr03a.store.core.windows.net
Address: 52.239.237.100

(VNet 外のコンピューターからの名前解決 : パブリック IP アドレスに解決される)

$ nslookup stnakazaxblobse1.blob.core.windows.net
Server:         172.26.192.1
Address:        172.26.192.1#53

Non-authoritative answer:
stnakazaxblobse1.blob.core.windows.net  canonical name = blob.mwh03prdstr03a.store.core.windows.net.
Name:   blob.mwh03prdstr03a.store.core.windows.net
Address: 52.239.237.100

Azure ポータルでの操作

サービスエンドポイントを設定したストレージアカウントに対して、Azure ポータルからコンテナーの作成、一覧表示、削除等の操作を行うことはできます。ただ、コンテナー内のデータを表示しようとすると権限不足のメッセージが表示されます。

(コンテナー作成 : エラー無し)
image.png

(コンテナー一覧表示 : エラー無し)
image.png

(コンテナー内のデータを見ようとすると権限不足のメッセージが表示される)
image.png

Azure CLI での操作

サービスエンドポイントを設定したサブネット VmSubnet 内の VM から、ストレージアカウントのコンテナーへのファイルアップロード、ファイルの一覧表示のコマンドは成功します。
一方、VNet 外のコンピューター (手元の PC) から同様のコマンドを実行するとエラーメッセージが出力され、失敗します。

(VmSubnet の VM からのファイルのアップロード : 成功)

$ az storage blob upload \
> --file example1.txt \
> --name example1.txt \
> --account-name stnakazaxblobse1 \
> --container-name test-container \
> --account-key xxx
Finished[#############################################################]  100.0000%
{
  "etag": "\"0x8D85029187541FC\"",
  "lastModified": "2020-09-03T16:47:50+00:00"
}

(VmSubnet の VM からのファイルの一覧表示 : 成功)

$ az storage blob list \
> --account-name stnakazaxblobse1 \
> --container-name test-container \
> --account-key xxx
[
  {
    "container": "test-container",
    (省略)
    "versionId": null
  }
]

(VNet 外のコンピューターからのファイルの一覧表示 : 失敗)

$ az storage blob list \
> --account-name stnakazaxblobse1 \
> --container-name test-container \
> --account-key xxx

The request may be blocked by network rules of storage account. Please check network rule set using 'az storage account show -n accountname --query networkRuleSet'.
If you want to change the default action to apply when no rule matches, please use 'az storage account update'.

挙動確認 : Private Link

次に、Private Link を設定したストレージアカウントの挙動を確認していきます。

ストレージアカウント作成

ストレージアカウントの作成画面です。[基本ページ] では必要な情報を入力すれば OK です。
image.png

[ネットワーク] ページの [接続方法] で プライベートエンドポイント にチェックし [追加] をクリックします。
image.png

プライベートエンドポイントの作成画面です。[サブネット] の下に書かれていますが、プライベートエンドポイントに対して NSG (Network Security Group) は無効であることに留意が必要です。
また、プライベートエンドポイントとプライベートに接続するには DNS レコードが必要なため、ここでは [プライベート DNS ゾーンとの統合する] で [はい] を指定します。
image.png

入力が正しいのにリソースグループ欄がエラーになることがありますが、一旦別のリソースグループを選択して [OK] を押して、再度目的のリソースグループに変更することで上手く行くと思います。
image.png

後は必要な情報を入力し、ストレージアカウントを作成します。
image.png

すると以下の赤枠で囲んだリソース (プライベート DNS ゾーン、ストレージアカウント、プライベートエンドポイント、ネットワークインターフェイス) が作成されます。
image.png

  • ストレージアカウント > ファイアウォールと仮想ネットワーク

    • 許可するアクセス先 : 選択されたネットワークがチェックされている
    • 仮想ネットワーク : ネットワークが選択されていない
      image.png
  • ストレージアカウント > プライベート エンドポイント接続

    • プライベートエンドポイント接続が表示される
      image.png
  • ストレージアカウント > プライベート エンドポイント接続 > プライベート エンドポイント

    • 以下のようにストレージアカウントの FQDN にプライベート IP が関連付けられたカスタム DNS 設定が表示されている
      image.png
  • プライベート DNS ゾーン

    • ストレージアカウント名とプライベート IP が関連付けられた A レコードが存在する
      image.png

名前解決

VmSubnet 内の VM からストレージアカウントの FQDN (完全修飾ドメイン名) に対して名前解決のコマンド (nslookup) を実行するとプライベート IP アドレスに解決されます。
VNet 外のコンピューター (手元の PC) ではパブリック IP アドレスに解決されます。

(VmSubnet の VM からの名前解決 : プライベート IP アドレスに解決される)

$ nslookup stnakazaxblobpl1.blob.core.windows.net
Server:127.0.0.53
Address:127.0.0.53#53

Non-authoritative answer:
stnakazaxblobpl1.blob.core.windows.netcanonical name = stnakazaxblobpl1.privatelink.blob.core.windows.net.
Name:stnakazaxblobpl1.privatelink.blob.core.windows.net
Address: 10.0.20.4

(VNet 外のコンピューターからの名前解決 : パブリック IP アドレスに解決される)

$ nslookup stnakazaxblobpl1.blob.core.windows.net
Server:         172.26.192.1
Address:        172.26.192.1#53

Non-authoritative answer:
stnakazaxblobpl1.blob.core.windows.net  canonical name = stnakazaxblobpl1.privatelink.blob.core.windows.net.
stnakazaxblobpl1.privatelink.blob.core.windows.net      canonical name = blob.mwh03prdstr02a.store.core.windows.net.
Name:   blob.mwh03prdstr02a.store.core.windows.net
Address: 52.239.237.36

Azure ポータルでの操作

Private Link を設定したストレージアカウントに対して、Azure ポータルからコンテナーの作成、一覧表示、削除等の操作を行うことはできます。ただ、コンテナー内のデータを表示しようとすると権限不足のメッセージが表示されます。

(サービスエンドポイントとほぼ同じ内容のためキャプチャ省略)

Azure CLI での操作

VmSubnet 内の VM から、ストレージアカウントのコンテナーへのファイルアップロード、ファイルの一覧表示のコマンドは成功します。
一方、VNet 外のコンピューター (手元の PC) から同様のコマンドを実行するとエラーメッセージが出力され、失敗します。

(VmSubnet の VM からのファイルのアップロード : 成功)

$ az storage blob upload \
> --file example1.txt \
> --name example1.txt \
> --account-name stnakazaxblobpl1 \
> --container-name test-container \
> --account-key xxx
Finished[#############################################################]  100.0000%
{
  "etag": "\"0x8D8502F35AAE20E\"",
  "lastModified": "2020-09-03T17:31:36+00:00"
}

(VmSubnet の VM からのファイルの一覧表示 : 成功)

$ az storage blob list \
> --account-name stnakazaxblobpl1 \
> --container-name test-container \
> --account-key xxx
[
  {
    "container": "test-container",
    (省略)
    "versionId": null
  }
]

(VNet 外のコンピューターからのファイルの一覧表示 : 失敗)

$ az storage blob list \
> --account-name stnakazaxblobpl1 \
> --container-name test-container \
> --account-key xxx

The request may be blocked by network rules of storage account. Please check network rule set using 'az storage account show -n accountname --query networkRuleSet'.
If you want to change the default action to apply when no rule matches, please use 'az storage account update'.

以上です。

18
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?