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

完了

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

重要

この演習用の VM は、このモジュールで以前に作成されています。 ユニット 3 で作成した VM またはリソース グループを削除した場合は、前の演習をやり直す必要があります (演習 - Azure 仮想マシンの作成)。

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

この演習の一部のコマンドでは、Bash バージョンの Cloud Shell を使用することが重要です。 現在 PowerShell モードの場合は、[切り替え...] ボタンを使用できます。

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

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

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

    IPADDRESS="$(az vm list-ip-addresses \
      --resource-group "IntroAzureRG" \
      --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       
      

      IP アドレス ( 23.102.42.235 など) が表示されます。

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

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

      接続がタイムアウトしたことを示すエラー メッセージを示す Web ブラウザーのスクリーンショット。

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

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

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

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

    az network nsg list \
      --resource-group "IntroAzureRG" \
      --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 "IntroAzureRG" \
      --nsg-name my-vmNSG    
    

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

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

    az network nsg rule list \
      --resource-group "IntroAzureRG" \
      --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 "IntroAzureRG" \
      --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 "IntroAzureRG" \
      --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 サーバーを指すようにブラウザー タブを更新します。 ホーム ページが表示されます。

    Web サーバーのホーム ページを示す Web ブラウザーのスクリーンショット。ホーム ページにウェルカム メッセージが表示されます。

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

この演習と、このモジュールのすべての演習を完了しました。 Azure 環境をクリーンアップし、使用されていないときに VM を実行したままにしないようにするには、 IntroAzureRG リソース グループを削除します。

クリーンアップ

  1. Azure ホーム ページの Azure サービスで、[ リソース グループ] を選択します。
  2. IntroAzureRG リソース グループを選択します。
  3. [リソース グループの削除] を選択します。
  4. IntroAzureRG入力してリソース グループの削除を確認し、[削除] を選択します。