연습 - 네트워크 액세스 구성

완료됨

이 연습에서는 이 모듈의 앞부분에서 만든 VM(가상 머신)에 대한 액세스를 구성합니다.

Important

Microsoft Learn 샌드박스가 계속 실행 중이어야 합니다. 샌드박스 시간이 초과된 경우 이전 연습을 다시 실행해야 합니다(연습 - Azure 가상 머신 만들기).

이전에 만든 VM이 여전히 실행 중인지 확인하려면 다음 명령을 사용합니다.

az vm list



















빈 응답 []을(를) 받으면 이 모듈의 첫 번째 연습을 다시 완료해야 합니다. 결과에 현재 VM 및 해당 설정이 열거되면 계속해도 됩니다.

지금 당장은 만들고 Nginx를 설치했던 VM에 인터넷에서 액세스할 수 없습니다. 포트 80에서 인바운드 HTTP 액세스를 허용하여 이를 변경하는 네트워크 보안 그룹을 만들 것입니다.

작업 1: 웹 서버 액세스

이 절차에서는 VM의 IP 주소를 가져오고 웹 서버의 홈페이지에 액세스를 시도합니다.

  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. 선택적 단계로 브라우저에서 웹 서버에 액세스를 시도합니다.

    1. 다음을 실행하여 VM의 IP 주소를 콘솔로 출력합니다.

      echo $IPADDRESS       
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      

      IP 주소(예: 23.102.42.235)가 표시됩니다.

    2. 표시된 IP 주소를 클립보드에 복사합니다.

    3. 새 브라우저 탭을 열고 웹 서버로 이동합니다. 잠시 후 연결되지 않음을 확인할 수 있습니다. 브라우저가 시간 초과될 때까지 기다리는 경우 다음과 같은 내용이 표시됩니다.

      연결 시간이 초과되었다는 오류 메시지를 표시하는 웹 브라우저의 스크린샷.

    4. 나중에 사용할 수 있도록 이 브라우저 탭을 열어 둡니다.

작업 2: 현재 네트워크 보안 그룹 규칙 나열

웹 서버에 액세스하지 못했습니다. 이유를 확인하기 위해 현재 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은 하나 이상의 네트워크 보안 그룹에 연결됩니다. 해당 사례에서 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: 웹 서버에 다시 액세스

포트 80에 대한 네트워크 액세스를 구성했으므로 웹 서버에 다시 액세스해 보겠습니다.

참고 항목

NSG를 업데이트한 후 업데이트된 규칙이 전파되기까지 몇 분 정도 걸릴 수 있습니다. 원하는 결과를 얻을 때까지 다음 단계를 다시 시도하되, 시도하는 사이에 잠시 멈춥니다.

  1. 이전에 실행한 것과 동일한 curl 명령을 실행합니다.

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

    다음과 같은 응답이 표시됩니다.

    <html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  2. 선택적 단계로 웹 서버를 가리키는 브라우저 탭을 새로 고칩니다. 다음과 같은 홈페이지가 표시됩니다.

    웹 서버에서 홈페이지를 보여주는 웹 브라우저의 스크린샷. 홈페이지는 환영 메시지를 표시합니다.

수고 많으셨습니다. 실제로 필요한 인바운드 및 아웃바운드 네트워크 액세스 규칙을 포함하는 독립 실행형 네트워크 보안 그룹을 만들 수 있습니다. 동일한 용도를 지원하는 여러 VM이 있는 경우 관련 NSG를 만드는 시점에 이를 각 VM에 할당할 수 있습니다. 해당 기법을 사용하면 중앙의 단일 규칙 세트로 여러 VM에 대한 네트워크 액세스를 제어할 수 있습니다.

정리

이 모듈을 마치면 샌드박스가 자동으로 리소스를 정리합니다.

본인 소유의 구독으로 이 모듈을 진행하고 있는 경우에는 프로젝트가 끝날 때 여기에서 만든 리소스가 계속 필요한지 확인하는 것이 좋습니다. 계속 실행중인 리소스에는 비용이 부과될 수 있습니다. 리소스를 개별적으로 삭제하거나 리소스 그룹을 삭제하여 전체 리소스 세트를 삭제할 수 있습니다.