본문으로 바로가기

[GCP] Load balancing with firewall rules

category 프로그래밍 2018. 12. 14. 22:00
728x90
Google Cloud Platform을 사용하는 중에 터득한 지식에 관해서 기록 및 공유하고자 합니다.
이번에 네트워크의 보안을 강화하기 위해서 Compute Engine의 Firewall 규칙을 추가하기로 했습니다.

기존 Firewall 규칙입니다. 
Type
Targets
Filters
Protocols / ports
Action
Priority
Ingress
driver-tag
IP ranges: 0.0.0.0/0
tcp:80,3000
Allow
100

Compute Engine에 Network tags를 입력 가능한데요.
Network tags를 입력해 firewall에서 한번에 규칙을 관리 할 수 있습니다.
Priority는 우선순위 이며 0 ~ 65535 값을 갖습니다.
크기가 작을 수록 우선순위가 높습니다.

예를 들어 
Type
Targets
Filters
Protocols / ports
Action
Priority
Ingress
driver-tag
IP ranges: 0.0.0.0/0
tcp:80
Deny
90
Ingress
driver-tag
IP ranges: 0.0.0.0/0
tcp:80,3000
Allow
100

위와 같이 작성을 하게되면 먼저 다른 조건인 port와 Action을 봐주시면 되는데요.
Priority가 100 : 80 port와 3000 port가 Allow되고 
Priority가 90 : 80 port를 다시 Deny해서
결국, 3000 port만 열리게 됩니다.

우선순위를 역순으로 설명 했는데요. 겹겹이 쌓여서 결국에는 우선순위 높은것이 선적용된다고 생각하시면 편합니다.
하지만 firewall은 Targets과 Filters, Protocols / ports, Action, Priority 모두 하나하나 중요한 옵션이여서 서비스 환경에 치명적인 영향을 줄수 있으니 한번더 생각을 하시고 적용 하시는 것을 권합니다.

GCP는 Load balancing의 사용을 적극 권장하고 있습니다.
저희 또한 Load balancing을 사용하고 있는데요. 
Load balancing을 만들때 Front IP를 할당하게 되는데요.
저는 이 Front IP를 firewall에 등록하여 외부는 모두 차단하고 Load balancing의 IP만 네트워크를 열어서 통신을 하고자 적용 했습니다.

Type
Targets
Filters
Protocols / ports
Action
Priority
Ingress
driver-tag
IP ranges: front ip
tcp:80
Allow
90
Ingress
driver-tag
IP ranges: 0.0.0.0/0
all
Deny
100

이렇게 작성해 적용을 하니 Load balancing의 health-check가 오류가 뜨기 시작했습니다.
front ip는 공개된 ip일뿐 내부적으로 통신을 하는 ip가 아닌것이 의심되었습니다.

오류가 발생해 검색을 해보니
Load balancing을 사용시 
  • 35.191.0.0/16
  • 130.211.0.0/22
위 두개의 ip를 firewall의 Type: ingress에 등록을 해야 했습니다.

Type
Targets
Filters
Protocols / ports
Action
Priority

Ingress

driver-tag
IP ranges: 
35.191.0.0/16, 
130.211.0.0/22

tcp:80

Allow

90
Ingress
driver-tag
IP ranges: 0.0.0.0/0
all
Deny
100


Filter에 해당 ip로 교체를 하니 health-check가 정상으로 돌아왔고 Load balancing을 통한 통신만 허용되고 나머지의 통신은 막히게 되었습니다. 


728x90