ポイントを速習!「Azureの基礎(AZ900)」をみんなで学ぶ 第13回
実際にNSG(Network Security Group)とVNet Service Endpointを構成してみる
Azureのセキュリティで知っておきたいこと、対策の基礎【後編】
2021年03月26日 08時00分更新
既定の規則を使って接続を確認
VMが用意できたら、それぞれのVMに対してSSHセッションが確立できるか試してみましょう。
1. ここまで使ってきたCloud ShellターミナルからSSH接続を行います。そのために2つのVMのパプリックIPアドレスが必要になるため、まずは次のコマンドを実行してください。
az vm list \
--resource-group $rg \
--show-details \
--query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
--output table
2. このあと何度もパブリックIPを使うことになるので、それぞれ変数(APPSERVERIP、DATASERVERIP)に保存しておきます。次の2つのコマンドを実行して下さい。
APPSERVERIP="$(az vm list-ip-addresses \
--resource-group $rg \
--name AppServer \
--query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
--output tsv)"
DATASERVERIP="$(az vm list-ip-addresses \
--resource-group $rg \
--name DataServer \
--query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
--output tsv)"
3. 各VMにSSH接続できるかどうか、sshコマンドで試してみましょう。 次の2つのコマンドを実行します。
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
するとどうでしょう。「Connection timed out」というエラーメッセージが表示されたと思います。ここで、先ほどSERVERS-NSGをデプロイした際(「VNetとNSGを作成する」の6.)には特段何も指定せず、規定の規則でデプロイしたことを思い出してみてください。
特に何も指定せずデプロイしたNSGでは、規定の規則群に含まれる「Deny All Inbound」という規則によって、VNetへの受信(インバウンド)方向のトラフィックはすべて拒否するように設定されています。これにより、SSH接続がブロックされたわけです。
SSHのセキュリティ規則を作成
VMへのSSH接続が拒否された理由がわかったので、次はSERVERS-NSGにセキュリティ規則を追加して、各VMにSSH接続できるように設定を変更してみましょう。
1. SSHでのアクセスを有効にするセキュリティ規則を作成するために、次のコマンドを実行して下さい。
az network nsg rule create \
--resource-group $rg \
--nsg-name SERVERS-NSG \
--name AllowSSHRule \
--direction Inbound \
--priority 100 \
--source-address-prefixes '*' \
--source-port-ranges '*' \
--destination-address-prefixes '*' \
--destination-port-ranges 22 \
--access Allow \
--protocol Tcp \
--description "Allow inbound SSH"
2. もう一度、AppServer VMにSSH接続を実行してみます。なお、NSGの規則は有効になるまでに数分かかる場合があるため、接続エラーが出た場合は少し時間を置いてから、もう一度やり直してみてください。
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
3. 接続できるようになったら、接続を続行するかどうかを尋ねられるので「yes」を入力して下さい。パスワード入力が求められたら、AppServer VMの作成時(「Linux VMを作成する」の1.)に設定したパスワードを入力します。
4. これでAppServer VMへのSSH接続は成功です。SSHセッションを閉じるために、「exit」コマンドを実行してください。
5. 以上の2.~4.をDataServer VMに対しても試してみてください。同様の結果が得られるはずです。
HTTPアクセスを禁止する規則を追加
続いて、SERVERS-NSGに「AppServerからはHTTP経由でDataServerと通信できるが、DataServerからはHTTP経由でAppServerと通信できない」という規則を追加します。なお、ここで確認しておきますが、AppServerの内部IPは「10.0.0.4」、DataServerの内部IPは「10.0.1.4」となっています。
1. 80番ポートでのHTTPアクセスを拒否する新しいセキュリティ規則を作成するために、次のコマンドを実行して下さい。
az network nsg rule create \
--resource-group $rg \
--nsg-name SERVERS-NSG \
--name httpRule \
--direction Inbound \
--priority 150 \
--source-address-prefixes 10.0.1.4 \
--source-port-ranges '*' \
--destination-address-prefixes 10.0.0.4 \
--destination-port-ranges 80 \
--access Deny \
--protocol Tcp \
--description "Deny from DataServer to AppServer on port 80"
VM間のHTTP接続を確認
SERVERS-NSGに新しい規則を追加したので、正しく動作しているかどうかを確認します。先ほどの設定どおりならば、AppServerはHTTPS経由でDataServerへ接続できるはずです。
1. まず、AppServer VMへSSH接続してwgetコマンドを実行し、HTTP経由でDataServerへ接続できるかどうかを確認します。次のコマンドを実行してください。
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
2. AppServer VMを作成した際のパスワードを入力すると、すぐに"200 OK"レスポンスが表示されるはずです。つまり、AppServerからDataServerへは、HTTP経由で接続できることが確認できました。
3. 続いて、同じようにDataServerへSSH接続し、先ほどとは逆方向のHTTP通信を試します。次のコマンドを実行してください。
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
4. DataServer VMを作成した際のパスワードを入力すると、今度は「Connecting to 10.0.0.4:80...」と表示されたまま何も起こらず、数分後に「Connection timed out」と表示されるはずです(このままリトライを繰り返すので、Ctrl+Cキーでコマンド実行を中止してください)。
これは、先ほど追加したSERVERS-NSGの規則でDataServerからAppServerへのHTTP(ポート80)アクセスがブロックされているため、接続がタイムアウトしたのです。


この連載の記事
-
第12回
TECH
Azureのセキュリティで知っておきたいこと、対策の基礎【前編】 -
第11回
TECH
Azureの利用コストを管理、予測して支出を最適化する -
第10回
TECH
Azureの基本的なネットワークサービスを理解する【後編】 -
第9回
TECH
Azureの基本的なネットワークサービスを理解する【前編】 -
第8回
TECH
Azureのストレージサービスを理解し「SQL Database」に触れてみる -
第7回
TECH
「Azure VM」などAzureの幅広いコンピューティングサービスを知る -
第6回
TECH
Azureの主な管理ツールを知り、リソースを管理する【後編】 -
第5回
TECH
Azureの主な管理ツールを知り、リソースを管理する【前編】 -
第4回
TECH
Azureのインフラ構成とサービス可用性を高める仕組み -
第3回
TECH
Azureの代表的なサービスを知る/使ってみる【後編】 - この連載の一覧へ