멀티 어카운트 NACL 차단 자동화 도구 운영 및 개선 경험
데브옵스
멀티 어카운트 NACL 차단 자동화 도구 운영 및 개선 경험
두줄요약
멀티 AWS 계정 환경에서 NACL 차단 자동화를 운영하며 정합성 불일치와 race condition을 개선한 경험을 다뤘습니다. 반환값 검증, 재시도, 실패 격리로 부분 실패가 숨지 않도록 도구를 다듬었습니다.
문제 상황
- 멀티 AWS 계정 환경에서 공격 IP 차단을 수동으로 처리할 때 누락과 지연이 발생하는 운영 문제
- NACL 규칙과 DynamoDB 기록이 어긋나며 정합성 불일치가 누적되는 상태
- 차단, 해제, 일괄 해제, 점검까지 포함한 자동화 도구 운영 중 숨은 실패와 경쟁 상태가 드러남
원인 분석
- NACL 생성 실패를 반환값으로만 처리하고 예외로 올리지 않아 DDB 기록까지 진행되는 흐름
- 계정 순회 중 한 계정의 불일치를 람다 전체 종료로 처리해 운영 흐름이 불명확해지는 구조
- 일부 실패 값이 누적되지 않아 부분 실패가 성공 메시지로 가려지는 결과
- 대량 삭제 과정에서 재시도와 실패 보고가 없어 잔여 룰이 남는 상황
- SQS 기반 병렬 처리 타이밍으로 인해 다른 요청과 겹치며 sync_check가 중간 상태를 읽는 race condition
해결 방법
- NACL 생성 후 describe_network_acls로 실제 등록 여부를 재조회하는 readback 루프 추가
- 반환값이 False이면 예외를 발생시켜 DDB 기록을 차단하는 가드 적용
- exit() 대신 continue와 return 중심으로 흐름을 바꿔 계정 단위로 실패를 격리
- 실패 카운터와 반환값을 명시적으로 누적해 부분 실패가 슬랙에 드러나도록 수정
- alldelete에 2차 재시도와 잔여 룰 실패 보고를 추가해 정직한 상태 노출
적용해볼 점
- 자동화 결과를 저장소와 외부 시스템 양쪽에서 모두 검증하는 정합성 점검
- 부분 실패를 성공으로 덮지 않도록 반환값과 알림 경로를 분리
- 멀티 계정, 멀티 요청 환경에서는 동시성 제어와 재시도 정책을 함께 설계
