AWS WAF 로깅을 활성화하고 CloudWatch, 아마존 S3 또는 Kinesis Data Firehose로 로그를 전송하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 7월 22일

AWS WAF에 대한 로깅을 켜고 로그를 Amazon CloudWatch, Amazon Simple Storage Service(S3), 또는 Amazon Kinesis Data Firehose로 전송하려고 합니다. AWS WAF 로그를 활성화하려면 어떻게 해야 하며, 필요한 권한은 무엇입니까?

간략한 설명

먼저 AWS WAF 웹 ACL에 대해 지원되는 대상을 선택합니다. AWS WAF는 다음과 같은 로그 대상을 지원합니다.

AWS WAF 로그를 활성화하는 데 필요한 리소스 권한이 있는지 확인합니다. 그런 다음 선택한 대상을 사용하여 AWS WAF 로그를 활성화합니다.

해결 방법

AWS WAF 로그를 저장할 수 있는 대상은 다음과 같습니다.

Amazon CloudWatch Logs

로그를 CloudWatch Logs 로그 그룹으로 보내려면, AWS WAF 로그를 활성화할 때 CloudWatch Logs 로그 그룹을 대상으로 선택합니다.

새 로그 그룹을 생성하거나, 기존 로그 그룹을 사용합니다. 활성화되면 AWS WAF 로그가 로그 스트림의 로그 그룹으로 전송됩니다. 로그 인사이트를 사용하여 이러한 로그를 분석할 수 있습니다. 자세한 내용은 CloudWatch 또는 Amazon S3에 저장된 AWS WAF 로그를 분석할 수 있는 옵션은 무엇입니까?를 참조하십시오.

CloudWatch 로그를 사용할 때는 다음 사항을 고려하십시오.

  • 로그 그룹 이름은 접두사 aws-waf-logs-로 시작해야 합니다.
  • 로그 그룹은 웹 ACL과 동일한 AWS 계정 및 리전에 위치해야 합니다. CloudFront에 연결된 글로벌 웹 ACL의 경우, 로그 그룹은 미국 동부(버지니아 북부) 리전에 위치해야 합니다.
  • 로그 그룹에는 로그를 저장할 때 로그 그룹에 대한 할당량이 주어집니다.
  • 로그 그룹에 생성된 로그 스트림의 형식은 다음과 같습니다.
Region_web-acl-name_log-stream-number

필요한 권한

CloudWatch Logs 로그 그룹을 사용하여 AWS WAF 로그를 활성화하는 계정에는 다음 권한이 있어야 합니다.

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • logs:CreateLogDelivery
  • logs:DeleteLogDelivery
  • logs:PutResourcePolicy
  • logs:DescribeResourcePolicies
  • logs:DescribeLogGroups

이러한 권한은 웹 ACL 로깅 구성을 변경하고, 로그 전달을 구성하고, 로그 그룹에 대한 권한을 검색 및 편집하는 데 필요합니다. 이러한 권한은 AWS WAF를 관리하는 사용자에게 연결되어야 합니다.

이러한 권한이 할당되면 AWS는 CloudWatch Logs의 리소스 기반 정책에 다음 정책을 자동으로 추가합니다. 이를 통해 전송 서비스는 로그를 CloudWatch Logs 로그 그룹으로 푸시할 수 있습니다.
참고: 계정 번호와 Amazon 리소스 이름(ARN)은 다음 정책에 따라 사용자 계정에만 적용됩니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AWSLogDeliveryWrite20150319",
      "Effect": "Allow",
      "Principal": {
        "Service": ["delivery.logs.amazonaws.com"]
      },
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": ["arn:aws:logs:us-east-1:0123456789:log-group:my-log-group:log-stream:*"],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": ["0123456789"]
        },
        "ArnLike": {
          "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"]
        }
      }
    }
  ]
}

로그 그룹에 로그가 표시되지 않는 경우 DescribeResourcePolicies API를 사용하여 앞에서 설명한 필수 권한이 로그 그룹의 리소스 기반 정책에 추가되었는지 확인합니다. PutResourcePolicy를 사용하여 로그 서비스에 대한 리소스 기반 정책을 편집할 수 있습니다.

로그 그룹 권한에 대한 자세한 내용은 특정 AWS 서비스에서 로깅 활성화를 참조하십시오.

Amazon S3 버킷

Amazon S3 버킷으로 로그를 전송하려면 AWS WAF 로그를 활성화할 때 그 대상으로 S3 버킷을 선택합니다.

웹 ACL은 5분 간격으로 로그 파일을 S3 버킷에 게시합니다. 최대 파일 크기는 75메가바이트(MB)입니다. 파일 크기가 최대값을 초과하면, 새 파일이 기록됩니다. 로그가 활성화되면 Amazon Athena를 사용하여 로그를 분석할 수 있습니다. 자세한 내용은 AWS WAF 로그 쿼리를 참조하십시오.

AWS WAF 로깅을 위한 S3 버킷 이름은 접두사 aws-waf-logs-로 시작해야 합니다.

필요한 권한

S3 버킷을 사용하여 AWS WAF 로그를 활성화하는 계정에는 다음 권한이 있어야 합니다.

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • logs:CreateLogDelivery
  • logs:DeleteLogDelivery
  • s3:PutBucketPolicy
  • s3:GetBucketPolicy

이러한 권한은 AWS WAF 로깅을 활성화하고 S3 버킷에 대한 로그 전송을 구성하는 데 필요합니다. 또한 S3 버킷으로 AWS WAF 로그를 전송할 수 있도록 버킷 정책을 검색하고 편집하는 데에도 필요합니다.

