AWS WAF, AWS Firewall Manager 및 AWS Shield Advanced
개발자 가이드 (API 버전 2015-08-24)

웹 ACL 트래픽 정보 로깅

로깅을 활성화하여 웹 ACL에서 분석한 트래픽에 대한 자세한 정보를 기록할 수 있습니다. 로그에 포함된 정보에는 AWS WAF가 AWS 리소스로부터 요청을 받은 시간, 요청에 대한 세부 정보, 각 요청이 부합되는 규칙에 대한 작업이 들어 있습니다.

시작하려면 Amazon Kinesis Data Firehose를 설정합니다. 이 과정에서 로그를 저장할 대상 위치를 선택합니다. 그런 다음 로깅을 활성화하려는 웹 ACL을 선택합니다. 로깅을 활성화하면 AWS WAF에서 Firehose를 통해 스토리지 대상에 로그를 제공합니다. Amazon Kinesis Data Firehose를 생성하고 저장된 로그를 검토하는 방법은 Amazon Kinesis Data Firehose란 무엇입니까?를 참조하십시오.

로깅을 활성화하려면 다음 권한이 있어야 합니다.

  • iam:CreateServiceLinkedRole

  • firehose:ListDeliveryStreams

  • waf:PutLoggingConfiguration

서비스 연결 역할 및 iam:CreateServiceLinkedRole 권한에 대한 자세한 내용은 AWS WAF에 서비스 연결 역할 사용 단원을 참조하십시오.

웹 ACL에 대해 로깅을 활성화하려면

  1. "aws-waf-logs-" 접두사로 시작하는 이름(예: aws-waf-logs-us-east-2-analytics)을 사용하여 Amazon Kinesis Data Firehose를 생성합니다. 작업하려는 리전에서 PUT 소스를 사용하여 Data Firehose를 생성합니다. Amazon CloudFront에 대해 로그를 캡처하려면 미국 동부(버지니아 북부)에 Firehose를 생성합니다. 자세한 내용은 Amazon Kinesis Data Firehose 전송 스트림 생성을 참조하십시오.

    중요

    Kinesis stream을 소스로 선택하지 마십시오.

    한 개의 AWS WAF 로그는 한 개의 Kinesis Data Firehose 레코드에 해당합니다. 일반적으로 초당 10,000개의 요청을 받는데 전체 로그를 활성화한 경우, Kinesis Data Firehose에서 초당 10,000개의 레코드가 한도입니다. Kinesis Data Firehose를 올바르게 구성하지 않으면 AWS WAF에서 로그를 기록하지 않습니다. 자세한 내용은 Amazon Kinesis Data Firehose 제한을 참조하십시오.

  2. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/wafv2/에서 AWS WAF 콘솔을 엽니다.

  3. 탐색 창에서 [Web ACLs]를 선택합니다.

  4. 로깅을 활성화하려는 웹 ACL을 선택합니다.

  5. 로깅 탭에서 로깅 활성화를 선택합니다.

  6. 첫 단계에서 생성한 Kinesis Data Firehose를 선택합니다. "aws-waf-logs-"로 시작하는 Firehose를 선택해야 합니다.

  7. (선택 사항) 로그에 포함된 특정 필드와 그 값이 필요하지 않은 경우 해당 필드를 삭제합니다. 삭제할 필드를 선택한 후 추가를 선택합니다. 필요에 따라 이 작업을 반복하여 추가 필드를 삭제합니다. 삭제된 필드는 로그에서 XXX로 표시됩니다. 예를 들어 cookie 필드를 삭제한 경우 로그에서 cookie 필드가 XXX로 나타납니다.

  8. 로깅 활성화를 선택합니다.

    참고

    로깅을 활성화한 경우 AWS WAF는 필요한 권한을 가진 서비스 연결 역할을 생성하여Amazon Kinesis Data Firehose에 로그를 기록합니다. 자세한 내용은 AWS WAF에 서비스 연결 역할 사용 단원을 참조하십시오.

웹 ACL에 대한 로깅을 비활성화하려면

  1. 탐색 창에서 [Web ACLs]를 선택합니다.

  2. 로깅을 비활성화하려는 웹 ACL을 선택합니다.

  3. 로깅 탭에서 로깅 비활성화를 선택합니다.

  4. 대화 상자에서 로깅 비활성화를 선택합니다.

예 로그 예

