演習 - ネットワーク セキュリティ グループを作成し、管理する

完了

あなたは、製造会社のソリューション アーキテクトとして、ERP アプリとデータベース サーバーの Azure への移行を開始したいと考えています。 最初の手順として、2 台のサーバーを利用し、ネットワーク セキュリティ プランをテストします。

このユニットでは、ネットワーク トラフィックを特定のサーバーに制限するよう、ネットワーク セキュリティ グループとセキュリティ規則を構成します。 アプリ サーバーは、HTTP 経由でデータベース サーバーに接続できるようにする必要があります。 データベース サーバーは、HTTP を使ってアプリ サーバーに接続できないようにする必要があります。

Diagram of exercise scenario network security groups.

仮想ネットワークとネットワーク セキュリティ グループを作成する

最初に、サーバー リソースに対して仮想ネットワークとサブネットを作成します。 次に、ネットワーク セキュリティ グループを作成します。

  1. Azure Cloud Shell で、次のコマンドを実行して、サンドボックスのリソース グループを変数 rg に割り当てます。

    rg="<rgn>[sandbox resource group name]</rgn>"
    
  2. ERP-servers という仮想ネットワークと Applications というサブネットを作成するために、Cloud Shell で次のコマンドを実行します。

    az network vnet create \
        --resource-group $rg \
        --name ERP-servers \
        --address-prefixes 10.0.0.0/16 \
        --subnet-name Applications \
        --subnet-prefixes 10.0.0.0/24
    
  3. Cloud Shell で次のコマンドを実行し、Databases サブネットを作成します。

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. Cloud Shell で次のコマンドを実行し、ERP-SERVERS-NSG ネットワーク セキュリティ グループを作成します。

    az network nsg create \
        --resource-group $rg \
        --name ERP-SERVERS-NSG
    

Ubuntu を実行する VM を作成する

次に、VM を 2 つ作成します。名前は AppServerDataServer にします。 AppServerApplications サブネットに、DataServerDatabases サブネットにデプロイします。 VM ネットワーク インターフェイスを ERP-SERVERS-NSG ネットワーク セキュリティ グループに追加します。 次に、ネットワーク セキュリティ グループをテストするために、これらの VM を使用します。

  1. AppServer という名前の VM をビルドするには、Cloud Shell で次のコマンドを実行します。 管理者アカウントの場合、<password> を複雑なパスワードに変更します。

    wget -N https://raw.githubusercontent.com/MicrosoftDocs/mslearn-secure-and-isolate-with-nsg-and-service-endpoints/master/cloud-init.yml && \
    az vm create \
        --resource-group $rg \
        --name AppServer \
        --vnet-name ERP-servers \
        --subnet Applications \
        --nsg ERP-SERVERS-NSG \
        --image Ubuntu2204 \
        --size Standard_DS1_v2 \
         --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
        --no-wait \
        --admin-password <password>
    
  2. DataServer という名前の VM をビルドするには、Cloud Shell で次のコマンドを実行します。 管理者アカウントの場合、<password> を複雑なパスワードに変更します。

    az vm create \
        --resource-group $rg \
        --name DataServer \
        --vnet-name ERP-servers \
        --subnet Databases \
        --nsg ERP-SERVERS-NSG \
        --size Standard_DS1_v2 \
        --image Ubuntu2204 \
        --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
         --no-wait \
        --admin-password <password>
    
  3. VM が実行状態になるまで、数分かかる場合があります。 VM が実行されていることを確認するために、Cloud Shell で次のコマンドを実行します。

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \
        --output table
    

    VM の作成が完了すると、次の出力が表示されます。

    Name        Provisioned    Power
    ----------  -------------  ----------
    AppServer   Succeeded      VM running
    DataServer  Succeeded      VM running
    

既定の接続を確認する

ここでは、各 VM に対する Secure Shell (SSH) セッションを開いてみます。 これまで、既定の規則を使ってネットワーク セキュリティ グループをデプロイしてきたことを思い出してください。

  1. VM に接続するには、Cloud Shell から直接 SSH を使います。 これを行うには、VM に割り当てられているパブリック IP アドレスが必要になります。 VM への接続に使用する IP アドレスの一覧を表示するために、Cloud Shell で次のコマンドを実行します。

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. この演習の残りでは、VM に簡単に接続するために、パブリック IP アドレスを変数に割り当てます。 AppServerDataServer のパブリック IP アドレスを変数に保存するために、Cloud Shell で次のコマンドを実行します。

    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. AppServer VM に接続できるかどうかを確認するために、Cloud Shell で次のコマンドを実行します。

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Connection timed out メッセージが表示されます。

  4. DataServer VM に接続できるかどうかを確認するために、Cloud Shell で次のコマンドを実行します。

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    同じ接続エラー メッセージが表示されます。

既定の規則では、トラフィックが同じ仮想ネットワークから送信されない限り、仮想ネットワークへのインバウンド トラフィックがすべて拒否されることを思い出してください。 [すべての受信を拒否する] 規則により、たった今試みたインバウンド SSH 接続がブロックされました。

インバウンド

名前 優先度 発信元 IP 宛先 IP アクセス
VNet 受信を許可する 65000 VIRTUAL_NETWORK VIRTUAL_NETWORK 許可
すべての受信を拒否する 65500 * * 拒否

SSH のセキュリティ規則を作成する

