BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Azure,SNAT】第1章【朗報】AzureだとパブリックIPアドレス持ってなくても外部接続できる?!

はじめに

こんにちは!

株式会社BFT名古屋支店・新卒の「なる」と「もな」です!

前回までの【悲報】シリーズ、読んでいただけましたか?  

bftnagoya.hateblo.jp

前回と同様に、新卒研修の中で構築したブログシステムとストリーミングシステムを、今回はAzure上で再現してみました!

さらに今回はWEB3層システム構築のために、AP・DBサーバの連携に挑戦しました!

AP・DBサーバ連携の話はまた第2章にお話ししようと思います。


さて、今回はAWSでの経験を生かしてAzure上でシステムを構築することができましたが、そんな中でもAWSとの仕様の違いに戸惑うことがありました。

この章では、システムを構築する中でAWSとは異なっていた点、またそれについて学んだことを皆さんに共有させてください!

さあ、構築スタート!

前回のAWSでの構築を参考に、最初に考えたシステムの構成図はこんな感じです。

出典:Tomcat icon by Icons8



VMを3台たて、それぞれApache, Tomcat, MariaDBをインストールし、連携させていきます。

また、セキュリティを強化するためにWEBサーバのみにパブリックIPアドレスをもたせ、APサーバとDBサーバはWebサーバを踏み台にして接続する構成としました。
※コスト面と検証用であることを考慮し、Webサーバに踏み台の機能を持たせる構成になっています


今回は前回までの【悲報】シリーズでつまずきすぎたおかげで、大きな問題なく構築することができました~

、、、が!!1つ大きな仕様の違いがありました。


もな「DBサーバにMariaDBがインストールされていないことを事前に確認っと。」

$ yum list installed mariadb-server

なる「ついでにパブリックIPアドレスもってないし、yumコマンド実行できないことも確認しとこ。」

$ sudo yum list install mariadb-server

もな「...え。yum通っちゃった。」


規定で外部接続できちゃう?!

...なんと、Azure VM はパブリック IP アドレスやパブリックロードバランサーに関連づいていない状態でも、元からSNAT(Source Network Address Translation)という機能によって外部接続できるようになっていたのです。

前回までのAWSでの構築では、プライベートサブネットに属しているDBサーバでyumコマンドが実行できないという問題(【悲報】シリーズ第2章)につまずきました。
bftnagoya.hateblo.jp

しかし、Azureでは何も設定することなくSNATによってyumが実行できる、外部接続できるのです。

VNetに接続している仮想マシンなどのリソースは、パブリックIPアドレスを設定していない場合でも、デフォルトでインターネットへの送信方向(アウトバウンド)の通信が可能です。
出典:ASCII.jpAzureの基本的なネットワークサービスを理解する【前編】
https://ascii.jp/elem/000/004/031/4031628/2/

これに関しては上でのyumコマンドに関するやり取りでも確認済みです。

注意!インバウンドに関しては...

ただし、デフォルト設定のままでは、インターネットからの受信方向(インバウンド)の通信は行えません。以下に、インバウンドの通信に関して行った検証を記載しておきます。


1.パブリックIPアドレスを割り当てていないAPサーバで下記のコマンドを実行し、グローバルIPアドレスを確認する

$ curl inet-ip.info

(出力例)

2.下記のURLにアクセスし、tomcatの画面が見られないことを確認する

http://XXX.XXX.XXX.XXX(確認したグローバルIPアドレス):8080

(出力例)



インバウンド通信を可能にするためには、VMにパブリックIPアドレスを設定するか、パブリックロードバランサーを利用する必要があります。

まとめ

SNATは以下のような場合によく使われます。

テスト/開発用 VM で外部送信が必要になる場合 (e.g. ひとまずインターネットに通信できていれば特に問題ない開発マシン)
出典:MicrosoftAzure VM の外部接続 (SNAT) オプション まとめ
https://jpaztech.github.io/blog/network/snat-options-for-azure-vm/

また、この機能に関して以下のことに注意する必要があります。

パブリック IP アドレスを付与しなくても外部接続できるという利便性がある一方で、予期せず外部送信を許可しているケースもあります
出典:MicrosoftAzure VM の外部接続 (SNAT) オプション まとめ
https://jpaztech.github.io/blog/network/snat-options-for-azure-vm/


今回はAWSとの仕様の違いで試しにyumを実行したという内容ですが、外部へ通信をしたくないサーバはインターネットへの接続を拒否し、yumを実行するときはsquidを利用するなど、セキュリティ面を考えて構築したいですね!


次回、【Azure,JDBCドライバ】第2章【朗報】AzureでWEB3層システム構築してみた!~AP・DB連携~

(参照)
・ASCII.jpAzureの基本的なネットワークサービスを理解する【前編】
https://ascii.jp/elem/000/004/031/4031628/2/
・MicrosoftAzure VM の外部接続 (SNAT) オプション まとめ
https://jpaztech.github.io/blog/network/snat-options-for-azure-vm/


...次回
【Azure,JDBCドライバ】第2章【朗報】AzureでWEB3層システム構築できました!~AP・DB連携~