Cloud/AZURE

Azure Network Manager - Part 6

지기(ZIGI) 2022. 3. 28. 12:23
Today Keys : network, manager, management, VNET, connectivity, configuration, deploy, security, group  
 

 이번 포스팅은 Azure에서 가상 네트워크를 전역적으로 그룹화, 구성, 배포 및 관리할 수 있는 관리 서비스인, Azure Virtual Network Manager의 여섯 번째 포스팅입니다.
여섯 번째 포스팅에서는  Network Manager를 통해서, 네트워크 트래픽을 제어 할 수 있는 Security Configuration을 이용하여 Network Group으로 향하는 Inbound 트래픽과 Network Group에서 나오는 Outbund 트래픽을 제어해보는 예시를 다룹니다.    

                    
첫 번째 테스트에서 사용하는 환경의 구성과 설정입니다.
 
 
 
ZIGI-NM-NG-1 Network Group에 속한 ZIGI-VM1의 NSG 입니다.
ICMP가 10.0.0.0/8 에서만 접속되도록 허용합니다.
                    
                    
 
ZIGI-NM-NG-2 Network Group에 속한 ZIGI-VM2의 NSG도 ZIGI-VM1의 NSG와 동일합니다. 
 
                    
 
현재 상태에서 ZIGI-Hub-VNET-Hub-GW VNet에 위치한 ZIGI-Hub-VM에서
ZIGI-VM1과 ZIGI-VM2로 Ping이 정상적으로 통신 되는 것을 볼 수 있으며,
ZIGI-VM1과 ZIGI-VM2 상호 간에도 Ping이 정상적으로 통신 됩니다.                 
     
               
  
Network Manager에서 Sucurity Configuration을 만들고, 적용하여 통신을 어떻게 제어할 수 있는지 살펴보겠습니다.   
Security admin configuration을 만들기 전에,
이해를 돕기 위해서 Security Admin Configuration을 구성을 확인합니다.
하나의 Security admin configuration 안에는 보안 정책(rule)들의 집합인 Rule Collection들이 있습니다.
Rule Collection을 기준으로 Rule들이 적용될 Target Network Group을 설정 할 수 있습니다.
 
 
그럼 이제 Security admin configuration을 만들어 보겠습니다.               
  
                    
Security configuration의 이름을 지어줍니다.
현재 Type은 Security admin rules만 있기 때문에 기본 값으로 설정합니다.
※ Type에는 현재 Security admin rules만 있는 것으로 보이는 데,  Deployment 메뉴에 NSG rules이 있는 것으로 볼 때, 추후에 Security NSG rules Type도 추가 될 것으로 예상됩니다.    
     
               
                    
 Security Configuraion으로 적용 할 Rule Collection을 설정합니다.
    
 
 
Rule Collection 내에서 다시 실제 적용 할 Rule을 설정 할 수 있습니다.
Rule Collection에는 또한 Target network groups을 지정 할 수 있기 때문에
Security admin rule을 적용 할 Target network group이 다른 경우에는 Role Collection을 분리하여 생성해야 합니다.
그럼 이제 Rule Collection에 들어갈 Rule을 추가합니다.  
 
 
                 
먼저 첫 번째 Rule을 추가합니다.
Rule 설정을 위해서는 Rule 이름과 설명(Description)을 입력하고,
Rule의 우선순위(Priority)와 Rule에 Match 됐을 때의 허용할지, 차단할 지에 대한 Action,
트래픽 방향성에 따라서, Inbound로 적용할지, Outbound로 적용 할 지에 대한 Direction,                    
그리고 Protocol과 출발지와 목적지에 대한 정보를 입력합니다.
 
첫 번째 Rule은  Hub VNet의 네트워크 대역(10.0.10.0/24)에서 들어오는(Inbound) ICMP에 대한 허용 정책입니다.
 
                    
                    
두 번째 Rule을 추가합니다.
두 번째 Rule은  Hub VNet의 모든 대역(*, 0.0.0.0/0)에서 들어오는(Inbound) ICMP에 대한 차단 정책입니다.   
                               
         
    
이 2가지 Rule이 ZIGI-NM-NG-1, ZIGI-NM-NG-2 Network Group에 적용되도록 Target network groups를 설정합니다.
2가지 Rule 적용되면, 기존에 10.0.0.0/8 대역을 출발지로 하는 ICMP가 허용되던 것이
10.0.10.0/24 네트워크 대역을 가진 Hub VNet에서만 ICMP가 허용되도록 적용됩니다.             
                    
                    
 
이제 2개의 Rule이 설정된 Rule Collection 설정을 마쳤습니다.            
                    
                    
    
앞서 만든 Security Configuration 설정 값을 확인하고, 이상이 없으면 생성합니다.                    
          
          
    
생성된 Security configuration을 Deploy 합니다.
방금 전에 만든 ZIGI-Security-Config1을 선택하고, 배포될 리전을 선택 한 이후 Deploy를 진행합니다.        
    
                    
 
정상적으로 배포가 완료될 때까지 기다립니다.                    
    
                    
 
