Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
일반적인 공격으로부터 리소스를 보호하도록 AWS WAF를 구성하려면 어떻게 해야 합니까?
리소스에서 AWS WAF를 사용하여 일반적인 공격으로부터 보호하고 싶습니다.
간략한 설명
리소스에서 AWS WAF를 사용하여 일반적인 공격으로부터 보호하려면 다음 작업 중 하나 이상을 수행하십시오.
- AWS WAF 클래식에서 AWS WAF로 마이그레이션합니다.
- 리소스를 AWS WAF의 웹 액세스 제어 목록(웹 ACL)에 연결합니다.
- 들어오는 요청을 검토하여 규칙을 최적화합니다.
- 일반적인 공격으로부터 보호할 수 있도록 AWS 관리형 규칙을 사용합니다.
- 정상적 요청 비율을 사용하여 AWS WAF의 기준을 지정합니다.
- AWS WAF의 보안 자동화를 사용하여 일반적인 공격을 방지합니다.
- SQL 인젝션 및 크로스 사이트 스크립팅(XSS) 공격 규칙 문을 사용합니다.
- Amazon CloudFront에서 액세스를 제한합니다.
- 분산 서비스 거부(DDoS) 공격으로부터 보호합니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
AWS WAF 클래식에서 AWS WAF로 마이그레이션
AWS WAF 클래식을 사용하는 경우 AWS WAF로 마이그레이션하는 것이 가장 좋습니다. 자세한 내용은 AWS WAF로 마이그레이션하는 이유는 무엇입니까?를 참조하십시오.
리소스를 웹 ACL에 연결
먼저 AWS WAF에서 웹 ACL을 만듭니다. 그런 다음, AWS WAF가 들어오는 요청을 모니터링할 수 있도록 리소스를 해당 웹 ACL에 연결합니다. 리소스를 AWS WAF와 직접 통합할 수 없는 경우 다음 대안을 검토하십시오. 자세한 내용은 AWS WAF로 보호할 수 있는 리소스를 참조하십시오.
AWS WAF와 통합할 수 있는 리소스
AWS WAF와 통합할 수 있는 리소스의 경우 다음 옵션 중 하나를 사용하여 리소스를 통합하십시오.
- AWS WAF 콘솔의 경우 관련 AWS 리소스 옵션을 사용합니다. 자세한 내용은 웹 ACL 만들기를 참조하십시오.
- AWS CLI의 경우 associate-web-acl 명령을 사용합니다.
- CloudFront의 경우 update-distribution 명령을 사용합니다.
- AWS Firewall Manager의 경우 Firewall Manager AWS WAF 정책을 사용합니다.
- AWS Amplify 애플리케이션의 경우 Amplify 또는 AWS WAF 콘솔에서 앱을 직접 연결합니다.
AWS WAF와 통합할 수 없는 리소스
AWS WAF와 직접 통합할 수 없는 리소스의 경우 다음 옵션 중 하나를 사용하여 리소스를 통합하십시오.
- Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 경우 Application Load Balancer 또는 CloudFront 배포를 생성합니다. 그런 다음, 배포를 웹 ACL과 연결합니다.
- Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 경우 Application Load Balancer를 생성합니다. 그런 다음, Application Load Balancer를 웹 ACL과 연결합니다. 자세한 내용은 AWS WAF를 사용하여 Amazon EKS 웹 앱 보호를 참조하십시오.
- Network Load Balancer의 경우 Application Load Balancer를 생성합니다. 그런 다음, Application Load Balancer를 Network Load Balancer의 대상으로 설정하고 Application Load Balancer를 웹 ACL과 연결합니다. 자세한 내용은 Application Load Balancer를 Network Load Balancer의 대상으로 사용을 참조하십시오.
들어오는 요청을 검토하여 규칙 최적화
리소스를 보호하려면 Application Load Balancer 또는 CloudFront 액세스 로그와 같은 애플리케이션 로그를 사용하여 일반적인 요청 패턴을 확인하십시오.
참고: AWS WAF 로그를 사용하여 HTTP 요청 로그를 저장, 쿼리 및 분석하는 것이 가장 좋습니다.
일반적인 요청 패턴을 확인한 후 Amazon Simple Storage Service(Amazon S3) 또는 Amazon CloudWatch에 로그를 저장합니다. 로그를 쿼리하고 패턴을 식별하려면 Amazon Athena 또는 CloudWatch Logs Insights를 사용하십시오.
마지막으로, 들어오는 요청을 확인하는 카운트 모드에서 AWS WAF 규칙을 생성한 다음, 규칙을 차단으로 설정합니다.
- example.com의 호스트 헤더에 NOT 규칙 문을 만듭니다.
참고: example.com을 호스트 헤더로 바꾸십시오. - 작업을 차단으로 설정합니다. AWS WAF는 지정한 호스트 헤더가 없는 요청을 차단합니다.
참고: 또한 이 규칙은 AWS에서 제공한 FQDN(완전히 정규화된 도메인 이름)에 대한 요청을 차단합니다.
다음 예는 발생할 수 있는 일반적인 요청 패턴입니다.
존재하지 않는 URI에 대한 요청
이 패턴을 인식하려면 사용자 환경에서 지원되는 모든 URI를 알아야 합니다. 다음은 각 URI에 대한 요청을 계산하는 AWS WAF 로그의 Athena 쿼리 예제입니다.
SELECT COUNT("httprequest"."uri") AS URIcount, "httprequest"."uri" FROM waf_logs GROUP BY "httprequest"."uri" ORDER BY URIcount DESC
다음은 각 URI에 대한 요청을 계산하는 AWS WAF 로그의 CloudWatch 쿼리 예제입니다.
fields httpRequest.uri | stats count(*) as requestCount by httpRequest.uri | sort requestCount desc
다른 호스트 헤더 값을 포함하는 요청
이 패턴에는 웹 서버가 지원하지 않는 HTTP 호스트 헤더가 있는 요청이 포함됩니다. 이 패턴에는 웹 사이트의 도메인 이름 대신 IP 주소가 있는 요청도 포함됩니다.
다음은 호스트 헤더 값이 다른 요청을 계산하는 AWS WAF 로그의 Athena 쿼리 예제입니다.
SELECT header.value as HostHeader, count(header) as count FROM waf_logs, UNNEST(httprequest.headers) AS x(header) WHERE "header"."name" = 'Host' GROUP BY header ORDER BY count DESC
다음은 호스트 헤더 값이 다른 요청을 계산하는 AWS WAF 로그의 CloudWatch 쿼리 예제입니다.
fields @timestamp, @message | parse @message '{"name":"Host","value":"*"}' as host | stats count(*) as requestCount by host | sort requestCount desc
일반적인 공격으로부터 보호할 수 있도록 AWS 관리형 규칙 사용
AWS 관리형 규칙을 사용하려면 보호하려는 일반적인 요청 패턴과 공격을 식별하십시오. 그런 다음, 관련 AWS 관리형 규칙 그룹을 추가합니다. 특수 작업으로부터 보호하기 위해 추가 요금으로 다음 규칙 그룹을 사용할 수 있습니다.
- AWS WAF Fraud Control 계정 생성 사기 방지(ACFP) 규칙 그룹
- AWS WAF Fraud Control 계정 탈취 방지(ATP) 규칙 그룹
- AWS WAF 봇 컨트롤 규칙 그룹
카운트 모드에서 웹 ACL에 관련 규칙 그룹을 추가합니다. 그런 다음, AWS WAF 로그와 CloudWatch 지표를 검토하여 관리형 규칙이 합법적인 트래픽과 일치하는지 확인합니다. 규칙이 합법적인 트래픽과 일치하지 않는 경우 규칙 그룹의 카운트 모드 활성화를 비활성화하여 트래픽을 차단하십시오. AWS 관리형 규칙 그룹에서 특정 규칙을 비활성화하려면 해당 규칙의 규칙 재정의 작업을 선택합니다.
참고: 사용자 환경에 정상적 요청이 수신되면 AWS 관리형 규칙이 시작될 수 있습니다. 자세한 내용은 AWS WAF용 AWS 관리형 규칙의 동작을 사용자 지정하는 방법을 참조하십시오.
정상적 요청 비율을 사용하여 AWS WAF의 기준 지정
볼륨 공격으로부터 보호하려면 트래픽을 분석하여 정상적 클라이언트 IP 주소에서 전송된 요청 수를 파악하십시오. 트래픽을 분석하려면 AWS WAF 로그에서 CloudWatch Logs Insights, Athena 쿼리 또는 Amazon Quick Sight를 사용하십시오. 분석 정보를 사용하여 AWS WAF의 기준을 지정합니다. 그런 다음, 속도 기반 규칙 문을 구성하여 요청 임계값을 설정합니다.
다음은 특정 기간 내에 단일 IP 주소에서 발생한 요청을 계산하는 AWS WAF 로그의 Athena 쿼리 예제입니다.
SELECT "httprequest"."clientip", "count"(*) "count", "httprequest"."country" FROM waf_logs WHERE httprequest.clientip LIKE '10.0.0.0' and date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00' GROUP BY "httprequest"."clientip", "httprequest"."country"
참고: 10.0.0.0을 IP 주소로 바꾸고, 2020-11-16 09:00:00 및 2020-11-16 10:00:00을 해당 시간대로 바꾸십시오.
다음은 단일 IP 주소에서 발생한 요청을 계산하는 AWS WAF 로그의 CloudWatch Insights 쿼리 예제입니다.
fields httpRequest.clientIp, httpRequest.country | stats count(*) as requestCount by httpRequest.clientIp, httpRequest.country | filter httpRequest.clientIp = "10.0.0.0"
참고: 10.0.0.0을 IP 주소로 바꾸십시오.
다음은 특정 기간 내에 IP 주소에서 발생한 모든 요청을 계산하는 AWS WAF 로그의 Athena 쿼리 예제입니다.
SELECT "httprequest"."clientip", "count"(*) "count", "httprequest"."country" FROM waf_logs WHERE date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') BETWEEN '2020-11-16 09:00:00' AND '2020-11-16 10:00:00' GROUP BY "httprequest"."clientip", "httprequest"."country" ORDER BY "count" DESC
참고: 2020-11-16 09:00:00 및 2020-11-16 10:00:00을 해당 시간대로 바꾸십시오.
다음은 특정 기간 내에 IP 주소에서 발생한 요청을 계산하는 AWS WAF 로그의 CloudWatch Insights 쿼리 예제입니다.
fields httpRequest.clientIp, httpRequest.country | stats count(*) as requestCount by httpRequest.clientIp, httpRequest.country | sort requestCount desc
AWS WAF의 보안 자동화를 사용하여 일반적인 공격 방지
일반적인 공격으로부터 추가 보호를 제공하기 위해 AWS WAF용 보안 자동화를 사용할 수 있습니다.
참고: 이 솔루션은 비용이 발생할 수 있는 다른 AWS 서비스를 사용합니다.
SQL 인젝션 및 XSS 공격 규칙 문 사용
SQL 인젝션 및 XSS 공격으로부터 애플리케이션을 보호하려면 SQL 인젝션 및 XSS에 대한 기본 제공 공격 규칙 문을 사용하십시오. 공격은 HTTP 헤더, 쿼리 문자열 또는 URI와 같은 HTTP 요청의 여러 부분에서 발생할 수 있습니다. 공격 규칙 문과 비교하여 HTTP 요청의 여러 부분을 검사하도록 AWS WAF 규칙을 구성합니다.
참고: 사용자 환경에 정상적 요청이 수신되면 공격 규칙 문이 시작될 수 있습니다. 자세한 내용은 AWS 관리형 규칙으로 인한 오탐지를 감지하려면 어떻게 해야 합니까?를 참조하십시오.
CloudFront에서 액세스 제한
CloudFront IP 주소를 기반으로 액세스를 제한할 수 있습니다. 그런 다음, CloudFront에서 오리진 요청에 대한 사용자 지정 헤더를 추가합니다. 오리진에서는 사용자 지정 헤더와 값이 있는 경우에만 액세스를 허용합니다. 오리진이 Application Load Balancer 또는 API Gateway인 경우 오리진에서 AWS WAF를 사용하십시오. 이 작업을 수행하면 사용자 지정 헤더와 값을 포함한 요청이 허용됩니다.
DDoS 공격으로부터 보호
DDoS 공격으로부터 보호하려면 DDoS 복원력에 대한 AWS 모범 사례 및 AWS Shield 기능을 참조하십시오.
관련 정보
관련 콘텐츠
- 질문됨 일 년 전

