演習 - ネットワーク アクセスを構成する

完了

この演習では、このモジュールで前に作成した仮想マシン (VM) へのアクセスを構成します。

重要

Microsoft Learn サンドボックスは、引き続き実行されている必要があります。 サンドボックスがタイムアウトした場合は、前の演習 (「演習 - Azure 仮想マシンを作成する」) をやり直す必要があります。

前に作成した VM がまだ実行中であることを確認するには、次のコマンドを使用します。

az vm list


空の応答 [] を受け取った場合は、このモジュールの最初の演習をもう一度完了する必要があります。 結果に現在の VM とその設定が一覧表示される場合は、続行できます。

現時点では、Nginx を作成してインストールした VM には、インターネットからアクセスできません。 ポート 80 で受信 HTTP アクセスを許可することで、これを変更するネットワーク セキュリティ グループを作成します。

タスク 1: Web サーバーにアクセスする

この手順では、VM の IP アドレスを取得し、Web サーバーのホーム ページへのアクセスを試します。

  1. 次の az vm list-ip-addresses コマンドを実行して、VM の IP アドレスを取得し、その結果を Bash 変数として格納します。

    IPADDRESS="$(az vm list-ip-addresses \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --name my-vm \
      --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
      --output tsv)"    
    
  2. 次の curl コマンドを実行して、ホームページをダウンロードします。

    curl --connect-timeout 5 http://$IPADDRESS
    

    --connect-timeout 引数で、接続が発生するまで最大 5 秒の時間を許可することを指定します。 5 秒後に、接続がタイムアウトしたことを示すエラー メッセージが表示されます。

    curl: (28) Connection timed out after 5001 milliseconds
    

    このメッセージは、タイムアウト期間内に VM にアクセスできなかったことを意味します。

  3. 省略可能な手順として、ブラウザーから Web サーバーへのアクセスを試してみます。

    1. 次を実行して、VM の IP アドレスをコンソールに出力します。

      echo $IPADDRESS       
      

      たとえば 23.102.42.235 のような IP アドレスが表示されます。

    2. 表示された IP アドレスをクリップボードにコピーします。

    3. 新しいブラウザー タブを開き、Web サーバーに移動します。 しばらくすると、接続が行われていないことがわかります。 ブラウザーがタイムアウトするまで待つと、次のように表示されます。

      Screenshot of a web browser showing an error message that says the connection timed out.

    4. このブラウザー タブは後で使用するため、開いたままにしておきます。

タスク 2: 現在のネットワーク セキュリティ グループ規則の一覧を表示する

Web サーバーにアクセスすることができませんでした。 理由を明らかにするために、現在の NSG 規則を調べてみましょう。

  1. 次の az network nsg list コマンドを実行して、VM に関連付けられているネットワーク セキュリティ グループを一覧表示します。

    az network nsg list \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --query '[].name' \
      --output tsv    
    

    次のように表示されます。

    my-vmNSG
    
    
    

    Azure 上のすべての VM は、少なくとも 1 つのネットワーク セキュリティ グループに関連付けられます。 この例では、Azure によって、my-vmNSG という名前の NSG が作成されました。

  2. 次の az network nsg rule list コマンドを実行して、my-vmNSG という名前の NSG に関連付けられている規則を一覧表示します。

    az network nsg rule list \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --nsg-name my-vmNSG    
    

    JSON 形式の大きなテキスト ブロックが出力として表示されます。 次の手順で、この出力を読みやすくするための似たようなコマンドを実行します。

  3. az network nsg rule list コマンドをもう一度実行します。 今回は、--query 引数を使用して、各規則の名前、優先度、影響を受けるポート、およびアクセス (許可または拒否) のみを取得します。 --output 引数によって、読みやすくするために出力が表として書式設定されます。

    az network nsg rule list \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --nsg-name my-vmNSG \
      --query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \
      --output table    
    

    次のように表示されます。

    Name              Priority    Port    Access
    -----------------  ----------  ------  --------
    default-allow-ssh  1000        22      Allow
    
    

    既定の規則 default-allow-ssh が表示されます。 この規則によって、ポート 22 (SSH) 経由の受信接続が許可されます。 SSH (Secure Shell) は、管理者がシステムにリモートでアクセスできるようにするために、Linux で使用されるプロトコルです。 この規則の優先度は 1000 です。 規則は優先度順に処理され、小さい数値を持つ規則が大きな数値のものよりも前に処理されます。

既定では、Linux VM の NSG では、ポート 22 でのネットワーク アクセスのみが許可されます。 これにより、管理者はシステムにアクセスできます。 さらに、HTTP 経由のアクセスを許可するポート 80 での受信接続も許可する必要があります。

タスク 3: ネットワーク セキュリティ ルールを作成する

ここでは、ポート 80 (HTTP) での受信アクセスを許可するネットワーク セキュリティ規則を作成します。

  1. 次の az network nsg rule create コマンドを実行して、ポート 80 での受信アクセスを許可する allow-http という名前の規則を作成します。

    az network nsg rule create \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --nsg-name my-vmNSG \
      --name allow-http \
      --protocol tcp \
      --priority 100 \
      --destination-port-range 80 \
      --access Allow    
    

    学習目的のために、ここでは優先度を 100 に設定します。 この例では優先度は重要ではありません。 ポート範囲が重複している場合は、優先度を考慮する必要があります。

  2. 構成を検証するために、az network nsg rule list を実行して、更新された規則の一覧を表示します。

    az network nsg rule list \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --nsg-name my-vmNSG \
      --query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \
      --output table    
    

    default-allow-ssh 規則と、新しい規則である allow-http の両方が表示されます。

    Name              Priority    Port    Access
    -----------------  ----------  ------  --------
    default-allow-ssh  1000        22      Allow
    allow-http          100        80      Allow    
    

タスク 4: Web サーバーにもう一度アクセスする

これでポート 80 へのネットワーク アクセスを構成したので、Web サーバーにもう一度アクセスしてみましょう。

注意

NSG を更新した後、更新されたルールが伝達されるまでに少し時間がかかることがあります。 目的の結果が得られるまで、試行の間に一時停止して、次の手順を再試行します。

  1. 先ほど実行したのと同じ curl コマンドを実行します。

    curl --connect-timeout 5 http://$IPADDRESS
    

    次のように表示されます。

    <html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>
    
  2. 省略可能な手順として、Web サーバーを指すようにブラウザー タブを更新します。 次のように表示されます。

    A screenshot of a web browser showing the home page from the web server. The home page displays a welcome message.

よくできました。 実際には、必要な受信と送信のネットワーク アクセス規則を含むスタンドアロン ネットワーク セキュリティ グループを作成できます。 同じ目的で使用される VM が複数ある場合は、作成時に各 VM にその NSG を割り当てることができます。 この手法を使用して、複数の VM へのネットワーク アクセスを、単一の一元的な規則セットで制御できます。

クリーンアップ

このモジュールを完了したら、サンド ボックスは、リソースを自動的にクリーンアップします。

独自のサブスクリプションを使用している場合は、プロジェクトの最後に、作成したリソースがまだ必要かどうかを確認してください。 リソースを実行したままにすると、コストが発生する可能性があります。 リソースを個別に削除するか、リソース グループを削除してリソースのセット全体を削除することができます。