おわかりのように、ERP-SERVERS-NSG ネットワーク セキュリティ グループの既定の規則には [すべての受信を拒否する] 規則が含まれています。 次は、SSH を使用して AppServerDataServer に接続できるよう、規則を追加します。

  1. SSH アクセスを有効にする新しいインバウンド セキュリティ規則を作成するために、Cloud Shell で次のコマンドを実行します。

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-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 に接続できるようになったかどうかを確認するために、Cloud Shell で次のコマンドを実行します。

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    ネットワーク セキュリティ グループ規則は、有効になるまで 1、2 分かかる場合があります。 接続エラー メッセージが表示された場合は、しばらく待ってからもう一度やり直してください。

  3. 接続できるようになったはずです。 Are you sure you want to continue connecting (yes/no)? メッセージの後に「yes」と入力します。

  4. VM を作成したときのパスワードを入力します。

  5. AppServer セッションを閉じるために、「exit」と入力します。

  6. DataServer VM に接続できるようになったかどうかを確認するために、Cloud Shell で次のコマンドを実行します。

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. 接続できるようになったはずです。 Are you sure you want to continue connecting (yes/no)? メッセージの後に「yes」と入力します。

  8. VM を作成したときのパスワードを入力します。

  9. DataServer セッションを閉じるために、「exit」と入力します。

Web アクセスを禁止するセキュリティ規則を作成する

次に、AppServer は HTTP 経由で DataServer と通信できるが、DataServer は HTTP 経由で AppServer と通信できないように規則を追加します。 これらのサーバーの内部 IP アドレスを次に示します。

サーバー名 IP アドレス
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. ポート 80 での HTTP アクセスを拒否する新しいインバウンド セキュリティ規則を作成するため、Cloud Shell で次のコマンドを実行します。

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-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"
    

仮想マシン間の HTTP 接続をテストする

ここでは、新しいルールの動作を確認します。 AppServer は HTTP 経由で DataServer と通信できるはずです。 DataServer は HTTP 経由で AppServer と通信できないはずです。

  1. AppServer VM に接続するために、Cloud Shell で次のコマンドを実行します。 AppServer が HTTP 経由で DataServer と通信できるか確認します。

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. VM を作成したときのパスワードを入力します。

  3. 応答には 200 OK メッセージが含まれているはずです。

  4. DataServer VM に接続するために、Cloud Shell で次のコマンドを実行します。 DataServer が HTTP 経由で AppServer と通信できるか確認します。

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. VM を作成したときのパスワードを入力します。

  6. ポート 80 でのアクセスをブロックしているため、これは失敗するはずです。 数分後、Connection timed out メッセージが届きます。 タイムアウト前にコマンドを停止するには、Ctrl + C キーを押します。

アプリ セキュリティ グループをデプロイする

次に、データベース サーバー用のアプリ セキュリティ グループを作成し、このグループ内のすべてのサーバーに同じ設定を割り当てられるようにします。 あなたはさらに多くのデータベース サーバーをデプロイすることを計画していて、これらのサーバーでは HTTP 経由でアプリ サーバーにアクセスできないようにする必要があります。 アプリ セキュリティ グループで送信元を割り当てることで、IP アドレスの一覧をネットワーク セキュリティ グループ内で手動で管理する必要がなくなります。 その代わり、管理する VM のネットワーク インターフェイスをアプリ セキュリティ グループに割り当てます。

Diagram of exercise scenario app security groups.

  1. ERP-DB-SERVERS-ASG という名前の新しいアプリ セキュリティ グループを作成するために、Cloud Shell で次のコマンドを実行します。

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. DataServer とアプリ セキュリティ グループを関連付けるために、Cloud Shell で次のコマンドを実行します。

    az network nic ip-config update \
        --resource-group $rg \
        --application-security-groups ERP-DB-SERVERS-ASG \
        --name ipconfigDataServer \
        --nic-name DataServerVMNic \
        --vnet-name ERP-servers \
        --subnet Databases
    
  3. ERP-SERVERS-NSG ネットワーク セキュリティ グループ内の HTTP 規則を更新するため、Cloud Shell で次のコマンドを実行します。 ERP-DB-Servers アプリ セキュリティ グループを参照させる必要があります。

    az network nsg rule update \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes "" \
        --source-port-ranges '*' \
        --source-asgs ERP-DB-SERVERS-ASG \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80 using application security group"
    

更新された HTTP セキュリティ規則をテストする

  1. AppServer VM に接続するために、Cloud Shell で次のコマンドを実行します。 AppServer が HTTP 経由で DataServer と通信できるか確認します。

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. VM を作成したときのパスワードを入力します。

  3. 前と同様に、応答には 200 OK メッセージが含まれます。 アプリ セキュリティ グループの設定が有効になるまで、1、2 分かかることがあります。 最初に 200 OK メッセージが届かない場合は、しばらくしてからもう一度やり直してください。

  4. DataServer に接続するために、Cloud Shell で次のコマンドを実行します。 DataServer が HTTP 経由で AppServer と通信できるか確認します。

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. VM を作成したときのパスワードを入力します。

  6. 前と同様に、ポート 80 でのアクセスをブロックしているため、これは失敗するはずです。 数分後、Connection timed out メッセージが届きます。 タイムアウト前にコマンドを停止するには、Ctrl + C キーを押します。

これで、ネットワーク セキュリティ グループ規則は、アプリ セキュリティ グループを使用した場合も、発信元 IP アドレスを使用したときと同じように機能することが確認されました。 データ サーバーを追加した場合、新しいサーバーを ERP-DB-SERVERS-ASG に追加すると、適切なネットワーク セキュリティを簡単に確保できます。