このページの本文へ

ポイントを速習!「Azureの基礎(AZ900)」をみんなで学ぶ 第13回

実際にNSG(Network Security Group)とVNet Service Endpointを構成してみる

Azureのセキュリティで知っておきたいこと、対策の基礎【後編】

2021年03月26日 08時00分更新

文● 椎名泰之/FIXER 編集● 大塚/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

既定の規則を使って接続を確認

 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)アクセスがブロックされているため、接続がタイムアウトしたのです。

カテゴリートップへ

この連載の記事