Azure 가상 네트워크와 가상 서브넷을 사용하면 VM, 웹앱 및 데이터베이스와 같은 Azure 리소스가 서로 통신할 수 있고 인터넷의 사용자 및 온-프레미스 클라이언트 컴퓨터와 통신할 수 있습니다. Azure 네트워크를 다른 Azure 리소스와 연결되는, 리소스가 있는 온-프레미스 네트워크의 확장이라고 생각할 수 있습니다.
Azure Virtual Network
는 다음과 같은 주요 네트워킹 기능
을 제공합니다.
Azure 가상 네트워킹은 퍼블릭 엔드포인트와 프라이빗 엔드포인트를 모두 지원하여 내외부의 리소스가 다른 내부 리소스와 통신할 수 있게 합니다.
Azure 가상 네트워크를 사용하면 격리된 여러 가상 네트워크를 만들 수 있습니다. 가상 네트워크를 설정하는 경우 공용 또는 개인 IP 주소 범위를 사용하여 개인 IP 주소 공간을 정의합니다. IP 범위는 가상 네트워크 내에만 존재하며 인터넷 라우팅이 불가능합니다. 이러한 IP 주소 공간을 서브넷으로 분할하고, 정의된 주소 공간의 일부를 명명된 각 서브넷에 할당할 수 있습니다.
이름 확인의 경우 Azure에 기본 제공되는 이름 확인 서비스를 사용할 수 있습니다. 내부 또는 외부 DNS 서버를 사용하도록 가상 네트워크를 구성할 수도 있습니다.
공용 IP 주소를 Azure 리소스에 할당하거나 리소스를 공용 부하 분산 장치 뒤에 배치하여 인터넷에서 들어오는 연결이 가능하도록 설정할 수 있습니다
Azure 리소스를 사용하여 서로 안전하게 통신할 수 있도록 설정하려 합니다. 다음 두 가지 방법 중 하나를 수행할 수 있습니다.
가상 네트워크는 VM뿐만 아니라 Power Apps용 App Service Environment, Azure Kubernetes Service 및 Azure 가상 머신 확장 집합과 같은 다른 Azure 리소스도 연결할 수 있습니다.
서비스 엔드포인트를 Azure SQL Databases 및 스토리지 계정과 같은 다른 Azure 리소스 형식에 연결할 수 있습니다. 이 방식을 사용하면 여러 Azure 리소스를 가상 네트워크에 연결하여 보안을 개선하고 리소스 간에 최적의 라우팅을 제공할 수 있습니다.
Azure 가상 네트워크를 사용하면 온-프레미스 환경 및 Azure 구독 내에서 리소스를 함께 연결할 수 있습니다. 실제로 로컬 환경과 클라우드 환경 모두에 걸쳐 있는 네트워크를 만들 수 있습니다. 이 연결을 수행하는 세 가지 메커니즘이 있습니다.
P2S 가상 프라이빗 네트워크 연결은 조직 외부의 컴퓨터에서 기업 네트워크 내부로 연결됩니다.
이 경우에 클라이언트 컴퓨터는 암호화된 VPN 연결을 시작하여 Azure 가상 네트워크에 연결합니다.S2S VPN(가상 사설망)은 온-프레미스 VPN 디바이스 또는 게이트웨이를 가상 네트워크의 Azure VPN 게이트웨이에 연결합니다.
실제로 Azure의 디바이스는 로컬 네트워크에 있는 것으로 표시될 수 있습니다. 연결은 암호화되고 인터넷에서 작동합니다.Azure ExpressRoute는 Azure에 대한 전용 프라이빗 연결을 제공합니다.
이 연결은 인터넷을 통해 이동하지 않습니다. 대역폭을 더 키우고 보안 수준을 더 높여야 하는 환경에는 Azure ExpressRoute를 사용하는 것이 가장 좋습니다.본적으로 Azure에서는 연결된 가상 네트워크의 서브넷, 온-프레미스 네트워크 및 인터넷 간에 트래픽을 라우팅합니다.
다음과 같이 라우팅을 제어하고 해당 설정을 재정의할 수도 있습니다.
Azure 가상 네트워크를 사용하면 다음 방법을 사용하여 서브넷 간 트래픽을 필터링할 수 있습니다.
네트워크 보안 그룹은 Azure 리소스로서 여러 인바운드 및 아웃바운드 보안 규칙을 포함할 수 있습니다.
원본 및 대상 IP 주소, 포트 및 프로토콜과 같은 요인에 따라 트래픽을 허용하거나 차단하도록 이러한 규칙을 정의할 수 있습니다. 네트워크 가상 어플라이언스는 강화된 네트워크 어플라이언스와 비교될 수 있는 특수한 VM입니다.
네트워크 가상 어플라이언스는 방화벽 실행 또는 WAN(광역 네트워크) 최적화 수행과 같은 특정 네트워크 기능을 수행합니다.가상 네트워크 피어링을 사용하여 가상 네트워크를 함께 연결할 수 있습니다. 피어링을 사용하면 두 가상 네트워크끼리 서로 직접 연결할 수 있습니다.
피어링된 네트워크 간의 네트워크 트래픽은 비공개이며 공용 인터넷에 들어가지 않는 Microsoft 백본 네트워크로 이동합니다. 피어링을 사용하면 각 가상 네트워크의 리소스가 서로 통신할 수 있습니다. 이러한 가상 네트워크는 별도 지역에 위치할 수 있으며, Azure를 통해 상호 연결된 글로벌 네트워크를 만들 수 있습니다.
UDR(사용자 정의 경로)을 사용하면 가상 네트워크 내의 서브넷 간 또는 가상 네트워크 간의 라우팅 테이블을 제어할 수 있습니다. 이렇게 하면 네트워크 트래픽 흐름을 보다 강하게 제어할 수 있습니다.
IPADDRESS="$(az vm list-ip-addresses \
--resource-group [sandbox resource group name] \
--name my-vm \
--query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
--output tsv)"
curl --connect-timeout 5 http://$IPADDRESS
--connect-timeout
인수는 연결될 때까지 최대 5초를 허용하도록 지정합니다. 5초가 지나면 연결 시간이 초과되었음을 나타내는 오류 메시지가 표시됩니다.
오류 메세지
curl: (28) Connection timed out after 5001 milliseconds
웹 서버에 액세스하지 못했습니다. 이유를 확인하기 위해 현재 NSG 규칙을 살펴보겠습니다.
az network nsg list \
--resource-group learn-ec12ec44-c95a-41f6-a739-b70c5ff727e9 \
--query '[].name' \
--output tsv
출력 결과
my-vmNSG
az network nsg rule list \
--resource-group learn-ec12ec44-c95a-41f6-a739-b70c5ff727e9 \
--nsg-name my-vmNSG
출력에 JSON 형식으로 된 많은 양의 텍스트가 표시됩니다. 다음 단계에서는 해당 출력을 보다 쉽게 읽을 수 있도록 비슷한 명령을 실행합니다.
az network nsg rule list
명령을 한 번 더 실행합니다. 이번에는 --query 인수를 사용하여 각 규칙의 이름, 우선 순위, 영향을 받는 포트 및 액세스(허용 또는 거부)만 검색합니다. --output 인수는 출력을 읽기 쉬운 표 형식으로 만듭니다.az network nsg rule list \
--resource-group learn-ec12ec44-c95a-41f6-a739-b70c5ff727e9 \
--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
기본적으로 Linux VM의 NSG는 포트 22에서의 네트워크 액세스만 허용합니다. 이렇게 하면 관리자가 시스템에 액세스할 수 있습니다. 또한 HTTP를 통한 액세스를 허용하는 포트 80에서 인바운드 연결을 허용해야 합니다.
여기에서는 포트 80(HTTP)에서의 인바운드 액세스를 허용하는 네트워크 보안 규칙을 만듭니다.
az network nsg rule create \
--resource-group learn-ec12ec44-c95a-41f6-a739-b70c5ff727e9 \
--nsg-name my-vmNSG \
--name allow-http \
--protocol tcp \
--priority 100 \
--destination-port-range 80 \
--access Allow
학습 목적으로 우선 순위를 100으로 설정합니다. 해당 사례에서 우선 순위는 중요하지 않습니다. 포트 범위가 겹치는 경우에는 우선 순위를 고려해야 합니다.
az network nsg rule list \
--resource-group learn-ec12ec44-c95a-41f6-a739-b70c5ff727e9 \
--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
allow-http 100 80 Allow
curl --connect-timeout 5 http://$IPADDRESS
출력 내용
<html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>