
우아한형제들 보안팀이 분산 아키텍처의 레이스 컨디션과 API 스로틀링을 정교한 엔지니어링으로 진화시킨 여정
본 아티클은 수십 개 AWS 계정에 분산된 NACL 공격 IP 차단을 자동화하는 도구(WOOWA-SOC-ACL-IR)의 고도화 경험을 생생하게 다룹니다. 코드 실행 단계의 묵인된 에러, 일시적 일관성 지연, 중복 실행 간섭 등 분산 컴퓨팅 환경에서 마주할 수 있는 예측 불가능한 함정들을 짚어냅니다. 단순 '모두 보호하거나 다 같이 중단하자'라는 이상적 균등 원칙 대신, 실질적으로 작동하며 스스로 복구하는 '시간을 두고 수렴하는 균등 보호'라는 철학적 성취를 제시합니다.
멀티 계정 환경에서 AWS NACL이나 보안 그룹 등 네트워크 인프라 자원을 다수의 람다 및 외부 트리거를 통해 대규모로 자동 제어하려는 데브옵스 및 보안 엔지니어에게 적극 추천합니다. 복잡한 분산 결함을 안전하게 방어하는 예외 처리 아키텍처 수립에 매우 훌륭한 나침반이 되어줄 것입니다.
수십 개의 AWS 계정을 운영하는 환경에서 공격 IP를 신속하게 차단하기란 쉽지 않으며, 수동 처리는 누락과 지연을 유발했습니다. 이를 해결하고자 자동화 도구를 구축했으나 운영 과정에서 AWS API 실패, 상태 일관성 지연, 레이스 컨디션 등으로 인해 실제 NACL의 룰과 메타데이터 저장소(DynamoDB) 간의 정합성이 어긋나는 문제가 발생했습니다.
NACL 적용 후 즉시 실제 생성 여부를 재확인하는 readback 검증 알고리즘을 도입하고 실패 시 DDB 기록을 방지했습니다. 레이스 컨디션을 제어하기 위해 Lambda 예약 동시성을 1로 제한하였으며, 1차 처리 중 누락된 계정들에 대해서만 5초 대기 후 1회 한정 즉시 재시도하는 자율 복구 흐름을 설계했습니다.
불가피한 API 오류나 스로틀링 현상을 botocore의 adaptive 재시도를 통해 완벽히 자동 흡수하게 되었고, SQS 메시지 처리 속도가 72초에서 7초 수준으로 단축되었습니다. 부분 실패가 감추어지는 현상을 방지하여 완벽하게 가시화했으며 실제 차단 상태와 관리 데이터의 일치율을 정밀하게 끌어올렸습니다.
Trade-off
람다 동시 실행 수를 1로 강제 차단하여 데이터 정합성 문제를 원천 해결했으나, 분당 처리 요구량이 매우 폭발적으로 증가하는 극단적인 시나리오에서는 SQS 큐의 적체로 인해 물리적 차단 시각이 약간 지연될 수 있는 구조적 한계가 존재합니다.
VPC 내의 서브넷 경계에서 인/아웃바운드 트래픽을 제어하는 상태 없는(Stateless) 방화벽 서비스입니다. 규칙 번호가 낮은 순서부터 엄격하게 평가되므로 순서와 한정된 규칙 개수를 최적화하여 설계하는 것이 무척 중요합니다.
특정 AWS Lambda 함수가 생성하고 동시에 유지할 수 있는 활성 인스턴스 개수의 한도를 명시적으로 예약 및 제안하는 메커니즘입니다. 다른 리소스의 호출 폭주 현상을 제어하거나 동시 제어로 발생하는 충돌을 방지하는 목적으로 사용합니다.
분산 데이터베이스 혹은 멀티 클라우드 리소스 시스템 전반에서 데이터 쓰기 작업이 일어날 때, 즉시 완전히 일치하는 것을 보장할 수 없으나 시간이 일정 정도 흐르면 모든 노드의 일관성이 보장된다는 설계 사상입니다.




