※この記事の内容は、主にAzureの初心者に向けて、Azureのネットワークの基本的な部分を説明しています。ネットワーク自体の基本的な知識についてはこの記事では触れていません ※この記事自体は、所属している会社のLT会で発表するために当日の0時くらいに作成したものなので、見にくい部分は後日修正します。
Azureのネットワークの基本
仮想ネットワーク (Virtual Network : VNet)
Azureでプライベートなネットワークに当たるリソース。イメージとしてはオンプレミスの社内ネットワークの様なもの。
他クラウドサービスでは作成数に上限があるが、Azureではサブスクリプションあたり1000個まで作成可能で、リージョン単位(東日本リージョンや西日本リージョンなど)単位で作成します。
仮想ネットワークのアドレス範囲については任意で設定が可能で、サブスクリプション内で重複しての作成も可能です。ただしアドレス範囲が重複すると仮想ネットワーク間の通信を行おうとした際の方法に制限がかかるため、相互接続することが事前に想定されるのであればアドレス空間の重複は避ける方が望ましいです。
また、アドレス範囲については一部アドレスを除いて任意な範囲を指定できますが、RFC1918とRFC6598で定義されているアドレス空間を使用することが公式には推奨されています。
サブネット
Azureの仮想ネットワークを、論理的に小さなセグメントに分割し管理するためのリソース。基本的に各リソースにはサブネットを割り当ててアドレスを付与していく。こうすることによって、各リソースのアドレス範囲はサブネットのアドレス範囲内に治るため、効率的にアドレスを管理できます。
graph TB VNet["Virtual Network<br/>10.0.0.0/16"] VNet --> SubnetA["Subnet A<br/>10.0.1.0/24<br/>(Webサーバー用)"] VNet --> SubnetB["Subnet B<br/>10.0.2.0/24<br/>(データベース用)"] VNet --> SubnetC["Subnet C<br/>10.0.3.0/24<br/>(Load Balancer用)"] style VNet fill:#e1f5fe style SubnetA fill:#f3e5f5 style SubnetB fill:#e8f5e8 style SubnetC fill:#fff3e0
- 例: 10.0.0.0/16のネットワーク範囲に、仮想マシンとデータベースを配置していく場合
- サブネットが存在しないと、どのリソースがどのアドレスなのかリソースが大量に存在すると把握しづらく、Firewallなどの設定が煩雑になる
- サブネットごとに分割しておく(仮想マシンを配置するためのサブネットという感じ)と、必ずそのサブネットのアドレス範囲内のアドレスが割り当てられるため、アドレスが把握しやすく、Firewallなどの設定も予めサブネットのアドレス範囲を指定するだけで済むため設定が楽になる
サブネットについては基本的にはリソース単位や、役割単位に作成していきます。(細かくいうと、送受信可能なアドレスやプロトコルが異なるといった様な、ネットワークの制御のルールや要件が異なるものごと)
- 例
- Webサーバー用の仮想マシンのネットワークインターフェイスを配置するサブネット
- Load Balancerを配置するサブネット
- App Serviceの受信側のネットワークインターフェイスを配置するサブネット
- App Serviceの送信側を配置するサブネット
また、サブネットのアドレス範囲については、配置するリソースで推奨されているアドレス範囲を基本としつつ、将来のリソースの増加や、仮想ネットワークのサイズなども考慮して決定します。また、仮想ネットワークの最初の方に細かい範囲のサブネットを配置してしまうと、後から大きな範囲のサブネットを作成するのが難しくなるため、アドレス範囲の大きいものは仮想ネットワークのアドレス範囲の前半に、小さい範囲のものは後半に配置すると後々サブネットを追加しやすくなります。
Network Security Group
Azureのネットワークの通信をフィルター制御するためのリソース。イメージとしてはWindowsなどに入っているファイアウォール。 サブネット単位もしくはネットワークインターフェース単位で設定できるが、基本的にはサブネット単位で設定することが多いです。(というよりかは、ネットワークインターフェースごとに設定を分けないといけない様なケースの場合は、サブネットを分けた方が仮想マシンのスケールアウト時にも管理がしやすいため)
なので、基本的にAzureの各リソースのネットワーク制御を行う場合は、機能や役割ごとにサブネットを分けて、そのサブネットに対してNetwork Security Groupを設定していくことが多いです。(一部のリソースでは、リソース自体の設定値として同じような設定があるため一概に全てサブネットで設定するとは限らないですが…)
仮想ネットワークと各Azureリソースとの接続方法
ネットワークインターフェース
仮想マシンなど一部のリソースでは、リソース自身に直接ネットワークインターフェースを割り当てることができ、そのネットワークインターフェースをサブネットに配置することで接続することができる。
サービスエンドポイント
AzureのPaaSサービスのパブリック接続の設定にて、特定の仮想ネットワークからのみ接続する際に使用する機能。この機能を有効にすると、仮想ネットワークのルートテーブルに、接続先のPaaSサービスへのルートが自動的に追加され、PaaSサービスへの通信の送信元IPアドレスがプライベートIPアドレスのまま通信することができる様になる。(こうすることで、PaaSサービス側で仮想ネットワークからの通信か判別できる。なお、設定していない場合は、送信元IPアドレスはNATされてパブリックIPアドレスになる)
プライベートエンドポイント
AzureのPaaSサービスに対して、仮想ネットワーク内からプライベートIPアドレスで接続するための機能。この機能を使用すると、仮想ネットワーク内にPaaSサービスにリンクしたネットワークインターフェースが作成され、そのネットワークインターフェイスに対して通信を行うことで、PaaSサービスとの通信を行うことができる。
サービスエンドポイントとプライベートエンドポイントの違い
- サービスエンドポイント
- ネットワークインターフェースを作成しないため、仮想ネットワークのアドレスを使用しない
- PaaSサービス側でNetwork Security Groupを設定することができない (PaaSサービス自体はサブネットに所属していないため)
- 仮想ネットワークのアドレス範囲のみ許可されるため、それ以外のアドレスからの接続は別途何らかの設定をしないと接続できない(オンプレミス側から接続する場合など)
- プライベートエンドポイント
- ネットワークインターフェースを作成するため、仮想ネットワークのアドレスを使用する
- PaaSサービス側でNetwork Security Groupを設定することができる (ちなみに古い記事だとできないと書いてあるが、確か3年前くらいのアップデートでできるようになった)
- 仮想ネットワークのアドレス範囲以外からの接続も可能 (オンプレミス側から接続する場合など)
仮想ネットワークから外部(インターネット)に接続する方法
※PaaSサービスについては基本的には各サービスの設定内で設定可能。あくまでも仮想マシンなどのIaaSサービスの話です
パブリックIP
仮想マシンなどのリソースに直接パブリックIPアドレスを割り当てる方法。これを使用すると、仮想マシンなどのリソースが直接インターネットに接続できるようになります。
NAT Gateway
NAT変換を行うためのAzureリソース。このリソースを利用すると外部との接続時にNAT変換を行った上で外部に接続を行うため、パブリックIPを利用する方法と異なり、外部からの直接の接続を防ぐことができます。
Load Balancer
本来は、外部からの通信を仮想マシンなどに分散するためのAzureリソース。ただ、このリソースの機能の中に「送信規則」というものがあり、これを利用することで仮想ネットワーク内から外部への通信が可能になります。