{ "timestamp":1533689070589, "formatVersion":1, "webaclId":"385cb038-3a6f-4f2f-ac64-09ab912af590", "terminatingRuleId":"Default_Action", "terminatingRuleType":"REGULAR", "action":"ALLOW", "httpSourceName":"CF", "httpSourceId":"i-123", "ruleGroupList":[ { "ruleGroupId":"41f4eb08-4e1b-2985-92b5-e8abf434fad3", "terminatingRule":null, "nonTerminatingMatchingRules":[ {"action" : "COUNT", "ruleId" : "4659b169-2083-4a91-bbd4-08851a9aaf74"} ] "excludedRules": [ {"exclusionType" : "EXCLUDED_AS_COUNT", "ruleId" : "5432a230-0113-5b83-bbb2-89375c5bfa98"} ] } ], "rateBasedRuleList":[ { "rateBasedRuleId":"7c968ef6-32ec-4fee-96cc-51198e412e7f", "limitKey":"IP", "maxRateAllowed":100 }, { "rateBasedRuleId":"462b169-2083-4a93-bbd4-08851a9aaf30", "limitKey":"IP", "maxRateAllowed":100 } ], "nonTerminatingMatchingRules":[ {"action" : "COUNT", "ruleId" : "4659b181-2011-4a91-bbd4-08851a9aaf52"} ], "httpRequest":{ "clientIp":"192.10.23.23", "country":"US", "headers":[ { "name":"Host", "value":"127.0.0.1:1989" }, { "name":"User-Agent", "value":"curl/7.51.2" }, { "name":"Accept", "value":"*/*" } ], "uri":"REDACTED", "args":"usernam=abc", "httpVersion":"HTTP/1.1", "httpMethod":"GET", "requestId":"cloud front Request id" } }

다음은 이러한 로그에 나열되는 각 항목에 대한 설명입니다.

타임스탬프

밀리초 단위의 타임스탬프.

formatVersion

로그의 포맷 버전.

webaclId

웹 ACL의 GUID.

terminatingRuleId

요청을 종료한 규칙의 ID. 요청을 종료하는 규칙이 없으면 이 값은 Default_Action입니다.

terminatingRuleType

요청을 종료한 규칙의 유형. 가능한 값: RATE_BASED, REGULAR 및 GROUP.

action

작업. 종료 규칙의 가능한 값: ALLOW 및 BLOCK. COUNT는 종료 규칙의 유효한 값이 아닙니다.

httpSourceName

요청의 소스. 가능한 값: CF(소스가 Amazon CloudFront인 경우), APIGW(소스가 Amazon API Gateway인 경우) 및 ALB(소스가 Application Load Balancer인 경우).

httpSourceId

소스 ID. 이 필드에는 연결된 Amazon CloudFront 배포의 ID, API 게이트웨이에 대한 REST API, 또는 Application Load Balancer의 이름이 표시됩니다.

ruleGroupList

이 요청에 작용하는 규칙 그룹의 목록. 위의 코드 예제에서는 하나만 있습니다.

ruleGroupId

규칙 그룹의 ID. 규칙에서 요청을 차단한 경우 ruleGroupID의 ID는 terminatingRuleId의 ID와 동일합니다.

terminatingRule

요청을 종료한 규칙 그룹 내의 규칙. 이 항목이 null이 아닌 값인 경우 ruleidaction도 포함됩니다. 이 경우 이 작업은 항상 BLOCK입니다.

nonTerminatingMatchingRules

요청에 부합되는 규칙 그룹의 규칙 목록. 이 항목은 항상 COUNT 규칙입니다(일치하는 비 종료 규칙).

action(nonTerminatingMatchingRules group)

이 항목은 항상 COUNT입니다(일치하는 비 종료 규칙).

ruleId(nonTerminatingMatchingRules group)

규칙 그룹에서 요청에 부합되는 비 종료 규칙의 ID. 즉. COUNT 규칙입니다.

excludedRules

규칙 그룹에서 제외한 규칙의 목록입니다. 이 규칙에 대한 작업은 COUNT로 설정됩니다.

exclusionType(excludedRules 그룹)

제외된 규칙에 COUNT 작업이 있음을 나타내는 유형입니다.

ruleId(excludedRules 그룹)

규칙 그룹 내에서 제외된 규칙의 ID입니다.

rateBasedRuleList

요청에 작용하는 비율 기반 규칙의 목록.

rateBasedRuleId

요청에 작용하는 비율 기반 규칙의 ID입니다. 이 규칙이 요청을 종료한 경우 rateBasedRuleId의 ID는 terminatingRuleId의 ID와 동일합니다.

limitKey

AWS WAF가 요청이 단일 소스로부터 수신될 가능성이 있는지 여부를 확인하기 위해 사용하는 필드이며, 따라서 비율 모니터링이 적용됩니다. 가능한 값: IP.

maxRateAllowed

5분 기간 동안 허용되는 요청의 최대 수입니다. 이 항목의 값은limitKey를 통해 지정된 필드의 값과 동일합니다. 요청 수가 maxRateAllowed를 초과하는 경우 규칙에 지정된 다른 조건자도 일치하면 AWS WAF에서 이 규칙에 지정된 작업을 트리거합니다.

httpRequest

요청에 대한 메타데이터.

clientIp

클라이언트가 요청을 보내는 IP 주소.

국가

요청의 출처 국가.

headers

헤더 목록.

uri

요청의 URI. 위의 코드 예제는 이 필드가 삭제된 경우 값이 어떻게 되는지를 보여 줍니다.

args

쿼리 문자열.

httpVersion

HTTP 버전.

httpMethod

요청의 HTTP 메서드.

requestId

요청의 ID입니다.