이러한 권한이 할당되면 다음 예제 정책이 버킷 정책에 자동으로 추가되어 S3 버킷으로 로그를 전송할 수 있습니다.
참고: 계정 번호와 Amazon 리소스 이름(ARN)은 다음 정책에 대한 사용자 계정에만 적용됩니다.

{
  "Version": "2012-10-17",
  "Id": "AWSLogDeliveryWrite20150319",
  "Statement": [
    {
      "Sid": "AWSLogDeliveryAclCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::my-bucket",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": [
            "0123456789"
          ]
        },
        "ArnLike": {
          "aws:SourceArn": [
            "arn:aws:logs:us-east-1:0123456789:*"
          ]
        }
      }
    },
    {
      "Sid": "AWSLogDeliveryWrite",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-bucket/AWSLogs/account-ID/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control",
          "aws:SourceAccount": [
            "0123456789"
          ]
        },
        "ArnLike": {
          "aws:SourceArn": [
            "arn:aws:logs:us-east-1:0123456789:*"
          ]
        }
      }
    }
  ]
}

S3 버킷에 AWS WAF 로그가 표시되지 않는 경우 GetBucketPolicy API를 사용하여 버킷 정책에 필요한 권한이 있는지 확인합니다. PutBucketPolicy API를 사용하여 버킷 정책을 편집할 수 있습니다.

다른 AWS 계정 또는 리전으로 로그를 보내려면 중앙 집중식 로깅 계정의 Amazon S3 버킷으로 AWS WAF 로그를 전송하려면 어떻게 해야 합니까?를 참조하십시오.

Amazon Kinesis Data Firehose

AWS WAF 로그를 Kinesis Data Firehose 스트림으로 전송하려면 전송 스트림을 생성해야 합니다. 전송 스트림에서 로그를 저장할 대상이 다릅니다.

Kinesis Data Firehose를 사용할 때는 다음 사항을 고려하십시오.

  • Kinesis Data Firehose 이름은 접두사 aws-waf-logs-로 시작해야 합니다.
  • Kinesis Data Firehose 전송 스트림은 웹 ACL과 동일한 AWS 계정 및 리전에 위치해야 합니다. CloudFront에 연결된 글로벌 웹 ACL의 경우, Kinesis Data Firehose는 미국 동부(버지니아 북부) 리전에 위치해야 합니다.
  • 하나의 AWS WAF 로그는 하나의 Kinesis Data Firehose 레코드와 동일하며, Amazon Kinesis Data Firehose 할당량이 적용됩니다.
    중요: 초당 10,000개 이상의 요청을 수신하면 데이터가 제한되며, 모든 요청이 기록되는 것은 아닙니다. 제한을 방지하려면 Kinesis Data Firehose의 할당량 증가를 요청해야 합니다.

필요한 권한

Kinesis Data Firehose 대상을 사용하여 AWS WAF 로그를 활성화하는 계정에는 다음 권한이 있어야 합니다.

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • iam:CreateServiceLinkedRole
  • firehose:ListDeliveryStreams

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

Kinesis Data Firehose 전송 스트림을 생성하려면 다음 단계를 따르십시오.

  1. Amazon Kinesis 콘솔을 엽니다.
  2. 리전에서 웹 ACL을 생성한 AWS 리전을 선택합니다.
    참고:  웹 ACL이 Amazon CloudFront에 대해 설정된 경우 전역을 선택합니다.
  3. 탐색 창에서 전송 스트림을 선택합니다.
  4. 전송 스트림 생성(Create delivery stream)을 선택합니다.
  5. 소스에서 Direct PUT을 선택합니다.
  6. 대상에서, Kinesis Firehose에 대한 대상 중에서 선택합니다.
  7. 전송 스트림 이름aws-waf-logs-로 시작하는 전송 스트림의 이름을 입력합니다.
  8. 데이터 변환레코드 형식 변환이 모두 비활성 상태임을 확인합니다.
  9. 6단계에서 선택한 대상 방법에 따라 대상 설정을 입력합니다.
  10. (선택 사항) 버퍼 힌트, 압축 및 암호화의 경우, 사양에 맞게 구성하거나 기본 설정을 유지합니다.
  11. (선택 사항) 고급 설정의 경우, 사양에 맞게 구성하거나 기본 설정을 유지합니다.
  12. 전송 스트림에 대한 설정을 검토합니다. 설정이 사양과 일치하면 전송 스트림 생성을 선택합니다.

AWS WAF 로그 활성화

AWS WAF 로그를 전송할 대상을 결정한 후, 다음을 수행하여 AWS WAF 로깅을 설정합니다.

  1. AWS WAF 콘솔을 엽니다.
  2. 리전에서 웹 ACL을 생성한 AWS 리전을 선택합니다.
    참고:  웹 ACL이 Amazon CloudFront에 대해 설정된 경우 전역을 선택합니다.
  3. 웹 ACL을 선택합니다.
  4. 로깅 및 지표를 선택한 다음 활성화를 선택합니다.
  5. 지원하는 대상에서 AWS WAF 로그를 저장할 대상을 선택합니다.
  6. 편집된 필드의 경우, 로그에서 제외할 필드를 선택합니다.
  7. 필터 로그의 경우, 필터를 추가하여 저장할 요청을 제어합니다.
  8. 저장을 선택합니다.

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요하세요?