안녕하세요. HYEN입니다.
이번에는 Azure Firewall을 사용하여 Spoke 간 VNet Peering 없이 통신하는 방법에 대해 정리해 보겠습니다. 🫡
Contents
1. 테스트 아키텍처
Spoke 1 대역의 VM에서 Azure Firewall을 거쳐 Spoke 2 대역의 MySQL Flexible Server에 접근할 수 있도록 Azure 환경을 구성하는 것이 이번 주제의 목표입니다.
2. Hub 대역 구성
2.1 리소스 그룹 생성
- [기본] 탭
리소스 그룹 : rg-hub-test # 원하는 리소스 그룹 이름 입력
영역 : (Asia Pachific) Korea Central
- [태그] 탭
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Hub 대역 [리소스 그룹]을 생성합니다.
2.2 가상 네트워크 생성
- [기본 사항] 탭
리소스 그룹 : rg-hub-test
가상 네트워크 이름 : vnet-hub-test # hub용 가상 네트워크 이름 입력
영역 : (Asia Pachific) Korea Central
- [IP 주소] 탭
주소 공간 : 10.10.0.0/24 # 가상 네트워크 대역 입력
서브넷 : AzureFirewallSubnet, snet-vm 추가 # [+ 서브넷 추가] 버튼을 클릭하여 주소 범위와 크기 입력
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Hub 대역의 [가상 네트워크]를 생성합니다.
2.3 Azure Firewall 배포
1. [가상 머신]과 Azure Database for MySQL - Flexible Server이 3306 포트를 통해 통신할 수 있도록 규칙 추가 필요
2. 방화벽 규칙은 Firewall Manager을 통해 관리됨
- [기본 사항] 탭
리소스 그룹 : rg-hub-test
이름 : fw-test
방화벽 SKU : 표준
Firewall policy : fw-policy-test # [Add new] 버튼을 클릭하여 새로운 policy 생성
가상 네트워크 선택 # 기존 항목 사용
가상 네트워크 : vnet-hub-test # AzureFirewallSubnet이 있는 Hub 네트워크 선택
공용 IP 주소 : pip-fw-test # [새로 추가] 버튼을 클릭하여 새로운 공용 IP 생성
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Hub 대역에 [방화벽]을 생성합니다.
2.4 방화벽 규칙 생성
- [방화벽] > [개요]
- [설정] > [네트워크 규칙] > [+ 규칙 컬렉션 추가]
1. [규칙]의 상위 개념인 [규칙 컬렉션]을 먼저 생성하여야 합니다.
([규칙 컬렉션]을 생성하지 않은 상태로 [+ Add rule]을 클릭하여 [규칙]을 생성할 수 없습니다.)
2. 가장 상위 개념인 [규칙 컬렉션 그룹]의 경우, 기본값을 사용하거나 [설정] > [규칙 컬렉션] 탭에서 [+ Add] > [Rule collection group]을 클릭하여 신규로 생성할 수 있습니다.
cf) 기본값은 다음과 같이 3개가 존재합니다.
(DefaultDnatRuleCollectionGroup, DefaultNetworkRuleCollectionGroup, DefaultApplicationRuleCollectionGroup)
3. [규칙 컬렉션 그룹], [규칙 컬렉션]은 모두 우선 순위를 가지며 [규칙]은 상위 개념들의 우선 순위를 따라갑니다.
- [규칙 컬렉션] 및 [규칙]을 추가합니다.
이름 : rule-collection-nw # 규칙 컬렉션 이름 입력
규칙 컬렉션 형식 : 네트워크
우선 순위 : 100 # 같은 [규칙 컬렉션] 내에서의 우선 순위를 의미함
규칙 추가
1. spoke1 대역에서 spoke 2 대역의 MySQL Flexible Server에 접근하기 위한 3306 포트 open
(원본 : Spoke 1 대역, 대상 : Spoke 2 대역)
2. spoke2 대역에서 spoke 1 대역으로 응답 보낼 수 있도록 하기 위한 3306 포트 open
(원본 : Spoke 2 대역, 대상 : Spoke 1 대역)
- [추가]를 클릭하여 [규칙 컬렉션] 및 [규칙]을 생성합니다.
2.5 가상 머신 생성
Spoke 1 대역에 배포될 가상 머신에 접근하거나 Azure Portal에 로그인하여 Private하게 구성된 리소스들을 조회하기 위한 VM을 생성합니다.
- [기본 사항] 탭
리소스 그룹 : rg-hub-test # Hub 대역 리소스 그룹 선택
가상 머신 이름 : vm-bastion-test
이미지 : Windows 11 Pro, version 22H2 - X64 Gen2
크기 : Standard_D4s_v5 - 4 vcpu, 16 GiB 메모리
관리자 계정
- 사용자 이름 : azureuser # 원하는 이름 사용
- 암호
인바운드 포트 선택 : RDP (3389)
라이선싱 : 체크 박스 클릭
- [네트워킹] 탭
가상 네트워크 : vnet-hub-test 선택
서브넷 : snet-vm 선택
공용 IP : pip-vm-bastion # [새로 만들기] 클릭하여 원하는 이름 입력
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Hub 대역의 bastion용 [가상 머신]을 생성합니다.
2.6 Private DNS Zone 생성
Spoke 2 대역에 배포될 Azure Database for MySQL Flexible Server (VNet Integration)를 Private DNS Zone과 통합하기 위하여 Hub 대역에 Private DNS Zone(private.mysql.database.azure.com)을 생성합니다.
- [기본 사항] 탭
리소스 그룹 : rg-hub-test 선택
이름 : private.mysql.database.azure.com
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Hub 대역에 [Private DNS Zone]을 생성합니다.
2.7 가상 네크워크 링크 생성
- [설정] > [가상 네트워크 링크] > [+ 추가]
링크 이름 : vnet-link-hub # 원하는 가상 네트워크 링크 이름 입력
가상 네트워크 : vnet-hub-test # Hub 대역의 가상 네트워크 선택
3. Spoke 1 대역 구성
3.1 리소스 그룹 생성
- [기본] 탭
리소스 그룹 : rg-spoke-test-01 # 원하는 리소스 그룹 이름 입력
영역 : (Asia Pachific) Korea Central
- [태그] 탭
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Spoke 1 대역의 [리소스 그룹]을 생성합니다.
3.2 가상 네트워크 생성
- [기본] 탭
리소스 그룹 : rg-spoke-test-01
가상 네트워크 이름 : vnet-spoke-01 # spoke 1용 가상 네트워크 이름 입력
영역 : (Asia Pachific) Korea Central
- [IP 주소] 탭
주소 공간 : 10.20.0.0/26 # 가상 네트워크 대역 입력
서브넷 : snet-vm 추가 # [+ 서브넷 추가] 버튼을 클릭하여 주소 범위와 크기 입력
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Spoke 1 대역의 [가상 네트워크]를 생성합니다.
3.3 Hub - Spoke 1 간 VNet Peering
- vnet-spoke-01 > [설정] > [피어링] > [+ 추가]
- Hub - Spoke 1 간 VNet Peering을 구성합니다.
- [추가] 버튼을 클릭하여 VNet Peering을 생성합니다.
3.4 경로 테이블 생성
Spoke 1 VNet에서 Hub의 Azure Firewall을 통해 Spoke 2 VNet 내 Azure Database for MySQL - Flexible Server에 접근할 수 있도록 사용자 지정 경로를 생성 및 구성합니다.
- [기본] 탭
리소스 그룹 : rg-spoke-test-01
이름 : rt-spoke-01
게이트웨이 경로 전파 : No # VPN 게이트웨이를 통해 온-프레미스 네트워크에 연결된 가상 네트워크의 서브넷에 경로 테이블을 연결하고 온-프레미스 경로를 서브넷의 네트워크 인터페이스에 전파하지 않으려는 경우 No 옵션 선택
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Spoke 1 대역의 [경로 테이블]을 생성합니다.
3.5 경로 테이블 구성
- 경로 구성
- rt-spoke-01 > [설정] > [경로] > [+ 추가]
경로 이름 : To-Spoke2 # Spoke 2 대역으로 가기 위해 사용자 지정 경로(UDR) 생성
대상 IP 주소/CIDR 범위 : 10.30.0.0/24 # Spoke 2 대역 IP 주소 입력
다음 홉 형식 : 가상 어플라이언스 # 방화벽을 거쳐서 Spoke 2 대역으로 이동
다음 홉 주소 : # Azure Firewall의 Private IP 주소 입력
- [추가] 버튼을 클릭하여 사용자 지정 경로를 생성합니다.
- 서브넷 연결
- rt-spoke-01 > [설정] > [서브넷] > [+ 연결]
가상 네트워크 : vnet-spoke-01 # spoke 1 대역의 VNet 선택
서브넷 : snet-vm # 경로 테이블과 연결할 subnet 선택
3.6 가상 머신 생성
Spoke 2 대역에 배포될 Azure Database for MySQL Flexible Server에 접근하기 위한 client VM을 생성합니다.
- [기본 사항] 탭
리소스 그룹 : rg-spoke-test-01 # Spoke 1 대역 리소스 그룹 선택
가상 머신 이름 : vm-client-test
이미지 : Ubuntu Server 20.04 LTS - x64 Gen2
크기 : Standard_D4s_v5 - 4 vcpu, 16 GiB 메모리
관리자 계정
- 인증 형식 : 암호
- 사용자 이름 : azureuser # 원하는 이름 사용
- 암호
인바운드 포트 선택 : SSH (22)
- [네트워킹] 탭
가상 네트워크 : vnet-spoke-01 선택
서브넷 : snet-vm 선택
공용 IP : 없음 # Hub 대역에 배포한 [가상 머신]을 통해 접속할 것이므로 공용 IP 불필요
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Spoke 1 대역의 [가상 머신]을 생성합니다.
3.7 가상 네크워크 링크 생성
- [설정] > [가상 네트워크 링크] > [+ 추가]
링크 이름 : vnet-link-spoke-01 # 원하는 가상 네트워크 링크 이름 입력
가상 네트워크 : vnet-spoke-01 # Spoke 1 대역의 가상 네트워크 선택
4. Spoke 2 대역 구성
4.1 리소스 그룹 생성
- [기본] 탭
리소스 그룹 : rg-spoke-test-02 # 원하는 리소스 그룹 이름 입력
영역 : (Asia Pachific) Korea Central
- [태그] 탭
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Spoke 2 대역의 [리소스 그룹]을 생성합니다.
4.2 가상 네트워크 생성
- [기본] 탭
리소스 그룹 : rg-spoke-test-02
가상 네트워크 이름 : vnet-spoke-02 # spoke 2용 가상 네트워크 이름 입력
영역 : (Asia Pachific) Korea Central
- [IP 주소] 탭
주소 공간 : 10.30.0.0/24 # 가상 네트워크 대역 입력
서브넷 : snet-mysql-delegated 추가 # [+ 서브넷 추가] 버튼을 클릭하여 주소 범위와 크기 입력
프라이빗 서브넷 사용 : 체크 X # 위임된 서브넷의 경우 DefaultOutboundConnectivity를 false로 설정해서는 안 됨
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Spoke 2 대역의 [가상 네트워크]를 생성합니다.
4.3 Hub - Spoke 2 간 VNet Peering
- vnet-spoke-02 > [설정] > [피어링] > [+ 추가]
- Hub - Spoke 2 간 VNet Peering을 구성합니다.
- [추가] 버튼을 클릭하여 VNet Peering을 생성합니다.
4.4 경로 테이블 생성
Spoke 1 대역의 가상 머신이 Azure Database for MySQL - Flexible Server에 접근할 때와 동일한 루트로 통신할 수 있도록 사용자 지정 경로를 구성합니다.
- [기본] 탭
리소스 그룹 : rg-spoke-test-02
이름 : rt-spoke-02
게이트웨이 경로 전파 : No # VPN 게이트웨이를 통해 온-프레미스 네트워크에 연결된 가상 네트워크의 서브넷에 경로 테이블을 연결하고 온-프레미스 경로를 서브넷의 네트워크 인터페이스에 전파하지 않으려는 경우 No 옵션 선택
- [검토 + 만들기] 탭에서 [만들기]를 클릭하여 Spoke 2 대역의 [경로 테이블]을 생성합니다.
4.5 경로 테이블 구성
- 경로 구성
- rt-spoke-02 > [설정] > [경로] > [+ 추가]
경로 이름 : To-Spoke1 # Spoke 1 대역으로 가기 위해 사용자 지정 경로(UDR) 생성
대상 IP 주소/CIDR 범위 : 10.20.0.0/26 # Spoke 1 대역 IP 주소 입력
다음 홉 형식 : 가상 어플라이언스 # 방화벽을 거쳐서 Spoke 1 대역으로 이동
다음 홉 주소 : # Azure Firewall의 Private IP 주소 입력
- [추가] 버튼을 클릭하여 사용자 지정 경로를 생성합니다.
- 서브넷 연결
- rt-spoke-02 > [설정] > [서브넷] > [+ 연결]
가상 네트워크 : vnet-spoke-02 # spoke 2 대역의 VNet 선택
서브넷 : snet-mysql-delegated # 경로 테이블과 연결할 subnet 선택
4.6 Azure Database for MySQL Flexible Server 생성
VNet Integration?
- 가상 네트워크 인프라를 통해서만 서버에 대해 액세스할 수 있도록 합니다.
- Azure Database for MySQL - Flexible Server 전용으로 위임된 서브넷이 필요합니다.
- 단일 VNet 또는 여러 VNet에 포함될 수 있습니다.
- [기본] 탭
리소스 그룹 : rg-spoke-test-02 # spoke 2 대역의 리소스 그룹 선택
서버 이름 : db-mysql-flexible-test
MySQL 버전 : 8.0 # 기본값 유지
인증 방법 : MySQL 인증만
- 관리자 사용자 이름 : sqladmin # 원하는 사용자 이름 입력
- 암호
- [네트워킹] 탭
네트워크 연결
- 연결 방법 : 프라이빗 액세스(VNet 통합)
가상 네트워크 : vnet-spoke-02 # Azure Database for MySQL Flexible Server가 생성될 VNet 선택
서브넷 : # 위임될 subnet 선택
프라이빗 DNS 통합
- 구독 : # Hub 대역이 있는 구독 선택
- 프라이빗 DNS 영역 : # 기 생성한 프라이빗 DNS 영역 선택
4.7 가상 네크워크 링크 생성
- [설정] > [가상 네트워크 링크] > [+ 추가]
링크 이름 : vnet-link-spoke-02 # 원하는 가상 네트워크 링크 이름 입력
가상 네트워크 : vnet-spoke-02 # Spoke 1 대역의 가상 네트워크 선택
5. 통신 테스트
5.1 Network Watcher를 통한 Next Hop 확인
- [Network Watcher] > [네트워크 진단 도구] > [다음 홉]
리소스 그룹 : rg-spoke-test-01 # Client용 가상 머신이 있는 Spoke 1 대역의 리소스 그룹 선택
가상 머신 : vm-client-test 선택
대상 IP 주소 : 10.30.0.4 # Azure Database for MySQL Flexible Server의 IP 주소 입력
- [다음 홉] 버튼을 클릭하여 조회 시 [다음 홉 형식]은 VirtualAppliance, IP 주소는 방화벽의 Private IP 주소가 출력되는 것을 확인할 수 있습니다.
5.2 Azure Firewall 진단 설정을 통한 방화벽 규칙 적용 확인
- [방화벽] > [모니터링] > [진단 설정] > [+ 진단 설정 추가]
- [진단 설정] 구성
진단 설정 이름 : Diagnostics-Setting-FW # 원하는 진단 설정 이름 입력
범주 : Azure Firewall Network Rule # 현재 방화벽에 Network 규칙만 있으므로 관련된 범주만 선택
대상 세부 정보
- 스토리지 계정에 보관 # 방화벽 규칙에 의해 트래픽이 허용/거부되는지 확인을 위해 스토리지 계정에 로그 적재
스토리지 계정 : # 없는 경우 먼저 생성 필요
- [스토리지 계정] > [데이터 스토리지] > [컨테이너] > [insights-logs-azurefirewall] 컨테이너 클릭
- 조회하고자 하는 로그 파일을 다운로드합니다.
경로 : resourceId=/SUBSCRIPTIONS/{구독 id}/RESOURCEGROUPS/{Resource Group 명}/PROVIDERS/MICROSOFT.NETWORK/AZUREFIREWALLS/{Firewall 명}/년/월/일/시/분/PT1H.json
- 로그 세부 내용 확인
Action : 해당 트래픽의 허용 여부
Policy : 어떤 방화벽 정책을 사용하는지
RuleCollectionGroup : 트래픽을 허용/거부하는 [규칙]이 어떤 [규칙 컬렉션 그룹]에 속해 있는지
RuleCollection : 트래픽을 허용/거부하는 [규칙]이 어떤 [규칙 컬렉션]에 속해 있는지
Rule : 어떤 [규칙]에 의해 트래픽이 허용/거부되는지
※ 방화벽 테스트를 위해 Spoke 2 대역에 [가상 머신]을 추가로 생성하였습니다.
5.3 Spoke 1 대역 VM → Spoke 2 대역 MySQL Server 접근 테스트
- Hub 대역의 Bastion용 [가상 머신]에 접속합니다.
- Spoke 1 대역의 Client용 [가상 머신]에 접속합니다.
- Spoke 2 대역의 MySQL Flexible Server 접근을 위한 MySQL Client를 설치합니다. (명령어 하기 박스 참고)
1. sudo apt-get update
2. sudo apt-get install mysql-client (Y 입력)
3. mysql -V # 입력 시 mysql Ver 8.0.35-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu)) 출력
- Azure Database for MySQL Flexible Server 접근
- [Azure Database for MySQL Flexible Server] > [설정] > [연결] > [브라우저에서 또는 로컬에서 연결] 클릭 후 명령어를 복사합니다.
- Spoke 1 대역의 [가상 머신]에서 해당 명령어를 입력하여 정상 접근을 확인합니다.
이렇게 Azure Firewall을 통해 Spoke 간 VNet Peering 없이 연결하는 방법에 대해서 알아보았습니다. 😊
728x90
320x100
SMALL
'TOPIC > Cloud' 카테고리의 다른 글
1부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성 (1) | 2023.11.29 |
---|---|
Azure Firewall의 SNAT와 DNAT 공부 하기 (1) | 2023.11.28 |
Azure Virtual WAN을 통한 End-to-End 연결하기 (3) Hub-VNet 간 (0) | 2023.11.15 |
Azure Virtual WAN을 통한 End-to-End 연결하기 (2) Point-to-Site VPN (0) | 2023.11.15 |
Azure Virtual WAN을 통한 End-to-End 연결하기 (1) ExpressRoute (0) | 2023.11.15 |