고정된 IP를 통과해 Elastic Beanstalk 접근하기 그 두번째

지금까지의 구성

2018년 12월에 고정된 IP를 통과해 Elastic Beanstalk 접근하기라는 글을 썼는데, 올 초에 조금 더 단순하고 안전한 방식으로 변경이 됐다.

기존 방식이 이런 구성이었는데,

Client -> NLB -> Proxy 서버군 -> Elastic Beanstalk

ISMS 심사를 준비하면서 Proxy 서버군에 취약점 조치 사항을 적용하기가 매우 귀찮았다. 보통 우리 회사의 백엔드 서비스는 Elastic Beanstalk나 EKS로 서비스 되기 때문에, Nginx만 단독으로 올려 쓰는 경우가 없어 이를 위해 취약점 조치가 적용된 별도의 AMI를 새로 만들어야 했기 때문. 그것 자체가 큰 어려움이라기 보다는 심사를 위해 신경써야 하는 카테고리가 늘어나는 게 부담이었다.

게다가 인증서를 ACM을 통해 사용하는 게 아니고 회사에서 직접 구매하고 설치한 거라, 올 해 말이면 인증서를 갱신할 시점이 돌아온다. 내가 인증서 관리 역할을 맡은 건 아니라서 이 또한 매우 귀찮다. 그게 나라면 더 귀찮았겠다.

다른 건 거의 매니지드 서비스를 쓰다보니 이 Nginx 서버군의 모니터링도 쉽지 않다. 일단 내가 익숙하지 않고, 아직까지 별 일 없이 동작했지만 상태 모니터링을 띄엄띄엄 하게 된다. 보통은 실제 서비스가 되는 Elastic Beanstalk 기반의 서버에 모니터링이 집중될 수 밖에.

아마도 더 좋은 방법이 있었겠지만, 당시에 내가 고를 수 있었던 최선이었다.

AWS Global Accelerator

사실 이 구성을 고민한 지 얼마 되지 않은 2018년 말에 AWS Global Accelerator가 발표됐었다. 당시에는 이 기능을 자세히 살펴볼 생각도 못했고, AWS에 계신 분(정확히 어떤 직함인지는 여전히 모르겠다만…)과 이야기 했을 때에도 이런 이야기는 없었다.

AWS Global Accelerator 기능 소개를 보면 뭔가 좋은 얘기가 많지만 딱 눈에 띄는 게 있다.

AWS Global Accelerator는 AWS 리전에서 호스팅되는 애플리케이션의 고정 진입점 역할을 하는 하나 이상의 정적 IP 주소를 제공합니다.

Global Accelerator는 전세계 어디서든 사용자가 가장 가까운 엣지 로케이션에 고정된 IP로 접근한 후, 연결된 NLB나 ALB로 이어주는 서비스다. 비록 우리 서버로 접근하는 클라이언트는 대부분 한국 내에 있겠지만.

요금은 대한민국 -> 대한민국 기준으로 0.043 USD/GB라서, 클라이언트와 짧은 페이로드를 주고 받는 입장에서 기존 서버를 내릴 것도 생각하면 부담스러울 것도 없다.

그래서 현재 버전은 아래와 같이 매우 단순해졌다. EB에는 ALB(Application Load Balancer)를 붙였다.

AWS Global Accelerator -> Elastic Beanstalk(+ ALB)

클라이언트에게는 Global Accelerator의 존재가 보이긴 한다.

nslookup 기존도메인

Non-authoritative answer:
Name: 기존도메인
Address: ***.***.***.***
Name: 기존도메인
Address: ***.***.***.***

nslookup 신규도메인

Non-authoritative answer:
신규도메인 canonical name = *****************.awsglobalaccelerator.com.
Name: *****************.awsglobalaccelerator.com
Address: ***.***.***.***
Name: *****************.awsglobalaccelerator.com
Address: ***.***.***.***

어쨌든 그 동안 수고한 NLB와 Proxy 서버들아 안녕.