연습 - 네트워크 보안 그룹 만들기 및 관리
제조 회사에 대한 솔루션 설계자는 이제 ERP 앱 및 데이터베이스 서버를 Azure로 이동하려고 합니다. 첫 번째 단계로, 두 개의 서버를 사용하여 네트워크 보안 계획을 테스트합니다.
이 단원에서는 네트워크 트래픽을 특정 서버로 제한하기 위해 네트워크 보안 그룹과 보안 규칙을 구성합니다. 앱 서버의 경우 HTTP를 통해 데이터베이스 서버에 연결할 수 있게 하고, 데이터베이스 서버의 경우 HTTP를 사용하여 앱 서버에 연결할 수 없게 하려고 합니다.
비고
이 연습은 선택 사항입니다. 이 연습을 완료하려면 시작하기 전에 Azure 구독을 만들어야 합니다. Azure 계정이 없거나 현재 계정을 만들지 않으려는 경우 제공되는 정보를 이해할 수 있도록 지침을 읽을 수 있습니다.
비고
리소스 그룹을 사용하여 이 연습의 단계를 완료해야 합니다. 이미 만든 리소스 그룹을 사용하거나 이 연습을 위해 특별히 새 리소스 그룹을 만들 수 있습니다. 새 리소스 그룹을 만들도록 선택하면 연습을 완료할 때 만든 리소스를 더 쉽게 정리할 수 있습니다. 기존 리소스 그룹이 없거나 이 연습을 위해 특별히 새 리소스 그룹을 만들려는 경우 Azure Portal 및 Azure Resource Manager를 사용하여 리소스 그룹을 관리하여 Azure Portal을 사용하여 리소스 그룹을 만들 거나 Azure CLI를 사용하여 Azure CLI를 사용하여 Azure 리소스 그룹 관리 의 단계를 수행하여 Azure CLI를 사용하여 리소스 그룹을 만들 수 있습니다.
비고
이 단원에서는 Azure Cloud Shell을 터미널로 사용합니다. Azure Portal 또는 Cloud Shell 로그인을 통해 Cloud Shell에 액세스할 수 있습니다. PC 또는 노트북에 아무것도 설치하지 않아도 사용할 수 있습니다.
가상 네트워크 및 네트워크 보안 그룹 만들기
먼저 서버 리소스에 대한 가상 네트워크 및 서브넷을 만듭니다. 그런 다음, 네트워크 보안 그룹을 만듭니다.
Azure Cloud Shell을 열고 다음 명령을 실행하여 리소스 그룹의 이름을 변수
rg에 할당합니다. myResourceGroupName을 리소스 그룹의 이름으로 바꿉니다.rg="myResourceGroupName"ERP 서버 가상 네트워크 및 애플리케이션 서브넷을 만들려면 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 DatabasesERP-SERVERS-NSG 네트워크 보안 그룹을 만들려면 Cloud Shell에서 다음 명령을 실행합니다.
az network nsg create \ --resource-group $rg \ --name ERP-SERVERS-NSG
Ubuntu를 실행하는 VM 만들기
다음으로 AppServer 및 DataServer 라는 두 개의 VM을 만듭니 다. AppServer를 애플리케이션 서브넷에 배포하고 DataServer를 데이터베이스 서브넷에 배포합니다. ERP-SERVERS-NSG 네트워크 보안 그룹에 VM 네트워크 인터페이스를 추가합니다. 그런 다음 네트워크 보안 그룹을 테스트하려면 이러한 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 tableVM이 만들어지면 다음 출력이 표시됩니다.
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=5Connection timed out메시지가 표시됩니다.DataServer VM에 연결할 수 있는지 확인하려면 Cloud Shell에서 다음 명령을 실행합니다.
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5동일한 연결 실패 메시지가 표시됩니다.
동일한 가상 네트워크에서 오는 트래픽이 아닌 한 기본 규칙은 가상 네트워크로 들어오는 모든 인바운드 트래픽을 거부합니다. 모든 인바운드 거부 규칙은 방금 시도한 인바운드 SSH 연결을 차단했습니다.
인바운드
| 이름 | 우선 순위 | 원본 IP | 대상 IP | 액세스 |
|---|---|---|---|---|
| VNet 인바운드 허용 | 65000 | 가상 네트워크 | 가상 네트워크 | 허용 |
| 모든 인바운드 거부 | 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 |
| 데이터서버 | 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-ASGDataServer를 앱 보안 그룹과 연결하려면 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 DatabasesERP-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에 새 서버를 추가하여 적절한 네트워크 보안을 쉽게 보장할 수 있습니다.