연습 - 네트워크 보안 그룹 만들기 및 관리
제조 회사에 대한 솔루션 설계자는 이제 ERP 앱 및 데이터베이스 서버를 Azure로 이동하려고 합니다. 첫 번째 단계로, 두 개의 서버를 사용하여 네트워크 보안 계획을 테스트합니다.
이 단원에서는 네트워크 트래픽을 특정 서버로 제한하기 위해 네트워크 보안 그룹과 보안 규칙을 구성합니다. 앱 서버의 경우 HTTP를 통해 데이터베이스 서버에 연결할 수 있게 하고, 데이터베이스 서버의 경우 HTTP를 사용하여 앱 서버에 연결할 수 없게 하려고 합니다.
가상 네트워크 및 네트워크 보안 그룹 만들기
먼저 서버 리소스에 대한 가상 네트워크 및 서브넷을 만듭니다. 그런 다음, 네트워크 보안 그룹을 만듭니다.
Azure Cloud Shell에서 다음 명령을 실행하여 샌드박스 리소스 그룹을 변수
rg
에 할당합니다.rg="<rgn>[sandbox resource group name]</rgn>"
ERP-servers 가상 네트워크 및 Applications 서브넷을 만들려면 Cloud Shell에서 다음 명령을 실행합니다.
az network vnet create \ --resource-group $rg \ --name ERP-servers \ --address-prefixes 10.0.0.0/16 \ --subnet-name Applications \ --subnet-prefixes 10.0.0.0/24
데이터베이스 서브넷을 만들려면 Cloud Shell에서 다음 명령을 실행합니다.
az network vnet subnet create \ --resource-group $rg \ --vnet-name ERP-servers \ --address-prefixes 10.0.1.0/24 \ --name Databases
ERP-SERVERS-NSG 네트워크 보안 그룹을 만들려면 Cloud Shell에서 다음 명령을 실행합니다.
az network nsg create \ --resource-group $rg \ --name ERP-SERVERS-NSG
Ubuntu를 실행하는 VM 만들기
이번에는 AppServer와 DataServer라는 두 개의 VM을 만듭니다. AppServer는 Applications 서브넷에 배포하고, DataServer는 Databases 서브넷에 배포합니다. VM 네트워크 인터페이스를 ERP-SERVERS-NSG 네트워크 보안 그룹에 추가합니다. 그런 다음 네트워크 보안 그룹을 테스트하려면 이러한 VM을 사용합니다.
AppServer VM을 빌드하려면 Cloud Shell에서 다음 명령을 실행합니다. 관리자 계정의 경우
<password>
을 복잡한 비밀번호로 바꿉니다.wget -N https://raw.githubusercontent.com/MicrosoftDocs/mslearn-secure-and-isolate-with-nsg-and-service-endpoints/master/cloud-init.yml && \ az vm create \ --resource-group $rg \ --name AppServer \ --vnet-name ERP-servers \ --subnet Applications \ --nsg ERP-SERVERS-NSG \ --image Ubuntu2204 \ --size Standard_DS1_v2 \ --generate-ssh-keys \ --admin-username azureuser \ --custom-data cloud-init.yml \ --no-wait \ --admin-password <password>
DataServer VM을 빌드하려면 Cloud Shell에서 다음 명령을 실행합니다. 관리자 계정의 경우
<password>
을 복잡한 비밀번호로 바꿉니다.az vm create \ --resource-group $rg \ --name DataServer \ --vnet-name ERP-servers \ --subnet Databases \ --nsg ERP-SERVERS-NSG \ --size Standard_DS1_v2 \ --image Ubuntu2204 \ --generate-ssh-keys \ --admin-username azureuser \ --custom-data cloud-init.yml \ --no-wait \ --admin-password <password>
VM이 실행 상태가 될 때까지 몇 분 정도 걸릴 수 있습니다. VM이 실행되고 있는지 확인하려면 Cloud Shell에서 다음 명령을 실행합니다.
az vm list \ --resource-group $rg \ --show-details \ --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \ --output table
VM이 만들어지면 다음 출력이 표시됩니다.
Name Provisioned Power ---------- ------------- ---------- AppServer Succeeded VM running DataServer Succeeded VM running
기본 연결 확인
이제 각 VM에 대한 SSH(Secure Shell) 세션을 열어 보겠습니다. 지금까지는 기본 규칙을 사용하여 네트워크 보안 그룹을 배포했습니다.
VM에 연결하려면 Cloud Shell에서 직접 SSH를 사용합니다. 이렇게 하려면 VM에 할당된 공용 IP 주소가 필요합니다. VM에 연결하는 데 사용할 IP 주소를 나열하려면 Cloud Shell에서 다음 명령을 실행합니다.
az vm list \ --resource-group $rg \ --show-details \ --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \ --output table
이 연습의 나머지 단계에서 VM에 더 쉽게 연결할 수 있도록 공용 IP 주소를 변수에 할당합니다. AppServer 및 DataServer의 공용 IP 주소를 변수에 저장하려면 Cloud Shell에서 다음 명령을 실행합니다.
APPSERVERIP="$(az vm list-ip-addresses \ --resource-group $rg \ --name AppServer \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" DATASERVERIP="$(az vm list-ip-addresses \ --resource-group $rg \ --name DataServer \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)"
AppServer VM에 연결할 수 있는지 확인하려면 Cloud Shell에서 다음 명령을 실행합니다.
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
Connection timed out
메시지가 표시됩니다.DataServer VM에 연결할 수 있는지 확인하려면 Cloud Shell에서 다음 명령을 실행합니다.
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
동일한 연결 실패 메시지가 표시됩니다.
동일한 가상 네트워크에서 오는 트래픽이 아닌 한 기본 규칙은 가상 네트워크로 들어오는 모든 인바운드 트래픽을 거부합니다. 모든 인바운드 거부 규칙에서 방금 시도한 인바운드 SSH 연결을 차단했습니다.
인바운드
이름 | 우선 순위 | 원본 IP | 대상 IP | 액세스 |
---|---|---|---|---|
VNet 인바운드 허용 | 65000 | VIRTUAL_NETWORK | VIRTUAL_NETWORK | 허용 |
모든 인바운드 거부 | 65500 | * | * | 거부 |
SSH 보안 규칙 만들기
지금까지 살펴본 대로 ERP-SERVERS-NSG 네트워크 보안 그룹의 기본 규칙에는 모든 인바운드 거부 규칙이 포함되어 있습니다. 이제 SSH를 사용하여 AppServer 및 DataServer에 연결할 수 있도록 규칙을 추가합니다.
SSH 액세스를 사용하도록 설정하는 새 인바운드 보안 규칙을 만들려면 Cloud Shell에서 다음 명령을 실행합니다.
az network nsg rule create \ --resource-group $rg \ --nsg-name ERP-SERVERS-NSG \ --name AllowSSHRule \ --direction Inbound \ --priority 100 \ --source-address-prefixes '*' \ --source-port-ranges '*' \ --destination-address-prefixes '*' \ --destination-port-ranges 22 \ --access Allow \ --protocol Tcp \ --description "Allow inbound SSH"
이제 AppServer VM에 연결할 수 있는지 확인하려면 Cloud Shell에서 다음 명령을 실행합니다.
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
네트워크 보안 그룹 규칙이 적용되는 데 1~2분 정도 걸릴 수 있습니다. 연결 실패 메시지가 표시되면 잠시 기다렸다가 다시 시도하세요.
이제 연결할 수 있습니다.
Are you sure you want to continue connecting (yes/no)?
메시지가 표시되면yes
를 입력합니다.VM을 만들 때 정의한 암호를 입력합니다.
AppServer 세션을 닫으려면
exit
를 입력합니다.이제 DataServer VM에 연결할 수 있는지 확인하려면 Cloud Shell에서 다음 명령을 실행합니다.
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
이제 연결할 수 있습니다.
Are you sure you want to continue connecting (yes/no)?
메시지가 표시되면yes
를 입력합니다.VM을 만들 때 정의한 암호를 입력합니다.
DataServer 세션을 닫으려면
exit
를 입력합니다.
웹 액세스를 방지하는 보안 규칙 만들기
이제 AppServer는 HTTP를 통해 DataServer와 통신할 수 있지만 DataServer는 HTTP를 통해 AppServer와 통신할 수 없도록 규칙을 추가합니다. 이 서버에 대한 내부 IP 주소는 다음과 같습니다.
서버 이름 | IP 주소 |
---|---|
AppServer | 10.0.0.4 |
DataServer | 10.0.1.4 |
80 포트를 통한 HTTP 액세스를 거부하는 새 인바운드 보안 규칙을 만들려면 Cloud Shell에서 다음 명령을 실행합니다.
az network nsg rule create \ --resource-group $rg \ --nsg-name ERP-SERVERS-NSG \ --name httpRule \ --direction Inbound \ --priority 150 \ --source-address-prefixes 10.0.1.4 \ --source-port-ranges '*' \ --destination-address-prefixes 10.0.0.4 \ --destination-port-ranges 80 \ --access Deny \ --protocol Tcp \ --description "Deny from DataServer to AppServer on port 80"
가상 머신 간 HTTP 연결 테스트
여기서는 새 규칙이 작동하는지 확인해 보겠습니다. AppServer는 HTTP를 통해 DataServer와 통신할 수 있어야 합니다. DataServer는 HTTP를 통해 AppServer와 통신할 수 없어야 합니다.
AppServer VM에 연결하려면 Cloud Shell에서 다음 명령을 실행합니다. AppServer가 HTTP를 통해 DataServer와 통신할 수 있는지 확인합니다.
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
VM을 만들 때 정의한 암호를 입력합니다.
응답에
200 OK
메시지가 포함되어 있습니다.DataServer VM에 연결하려면 Cloud Shell에서 다음 명령을 실행합니다. DataServer가 HTTP를 통해 AppServer와 통신할 수 있는지 확인합니다.
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
VM을 만들 때 정의한 암호를 입력합니다.
80 포트를 통한 액세스를 차단했으므로 이 작업은 실패합니다. 몇 분 후에
Connection timed out
메시지가 표시됩니다. 시간 제한 전에 명령을 중지하려면 Ctrl+C를 선택합니다.
앱 보안 그룹 배포
다음으로, 데이터베이스 서버에 대한 앱 보안 그룹을 만들어 이 그룹의 모든 서버에 동일한 설정을 할당할 수 있습니다. 더 많은 데이터베이스 서버를 배포하고, 이 서버에서 HTTP를 통해 앱 서버에 액세스하지 못하도록 차단하려고 합니다. 원본을 앱 보안 그룹에 할당하면 네트워크 보안 그룹의 IP 주소 목록을 수동으로 유지 관리할 필요가 없습니다. 대신 관리하려는 VM의 네트워크 인터페이스를 앱 보안 그룹에 할당합니다.
ERP-DB-SERVERS-ASG라는 새 앱 보안 그룹을 만들려면 Cloud Shell에서 다음 명령을 실행합니다.
az network asg create \ --resource-group $rg \ --name ERP-DB-SERVERS-ASG
DataServer를 앱 보안 그룹에 연결하려면 Cloud Shell에서 다음 명령을 실행합니다.
az network nic ip-config update \ --resource-group $rg \ --application-security-groups ERP-DB-SERVERS-ASG \ --name ipconfigDataServer \ --nic-name DataServerVMNic \ --vnet-name ERP-servers \ --subnet Databases
ERP-SERVERS-NSG 네트워크 보안 그룹에서 HTTP 규칙을 업데이트하려면 Cloud Shell에서 다음 명령을 실행합니다. 이 네트워크 보안 그룹은 ERP-DB-Servers 앱 보안 그룹을 참조해야 합니다.
az network nsg rule update \ --resource-group $rg \ --nsg-name ERP-SERVERS-NSG \ --name httpRule \ --direction Inbound \ --priority 150 \ --source-address-prefixes "" \ --source-port-ranges '*' \ --source-asgs ERP-DB-SERVERS-ASG \ --destination-address-prefixes 10.0.0.4 \ --destination-port-ranges 80 \ --access Deny \ --protocol Tcp \ --description "Deny from DataServer to AppServer on port 80 using application security group"
업데이트된 HTTP 보안 규칙 테스트
AppServer VM에 연결하려면 Cloud Shell에서 다음 명령을 실행합니다. AppServer가 HTTP를 통해 DataServer와 통신할 수 있는지 확인합니다.
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
VM을 만들 때 정의한 암호를 입력합니다.
이전과 마찬가지로 응답에
200 OK
메시지가 포함되어 있습니다. 앱 보안 그룹 설정이 적용되는 데 1~2분 정도 걸릴 수 있습니다. 처음에200 OK
메시지가 표시되지 않으면 잠시 기다렸다가 다시 시도하세요.DataServer에 연결하려면 Cloud Shell에서 다음 명령을 실행합니다. DataServer가 HTTP를 통해 AppServer와 통신할 수 있는지 확인합니다.
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
VM을 만들 때 정의한 암호를 입력합니다.
이전과 마찬가지로 80 포트를 통한 액세스를 차단했으므로 이 작업은 실패합니다. 몇 분 후에
Connection timed out
메시지가 표시됩니다. 시간 제한 전에 명령을 중지하려면 Ctrl+C를 선택합니다.
이제 원본 IP 주소를 사용할 때와 동일한 방식으로 앱 보안 그룹을 사용하여 네트워크 보안 그룹 규칙이 작동하는지 확인했습니다. 추가 데이터 서버를 추가하는 경우 ERP-DB-SERVERS-ASG에 새 서버를 추가하여 적절한 네트워크 보안을 보장할 수 있습니다.