AWS Global Accelerator와 함께 AWS WAF 지원 Application Load Balancer를 사용하여 요청 메서드가 POST이거나 사용자-에이전트 헤더 값이 curl/7.79와 일치하는 경우 애플리케이션에 대한 요청을 차단하고 싶습니다.
간략한 설명
AWS WAF 및 Application Load Balancer를 Global Accelerator와 함께 사용하여 7계층 HTTP 메서드 및 헤더에 대한 액세스를 차단할 수 있습니다. 이 아키텍처에서 AWS WAF는 Application Load Balancer와 더불어 웹 액세스 제어 목록(웹 ACL) 규칙을 사용합니다. 로드 밸런서는 Global Accelerator의 엔드포인트가 됩니다.
참고: AWS Global Accelerator 자체는 AWS WAF를 지원하지 않습니다.
로드 밸런서와 연결된 웹 ACL 규칙은 수신 트래픽을 평가하여 규칙을 준수하는 요청만 엔드포인트에 전달합니다.
해결 방법
웹 ACL 규칙은 보호된 리소스에 대한 모든 HTTP(S) 웹 요청을 세밀하게 제어합니다. 규칙을 적용하여 유니폼 리소스 식별자(URI), 쿼리 문자열, HTTP 메서드 또는 헤더 키와 같은 하나 이상의 요청 속성으로 문자열 또는 정규식 일치를 구성합니다.
사전 요건
규칙 기반의 웹 ACL 생성
다음의 3단계 프로세스를 적용하여 규칙 기반 웹 ACL을 생성합니다. 자세한 내용은 버킷 생성을 참조하세요.
웹 ACL 생성
- AWS WAF 콘솔로 이동하여 웹 ACL을 생성합니다.
- 웹 ACL 생성을 선택합니다.
- 웹 ACL의 이름을 지정합니다. 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://<your Global Accelerator URL> -v -H "User-Agent:curl/7.79.0"
> GET / HTTP/1.1
> Host: <your Global Accelerator DNS>
> 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로 <your Global Accelerator URL> 대체합니다. DNS로 <your Global Accelerator DNS> 대체합니다.
AWS WAF가 요청을 차단했고 Application Load Balancer가 403 Forbidden 메시지로 응답했음을 알 수 있습니다.
POST 요청으로 결과 테스트
POST 요청 메서드와 함께 Global Accelerator의 URL 및 사용자 에이전트 헤더 값인 curl/7.79.1을 사용하여 애플리케이션에 액세스합니다.
curl -X POST http://<your Global Accelerator URL> --user "test-user:test-password" -v
> POST / HTTP/1.1
> Host: <your Global Accelerator DNS>
> 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로 <your Global Accelerator URL> 대체합니다. DNS로 <your Global Accelerator DNS> 대체합니다.
AWS WAF가 요청을 차단했고 Application Load Balancer가 403 Forbidden 메시지로 응답했음을 알 수 있습니다.