어제까지 되던 외부 API 호출이 IP 차단으로 죽는다 — 허용 목록에 PaaS 공유 대역을 넣었다
배포 · 인프라
증상
상대 API가 호출 IP 화이트리스트를 건다. 우리 쪽 발신 IP를 등록하고 며칠은 잘 되다가 어느 날 다시 막힌다. 코드는 그대로라 "어제까지 되던 게 오늘 안 됨"으로 보이고 원인 추적이 오래 걸린다.
원인
등록한 주소가 PaaS의 아웃바운드 IP였다. 공유 대역이라 제공자 사정으로 값이 바뀌고, 바뀌는 날 허용 목록이 틀린 답이 된다. 관리 화면이 그 IP를 하드코딩으로 안내하고 있어서 운영자도 그 값을 믿고 등록했다.
해법
- IP 게이트가 걸린 상대는 고정 IP 릴레이 하나만 경유시키고, 허용 목록에는 그 IP 하나만 등록한다.
- 릴레이 경유 경로와 직발 경로를 구분한다. 직발하는 상대에 릴레이 IP를 적으면 틀린 답이다 — 그쪽은 PaaS 아웃바운드 전부를 등록하거나 다른 방식이어야 한다. 그리고 상대에 따라 IP보다 API 이용 승인이 먼저인 곳이 있다. 승인 전이면 키가 있어도 거절된다.
- 화면에 보여주는 발신 IP는 하드코딩하지 않고 설정에서 파생한다(설정값 → 릴레이 URL의 호스트 → DNS 순). 모르면 빈값을 돌려 화면이 "확인하지 못했다"고 말하게 한다.
- "이 상대는 릴레이를 타는가" 판정기는 한 곳에만 둔다. 화면에서 다시 판정하면 두 판정기는 반드시 갈라진다.
검증
릴레이 경유 상대는 릴레이를 통해, 직발 상대는 PaaS에서 직접 실호출 1회로 허용 여부를 본다. 설정을 바꿨을 때 화면의 IP 표시값이 따라 바뀌는지 확인한다.
★ "오늘 되는 IP"를 안내하면 안 된다. 내일도 같은 IP인 것만 안내한다.