TOPIC/Cloud

Azure Firewall을 사용하여 Spoke 간 통신하기

H-Y-E-N 2023. 11. 27. 11:29

안녕하세요. 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