연습 - 네트워크 액세스 구성
이 연습에서는 이 모듈의 앞부분에서 만든 VM(가상 머신)에 대한 액세스를 구성합니다.
Important
Microsoft Learn 샌드박스가 계속 실행 중이어야 합니다. 샌드박스 시간이 초과된 경우 이전 연습을 다시 실행해야 합니다(연습 - Azure 가상 머신 만들기).
이전에 만든 VM이 여전히 실행 중인지 확인하려면 다음 명령을 사용합니다.
az vm list
빈 응답 []
을(를) 받으면 이 모듈의 첫 번째 연습을 다시 완료해야 합니다. 결과에 현재 VM 및 해당 설정이 열거되면 계속해도 됩니다.
지금 당장은 만들고 Nginx를 설치했던 VM에 인터넷에서 액세스할 수 없습니다. 포트 80에서 인바운드 HTTP 액세스를 허용하여 이를 변경하는 네트워크 보안 그룹을 만들 것입니다.
작업 1: 웹 서버 액세스
이 절차에서는 VM의 IP 주소를 가져오고 웹 서버의 홈페이지에 액세스를 시도합니다.
다음
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)"
다음
curl
명령을 실행하여 홈페이지를 다운로드합니다.curl --connect-timeout 5 http://$IPADDRESS
--connect-timeout
인수는 연결될 때까지 최대 5초를 허용하도록 지정합니다. 5초가 지나면 연결 시간이 초과되었음을 나타내는 오류 메시지가 표시됩니다.curl: (28) Connection timed out after 5001 milliseconds
해당 메시지는 시간 제한 내에 VM에 액세스할 수 없었음을 의미합니다.
선택적 단계로 브라우저에서 웹 서버에 액세스를 시도합니다.
다음을 실행하여 VM의 IP 주소를 콘솔로 출력합니다.
echo $IPADDRESS
IP 주소(예: 23.102.42.235)가 표시됩니다.
표시된 IP 주소를 클립보드에 복사합니다.
새 브라우저 탭을 열고 웹 서버로 이동합니다. 잠시 후 연결되지 않음을 확인할 수 있습니다. 브라우저가 시간 초과될 때까지 기다리는 경우 다음과 같은 내용이 표시됩니다.
나중에 사용할 수 있도록 이 브라우저 탭을 열어 둡니다.
작업 2: 현재 네트워크 보안 그룹 규칙 나열
웹 서버에 액세스하지 못했습니다. 이유를 확인하기 위해 현재 NSG 규칙을 살펴보겠습니다.
다음
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를 만들었습니다.
다음
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 형식으로 된 많은 양의 텍스트가 표시됩니다. 다음 단계에서는 해당 출력을 보다 쉽게 읽을 수 있도록 비슷한 명령을 실행합니다.
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)에서의 인바운드 액세스를 허용하는 네트워크 보안 규칙을 만듭니다.
다음
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으로 설정합니다. 해당 사례에서 우선 순위는 중요하지 않습니다. 포트 범위가 겹치는 경우에는 우선 순위를 고려해야 합니다.
구성을 검증하려면
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를 업데이트한 후 업데이트된 규칙이 전파되기까지 몇 분 정도 걸릴 수 있습니다. 원하는 결과를 얻을 때까지 다음 단계를 다시 시도하되, 시도하는 사이에 잠시 멈춥니다.
이전에 실행한 것과 동일한
curl
명령을 실행합니다.curl --connect-timeout 5 http://$IPADDRESS
다음과 같은 응답이 표시됩니다.
<html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>
선택적 단계로 웹 서버를 가리키는 브라우저 탭을 새로 고칩니다. 다음과 같은 홈페이지가 표시됩니다.
수고 많으셨습니다. 실제로 필요한 인바운드 및 아웃바운드 네트워크 액세스 규칙을 포함하는 독립 실행형 네트워크 보안 그룹을 만들 수 있습니다. 동일한 용도를 지원하는 여러 VM이 있는 경우 관련 NSG를 만드는 시점에 이를 각 VM에 할당할 수 있습니다. 해당 기법을 사용하면 중앙의 단일 규칙 세트로 여러 VM에 대한 네트워크 액세스를 제어할 수 있습니다.
정리
이 모듈을 마치면 샌드박스가 자동으로 리소스를 정리합니다.
본인 소유의 구독으로 이 모듈을 진행하고 있는 경우에는 프로젝트가 끝날 때 여기에서 만든 리소스가 계속 필요한지 확인하는 것이 좋습니다. 계속 실행중인 리소스에는 비용이 부과될 수 있습니다. 리소스를 개별적으로 삭제하거나 리소스 그룹을 삭제하여 전체 리소스 세트를 삭제할 수 있습니다.