AWS WAF 로깅을 활성화하고 CloudWatch, Amazon S3 또는 Kinesis Data Firehose로 로그를 보내려면 어떻게 해야 하나요?

6분 분량
0

AWS WAF에 대한 로깅을 활성화하고 로그를 Amazon CloudWatch, Amazon Simple Storage Service(Amazon 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 Logs를 사용할 경우 다음을 고려하세요.

  • 로그 그룹 이름은 접두사 **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은 S3 버킷에 로그 파일을 5분 간격으로 게시합니다. 최대 파일 크기는 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 버킷에 대한 로그 전송을 구성하는 데 필요합니다. 또한 버킷 정책을 검색하고 편집하여 AWS WAF 로그가 S3 버킷으로 전송되도록 허용하는 데 필요합니다.

이러한 권한이 할당되면 다음 예제 정책이 자동으로 버킷 정책에 추가되어 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. 전송 스트림 생성을 선택합니다.
  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. 저장을 선택합니다.
AWS 공식
AWS 공식업데이트됨 2년 전