AWS Web Application Firewall(AWS WAF) 및 AWS Global Accelerator로 7계층 HTTP 메서드와 헤더를 차단하고 싶습니다. Application Load Balancer는 AWS WAF 규칙의 엔드포인트 역할을 합니다.
간략한 설명
AWS WAF 및 Application Load Balancer를 Global Accelerator와 함께 사용하여 7계층 HTTP 메서드 및 헤더에 대한 액세스를 차단할 수 있습니다. AWS WAF는 Global Accelerator에 대한 엔드포인트로 설정된 Application Load Balancer와 웹 액세스 제어 목록(웹 ACL) 규칙을 함께 사용합니다. Global Accelerator 자체는 AWS WAF를 지원하지 않습니다.
로드 밸런서와 연결된 웹 ACL 규칙은 수신 트래픽을 평가하여 규칙을 준수하는 요청만 엔드포인트에 전달합니다.
참고: 아키텍처에서 Amazon CloudFront를 사용하는 경우 Amazon CloudFront 및 AWS WAF를 사용하여 웹 사이트를 가속화하고 보호하기를 참조하십시오.
해결 방법
웹 ACL 규칙을 사용하면 보호된 리소스로 들어오는 HTTP 요청을 제어하고 필터링할 수 있습니다. URI, 쿼리 문자열, HTTP 메서드 또는 헤더 키와 같은 요청 구성 요소의 특정 패턴과 일치하는 규칙을 생성할 수 있습니다. 정확한 문자열 일치 또는 정규 표현식을 사용하여 이러한 패턴을 정의할 수 있습니다.
사전 요구 사항
- Application Load Balancer
- Application Load Balancer를 엔드포인트로 사용하는 Global Accelerator 설정
- AWS WAF를 구성할 수 있는 권한
참고: 이 설정에서는 액셀러레이터에 애플리케이션 액세스 요청을 보냅니다. 액셀러레이터는 사용자 트래픽을 Application Load Balancer 및 이와 관련된 AWS WAF로 라우팅합니다. AWS WAF는 7계층 HTTP 메서드 또는 사용자-에이전트 헤더 값을 가진 사용자 요청을 평가하여 차단하거나 허용합니다.
규칙 기반의 웹 ACL 생성
규칙 기반의 웹 ACL을 생성하려면 다음 단계를 완료하십시오. 자세한 내용은 AWS WAF에서 보호 팩 또는 웹 ACL 생성을 참조하십시오.
웹 ACL 생성
- AWS WAF 콘솔로 이동합니다.
- 웹 ACL 생성을 선택합니다.
- 웹 ACL의 이름을 지정합니다. Application Load Balancer의 AWS 리전을 선택합니다.
- Application Load Balancer를 웹 ACL과 연결합니다.
- 다음을 선택합니다.
웹 ACL에 사용자 지정 규칙 추가
- 규칙 추가를 선택합니다. 드롭다운 목록에서 내 규칙 및 규칙 그룹 추가를 선택합니다.
- 규칙 빌더에서 규칙을 추가합니다.
- 규칙 이름을 지정합니다(예: deny_User-Agent_with_POST).
- 유형에서 일반 규칙을 선택합니다.
규칙에 대한 일치 기준 구성
-
적어도 하나 이상의 명령문(OR)과 일치하는 매치를 선택합니다.
-
statement1에 다음 정보를 입력합니다.
검사: 단일 헤더
헤더 필드 이름: 사용자-에이전트
매치 유형: 문자열과 정확히 일치
일치하는 문자열: curl/7.79.0
statement2에 다음 정보를 입력합니다.
**검사:**HTTP 메서드
매치 유형: 문자열과 정확히 일치
일치하는 문자열: POST
-
작업에서 차단을 선택합니다.
사용자-에이전트 헤더 값으로 결과 테스트
애플리케이션에 액세스하려면 GET 요청 메서드와 Global Accelerator URL 및 사용자-에이전트 헤더 값인 curl/7.79.0을 사용합니다.
curl http://YourGlobalAcceleratorURL -v -H "User-Agent:curl/7.79.0"
> GET / HTTP/1.1
> Host: YourGlobalAcceleratorDNS
> User-Agent:curl/7.79.0
< HTTP/1.1 403 Forbidden
< Server: awselb/2.0
<
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>
참고: Global Accelerator URL을 Global Accelerator URL로, Global Accelerator DNS를 DNS로 대체하십시오.
AWS WAF는 요청을 차단하고 Application Load Balancer는 403 Forbidden 오류 메시지로 응답합니다.
POST 요청으로 결과 테스트
애플리케이션에 액세스하려면 POST 요청 메서드와 Global Accelerator URL 및 사용자-에이전트 헤더 값인 curl/7.79.1을 사용합니다.
curl -X POST http://YourGlobalAcceleratorURL --user "test-user:test-password" -v
> POST / HTTP/1.1
> Host: YourGlobalAcceleratorDNS
> Authorization: Basic dGVzdC11c2VyOnRlc3QtcGFzc3dvcmQ=
> User-Agent: curl/7.79.1
>
< HTTP/1.1 403 Forbidden
< Server: awselb/2.0
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>
참고: Global Accelerator URL을 Global Accelerator URL로, Global Accelerator DNS를 DNS로 대체하십시오.
AWS WAF는 요청을 차단하고 Application Load Balancer는 403 Forbidden 오류 메시지로 응답합니다.