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

完了

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

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

演習シナリオのネットワーク セキュリティ グループの図。

この演習は省略してもかまいません。 この演習を完了する場合は、開始する前に Azure サブスクリプションを作成する必要があります。 Azure アカウントを持っていない場合、または現時点で作成したくない場合は、指示を読んで、提示されている情報を理解することができます。

この演習の手順を完了するには、リソース グループを使用する必要があります。 既に作成したリソース グループを使用することも、この演習専用の新しいリソース グループを作成することもできます。 新しいリソース グループを作成する場合は、演習を完了するときに作成したリソースを簡単にクリーンアップできます。 既存のリソース グループがない場合、またはこの演習専用の新しいリソース グループを作成する場合は、「 Azure portal と Azure Resource Manager を使用してリソース グループを管理し、Azure portal を使用してリソース グループを作成する」の手順に従うか、「Azure CLI を使用して Azure リソース グループを管理して Azure CLI を使用して リソース グループを作成する」の手順に従うことができます。

このユニットでは、ターミナルとして Azure Cloud Shell を使用します。 Cloud Shell には 、Azure portal または Cloud Shell サインインを使用してアクセスできます。 お使いの PC やラップトップに何もインストールしなくても使用できます。

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

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

  1. Azure Cloud Shell を開き、次のコマンドを実行して、リソース グループの名前を変数rgに割り当てます。 myResourceGroupName をリソース グループの名前に置き換えます。

    rg="myResourceGroupName"
    
  2. ERP-servers 仮想ネットワークとアプリケーション サブネットを作成するには、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 で次のコマンドを実行します。

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

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

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

次に、 AppServer と DataServer という 2 つの VM を作成 しますAppServer はApplications サブネットに、DataServer はデータベース サブネットにデプロイします。 ERP-SERVERS-NSG ネットワーク セキュリティ グループに VM ネットワーク インターフェイスを追加します。 次に、ネットワーク セキュリティ グループをテストするために、これらの 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 仮想ネットワーク 仮想ネットワーク 許可
すべての受信を拒否する 65500 * * 拒否

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

ここまでに説明したように、 ERP-SERVERS-NSG ネットワーク セキュリティ グループの既定の規則には、 すべての受信拒否 規則が含まれています。 次に、SSH を使用して AppServer と DataServer に接続できるようにルールを追加 します

  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
データサーバー 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 のネットワーク インターフェイスをアプリ セキュリティ グループに割り当てます。

演習シナリオのアプリ セキュリティ グループの図。

  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 に新しいサーバーを追加することで、適切なネットワーク セキュリティを簡単に確保できます。