이제 Security Configuration이 배포되고 나면, 다시 Ping을 각각 시도해 보겠습니다.
Hub VNet에 위치한 ZIGI-Hub-VM에서는 ZIGI-VM1과 ZIGI-VM2로 Ping이 통신되지만,
ZIGI-VM1과 ZIGI-VM2 상호 간에도 Ping은 되지 않는 것을 볼 수 있습니다.
Security Configuration에서 ZIGI-VM1과 ZIGI-VM2가 속한 VNet의 Network Group에
Hub VNet만 ICMP가 허용되도록 설정했기 때문입니다.
             
       
               
ZIGI-VM1의 NSG(Network Security Group)을 살펴보면,      
기존 Rule 아래에 ZIGI-Network-Manager로 생성된 Rule이 추가로 적용된 것을 볼 수 있습니다.                
    
                    
 
ZIGI-VM2의 NSG(Network Security Group)에서도 마찬가지로
기존 Rule 아래에 ZIGI-Network-Manager로 생성된 Rule이 추가로 적용된 것을 볼 수 있습니다.                             
    
                    
                    
두 번째 테스트에서 사용하는 환경의 구성과 설정입니다.
 
 
 
두 번째 테스트를 위해서
ZIGI-VM1의 NSG에 TCP 80 포트(HTTP)로 들어오는(Inbound) 모든 패킷을 차단(Deny)하는 정책을 추가합니다.
 
                    
 
Security Configuration을 수정하기 전에,
Hub VM과, ZIGI-VM1, ZIGI-VM2에서 각각 ZIGI-VM1로 서비스(TCP 80)를 호출해 봅니다.                    
ZIGI-VM1의 NSG에서 TCP 80에 대해서 모두 차단하였기 때문에
ZIGI-VM1에서만(자기 자신이므로) 정상적으로 서비스가 호출되고,
Hub VM과 ZIGI-VM2에서는 서비스가 호출되지 않는 것을 확인 할 수 있습니다.
 
                    
                    
이제 ZIGI-HTTP라는 Rule Collection을 만들고,
Target Group을 ZIGI-VM1이 속한 ZIGI-NM-NG-1로 설정한 후에 Rule을 추가합니다.
추가되는 Rule은 Hub VNet(10.0.10.0/24)을 출발지로 하여
ZIGI-NM-NG-1로 들어가는(Inbound) TCP 80을  항상(AlwaysAllow)하는 정책입니다.       
    
          
 
ZIGI-HTTP Rule Collection을 ZIGI-Security-Config1에 추가하였으므로,
다시 ZIGI-Security-Config1을 배포합니다.          
    
                    
                    
Security Configuration을 배포하고 나면,
이제 Hub VNet에서도 ZIGI-VM1로 서비스 호출이 정상적으로 가능한 것을 볼 수 있으며,
ZIGI-VM2에서는 여전히 ZIGI-VM1으로 서비스 호출이 불가 한 것을 확인 할 수 있습니다.     
    
                    
                    
이제 ZIGI-VM1의 NSG를 확인해 보겠습니다.
기존 Inbound Rules의 320번을 보면, 80 포트에 대해서는 모든 출발지에 대해서 차단이 되어 있지만,
하단의 Network Manager로 추가된 3번 정책에서 Hub-VNet을 출발지로 한 경우 TCP 80이 허용입니다.
Network Manager로 생성된 정책이 기존 Interface에 선언된 NSG보다 순서상으로 먼저 적용이 되기는 하지만,
NSG에서 차단이기 때문에 TCP 80이 차단되어야 할 것 같지만, 실질적으로 포트가 오픈됩니다.
                    
        
 
이는, 방금 전에 Rule을 생성 할 때, Action을 Always Allow(항상 허용)으로 했기 때문입니다.
Allow 정책의 경우에는 Network Manager의 Allow을 적용받고, 다시 NSG의 정책을 확인하지만,
Always Allow 정책의 경우에는 NSG 정책과 무관하게 무조건 허용이 됩니다.
또한, 만약 Network Manager로 선언한 Rule 내에서 우선 순위가 높은 정책에서 차단을 하더라도
Always Allow 정책이 먼저 적용되어 허용됩니다.
 
            
    
마지막 테스트에서 사용하는 환경의 구성과 설정입니다.
 
 
 
마지막 테스트로, ZIGI-NM-NG-1 Network Group에 Outbound 차단 설정을 테스트 합니다.
방금 전에 생성했던 ZIGI-HTTP Rule Collection에 아래와 같이
Outbound TCP 80포트에 대한 차단 정책을 추가합니다.           
               
     
    
Rule Collection에서 확인해보면, 아래와 같이 Deny가 추가된 것을 볼 수 있습니다.
추가한 Rule을 반영하기 위해서 Security Configuration을 배포합니다.
                    
                    
 
배포가 된 이후에 ZIGI-VM1에서 테스트를 해보면,
Security Configuration 배포 전에는 정상적으로 TCP 80에 대해서 외부로 호출이 가능했으나,
Security Configuration 배포 후에는 외부 호출이 실패하는 것을 볼 수 있습니다.