AZ-500対策 Microsoft Azureの仮想ネットワーク サービスエンドポイントを理解する

AZ-500

以下のMicrosoft社のAzureドキュメントを見ながら勉強し理解した内容を共有する。この記事では特にサービスエンドポイントについてまとめる。

ネットワーク セキュリティ グループとサービス エンドポイントを使うことで Azure リソースへのアクセスをセキュリティで保護し、分離する - Training
Azureネットワークセキュリティグループとサービスエンドポイントが、どのようにして自分の仮想マシンとAzureサービスを未承認のネットワークアクセスからセキュリティで保護するかを確認します。

この記事をサクッと読んでからMicrosoft社のドキュメントを読むと少し理解が早いかもしれない。(逆に混乱したらすみません)
昔の日本語ドキュメントサイトに比べて最近は本当に改善されて読みやすくなったので、もっと深く理解したいと思った方は記事途中に参照リンクを貼っておくのでそちらを参照されたし。

サービスエンドポイントとは

Azure 仮想ネットワークの特定のSubnetからAzureのPaaSサービスへアクセスする際に、プライベートアドレス空間を用いてアクセスできるようにする仕組み。

Azure 仮想ネットワーク サービス エンドポイント
サービスエンドポイントを使って仮想ネットワークからAzureリソースへの直接アクセスを有効にする方法を説明します。

※MSとしては、PaaSとのプライベートなアクセスを行う場合はPrivate Link/プライベートエンドポイントの利用を推奨している。理由は後で調べる

Azure Private Link とは
AzurePrivateLinkの機能、アーキテクチャ、実装の概要。AzureプライベートエンドポイントおよびAzurePrivateLinkサービスのしくみとその使用方法について説明します。

アクセスの仕組み

Subnetにサービスエンドポイントを追加設定すると、そのSubnetからのPaaSサービスへのアクセスはMSバックボーンを経由したプライベートアクセスとなるようにトラフィックがリダイレクトされる

各PaaSサービスのパブリックエンドポイントは引き続き有効であるため、パブリックアクセスを無効にしたい場合はパブリックアクセスをオフにする必要がある。

実施すること

  • PaaSサービスへのパブリックアクセスをオフにする
  • VNetのSubnetとサービスエンドポイントを紐づける
  • Subnetとサービスエンドポイントを紐づける際にアクセス先のPaaSを割り当てる

これだけ。
ただし、ハイブリッドネットワーク構成の場合はもう少し設定が必要。

ハイブリッドネットワークの場合の追加設定(オンプレからのアクセス時)

VPNやExpressRouteなどを経由したオンプレからのアクセスの場合、接続元がNAT IPとなり、PaaSサービスから拒否されるためそのままでは接続できない。NAT IPを各PaaSサービスの「IPファイアウォールの構成」に追加設定する事で接続できるようになる。

※ExpressRouteの場合2つのNAT IPがあるので、両方を登録する必要がある

具体的な手順

例として、Subnetとストレージサービス間にエンドポイントを設定する手順を示す。

  1. Subnetの設定:VNetの送信トラフィックを制限
    1. NSGの設定で、VNetからAzure Storageへのアクセスを許可する
    2. NSGの設定で、VNetからインターネットへの全てのアクセスを拒否する
    3. Subnetにサービスエンドポイントを追加し、「Microsoft.Storage」を有効化
  2. ストレージの設定:Subnetからの受信トラフィックのみを有効化
    1. ストレージアカウントの作成
    2. ファイル共有を作成
    3. 全てのアクセスをDeny
    4. Subnetからのアクセスを許可

1. Subnetの設定:VNetの送信トラフィックを制限

  1. NSGの設定で、VNetからAzure Storageへのアクセスを許可する
az network nsg rule create \
    --resource-group <rg name> \
    --nsg-name <nsg name> \
    --name <rule name> \
    --priority 190 \
    --direction Outbound \
    --source-address-prefixes "VirtualNetwork" \
    --source-port-ranges '*' \
    --destination-address-prefixes "Storage" \
    --destination-port-ranges '*' \
    --access Allow \
    --protocol '*' \
    --description "Allow access to Azure Storage"

上記の例では、サービスタグ「VirtualNetwork」と「Storage」が利用されている。サービスタグを利用することで、IP範囲の指定は不要となる。

ちなみに、この設定ではVNetから全てのAzure Storageへのアクセスが許可される。

  1. NSGの設定:VNetからインターネットへの全てのアクセスを拒否する
az network nsg rule create \
    --resource-group <rg name> \
    --nsg-name <nsg name> \
    --name <rule name> \
    --priority 200 \
    --direction Outbound \
    --source-address-prefixes "VirtualNetwork" \
    --source-port-ranges '*' \
    --destination-address-prefixes "Internet" \
    --destination-port-ranges '*' \
    --access Deny \
    --protocol '*' \
    --description "Deny access to Internet."

上記の例では、サービスタグ「VirtualNetwork」と「Internet」が利用されている。

  1. Subnetにサービスエンドポイントを追加し、「Microsoft.Storage」を有効化
az network vnet subnet update \
    --vnet-name <vnet name> \
    --resource-group <rg name> \
    --name <service end point name> \
    --service-endpoints Microsoft.Storage

2. ストレージの設定:Subnetからの受信トラフィックのみを有効化

  1. ストレージアカウントを作成
az storage account create \
  --resource-group <rg name> \
  --name <storage account name> \
  --sku Standard_LRS
  1. ストレージのプライマリキーを取得
STORAGEKEY=$(az storage account keys list \
    --resource-group <rg name> \
    --account-name <storage account name> \
    --query "[0].value" | tr -d '"')
  1. ファイル共有を作成
az storage share create \
    --account-name <storage account name> \
    --account-key $STORAGEKEY \
    --name "<file share name>"
  1. ストレージに対する全てのアクセスをデフォルトで「拒否」に設定
az storage account update \
    --resource-group <rg name> \
    --name <storage account name> \
    --default-action Deny
  1. 特定のSubnetからのアクセスを許可
az storage account network-rule add \
    --resource-group <rg name> \
    --account-name <storage account name> \
    --vnet-name <vnet name> \
    --subnet <subnet name>

私は特に問題なく理解することができたし、上記Azコマンドも理解することができた。
時間があったら実際にSubnet内のVMとPaaSをサービスエンドポイントで接続したり、インターネットからPaaSにアクセスできないことを確認してみたいとおもう。

コメント

タイトルとURLをコピーしました