AWS Network Load Balancer와 헤더 수정 기법
AWS Network Load Balancer(NLB)는 단일 또는 여러 Availability Zone에 걸쳐 Amazon EC2 인스턴스와 같은 여러 대상에 수신 애플리케이션...

AWS Network Load Balancer(NLB)는 단일 또는 여러 Availability Zone에 걸쳐 Amazon EC2 인스턴스와 같은 여러 대상에 수신 애플리케이션 트래픽을 분산하는 강력한 도구다. 높은 처리량과 낮은 레이턴시를 제공하며, 초당 수백만 건의 요청을 처리하면서도 초저 레이턴시를 유지하도록 설계되었다. 그러나 NLB의 한 가지 제한 사항은 HTTP 헤더를 직접 수정할 수 없다는 점이다. 이 글에서는 이 제한을 우회하는 다양한 기법을 탐구하고, 자신의 AWS 환경에서 이러한 솔루션을 구현하는 데 도움이 되는 완전한 예제를 제공한다.
AWS Network Load Balancer 소개
AWS Network Load Balancer는 연결 수준(Layer 4)에서 작동하며, IP 프로토콜 데이터를 기반으로 대상에 연결을 라우팅한다. NLB는 극한의 성능과 낮은 레이턴시가 필요한 애플리케이션에 이상적이며, 게이밍, 금융 거래, 비디오 스트리밍과 같은 실시간 애플리케이션에 적합하다.
NLB의 주요 기능:
- Static IP: 각 NLB는 작동하는 Availability Zone(AZ)당 하나의 고정 IP가 할당된다.
- Elastic IP: 하나 이상의 Elastic IP 주소를 NLB에 연결할 수 있다.
- TLS Termination: NLB는 TLS Termination을 오프로드하여 애플리케이션 서버의 CPU 부하를 최소화할 수 있다.
- Cross-Zone Load Balancing: 활성화된 모든 AZ의 모든 대상에 트래픽을 균등하게 분산한다.
- Target Health Monitoring: 대상의 상태를 자동으로 확인하고 정상 대상에만 트래픽을 라우팅한다.
헤더 수정 필요성
HTTP 헤더 수정은 다음과 같은 다양한 사용 사례에서 종종 필수적이다:
- 보안 헤더 추가(예: Content-Security-Policy).
- 로깅 또는 추적을 위한 커스텀 헤더 주입.
- 백엔드 처리를 위한 User-Agent 헤더 수정.
- 헤더 기반 보안 정책 구현.
NLB의 Layer 4 작동 방식을 고려할 때, 직접적인 헤더 수정은 불가능하다. 그러나 AWS Lambda, Amazon API Gateway, Application Load Balancer(ALB)를 사용하여 이를 달성할 수 있다.
솔루션 1: AWS Lambda와 Amazon API Gateway 사용
1단계: AWS Lambda 함수 생성
먼저 수신 요청의 헤더를 수정할 Lambda 함수를 생성한다.
- AWS Lambda 콘솔로 이동.
- 새 Lambda 함수 생성:
- "Author from scratch" 선택.
- 함수 이름 입력(예:
ModifyHeadersFunction). - 런타임 선택(예: Python 3.8).
- 기본 Lambda 권한으로 실행 역할 생성.
- Lambda 함수 코드 작성:
def lambda_handler(event, context):
# 수신 이벤트 로깅
print("Received event: " + json.dumps(event, indent=2))
# 헤더 수정
event['headers']['X-Custom-Header'] = 'CustomHeaderValue'
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json'
},
'body': json.dumps({
'message': 'Header modified successfully',
'input': event
})
}</code></pre>
- 함수 배포.
2단계: Amazon API Gateway 생성
다음으로 요청을 Lambda 함수로 라우팅할 API Gateway를 생성한다.
- Amazon API Gateway 콘솔로 이동.
- 새 API 생성:
- "HTTP API" 선택.
- 새 API 설정.
- API를 Lambda 함수와 통합:
- 이전에 생성한 Lambda 함수를 선택하여 통합 추가.
- 라우트 및 메서드 구성(예: POST /modify).
- API 배포 및 엔드포인트 URL 기록.
3단계: NLB를 API Gateway로 지정
마지막으로 API Gateway URL을 NLB의 대상으로 설정한다.
- EC2 콘솔로 이동.
- Load Balancers로 이동하여 NLB 선택.
- 대상 그룹 구성하여 API Gateway 엔드포인트 지정.
이 설정은 모든 트래픽을 API Gateway를 통해 라우팅하며, Lambda 함수가 백엔드 서비스로 요청을 전달하기 전에 헤더를 수정한다.
솔루션 2: AWS WAF 사용
AWS WAF는 백엔드 서비스에 도달하기 전에 요청을 검사하고 수정하는 데 사용할 수 있지만, 이 방법은 직접적인 헤더 수정보다는 필터링에 가깝다.
- AWS WAF에서 Web ACL 생성.
- 헤더 검사 및 액션(차단, 허용, 카운트) 규칙 정의.
- Web ACL을 NLB에 연결.
예시 규칙:
IF request.headers['User-Agent'] matches 'bad-bot'
THEN block request
이 설정은 악의적인 요청을 필터링하거나 특정 조건에 따라 요청을 수정하는 데 도움이 된다.
요약
AWS Network Load Balancer는 견고한 성능과 확장성을 제공하지만, Layer 4 특성상 직접적인 헤더 수정이 제한된다. 그러나 AWS Lambda와 Amazon API Gateway 또는 AWS WAF를 활용하면 원하는 헤더 수정 기능을 달성할 수 있다.
각 솔루션은 고유한 강점을 가지며 다양한 사용 사례에 적합하다:
- AWS Lambda 및 API Gateway: 특정하고 복잡한 헤더 조작에 최적.
- AWS WAF: 검사 및 필터링이 필요한 보안 중심 애플리케이션에 이상적.
이러한 기법과 구현을 이해함으로써 AWS 환경에서 HTTP 헤더를 효과적으로 관리하고 수정할 수 있으며, 애플리케이션이 안전하고 효율적이며 고가용성을 유지하도록 보장할 수 있다.
이러한 솔루션 구현에 대한 질문이나 추가 지원이 필요하면 언제든지 연락 바란다. AWS에서의 즐거운 구축을!
Ercan의 다른 글
같은 저자, 다른 영역의 사이트 두 개.