AWS Global Accelerator와 함께 AWS WAF를 사용하여 7계층 HTTP 메서드와 헤더가 내 애플리케이션에 액세스하지 못하도록 차단하려면 어떻게 해야 하나요?

3분 분량
0

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 메서드 또는 헤더 키와 같은 하나 이상의 요청 속성으로 문자열 또는 정규식 일치를 구성합니다.

사전 요건

  • Global Accelerator, Application Load Balancer 및 AWS WAF에 대해 다음과 같은 트래픽 흐름 구성이 있는지 확인합니다.
    User --> Global Accelerator --> Application Load Balancer with AWS WAF --> EC2 instance
    참고: 이 설정에서 사용자는 액셀러레이터에 요청하여 애플리케이션에 액세스합니다. 액셀러레이터는 사용자 트래픽을 Application Load Balancer 및 이와 관련된 AWS WAF로 라우팅합니다. AWS WAF는 7계층 HTTP 메서드 또는 사용자-에이전트 헤더 값을 가진 사용자 요청을 평가하여 차단하거나 허용합니다.

규칙 기반의 웹 ACL 생성

다음의 3단계 프로세스를 적용하여 규칙 기반 웹 ACL을 생성합니다. 자세한 내용은 버킷 생성을 참조하세요.

웹 ACL 생성

  1. AWS WAF 콘솔로 이동하여 웹 ACL을 생성합니다.
  2. 웹 ACL 생성을 선택합니다.
  3. 웹 ACL의 이름을 지정합니다. Application Load Balancer의 리전을 선택합니다.
  4. 애플리케이션 로드 밸런스를 웹 ACL과 연결합니다.
  5. 다음을 선택합니다.

웹 ACL에 사용자 지정 규칙 추가

다음과 같이 계속 구성합니다.

  1. 규칙 추가를 선택합니다. 드롭다운에서 내 규칙 및 규칙 그룹 추가를 선택합니다.
  2. 규칙 빌더에서 규칙을 추가합니다.
  3. 규칙 이름을 지정합니다(예: deny_User-Agent_with_POST).
  4. 유형에서 일반 규칙을 선택합니다.

규칙에 대한 일치 기준 구성

나머지 단계를 완료합니다.

  1. 적어도 하나 이상의 명령문(OR)과 일치하는 매치를 선택합니다.

  2. statement1에 따라 다음과 같이 작성합니다.
    검사: 단일 헤더
    **헤더 필드 이름:**유저-에이전트
    **매치 유형:**문자열과 정확히 일치합니다.
    일치하는 문자열: curl/7.79.0

    statement2에 따라 다음과 같이 작성합니다.
    **검사:**HTTP 메서드
    **매치 유형:**문자열과 정확히 일치합니다.
    일치하는 문자열: POST

  3. 액션 차단을 선택합니다.

사용자-에이전트 헤더 값으로 결과 테스트

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 메시지로 응답했음을 알 수 있습니다.

AWS 공식
AWS 공식업데이트됨 일 년 전