방화벽 정책 규칙 로깅 사용

방화벽 정책 규칙 로깅을 사용하면 방화벽 규칙의 영향을 감사, 확인, 분석할 수 있습니다. 예를 들어 트래픽을 거부하도록 설계된 방화벽 규칙이 의도한 대로 작동하는지 확인할 수 있고, 지정된 방화벽 규칙의 영향을 받는 연결 수를 확인해야 하는 경우에도 유용합니다.

Virtual Private Cloud (VPC) 방화벽 규칙에 방화벽 정책 규칙 로깅을 사용 설정 및 중지하는 방법을 알아봅니다. 방화벽 정책 규칙 로깅에 대한 안내는 계층식 방화벽 정책 및 규칙 사용을 참조하세요.

생성된 로그를 보는 방법도 알아볼 수 있습니다. 로깅되는 내용, 로깅 예시, 로그 형식에 대한 자세한 내용은 방화벽 정책 규칙 로깅 개요를 참고하세요.

방화벽 규칙에 로깅을 사용하면 방화벽 통계에서 방화벽 규칙에 대한 통계와 권장사항을 볼 수 있습니다. 자세한 내용은 Network Intelligence Center 문서의 방화벽 통계를 참고하세요.

권한

방화벽 규칙을 수정하거나 로그에 액세스하려는 IAM 주 구성원에게는 다음 역할 중 하나가 필요합니다.

작업 필요한 역할
방화벽 규칙 만들기, 삭제, 업데이트 프로젝트 소유자나 편집자 또는 보안 관리자 역할 (roles/compute.securityAdmin)
로그 보기 프로젝트 소유자, 편집자 또는 뷰어 또는 로그 뷰어 역할 (roles/logging.viewer)
로깅 IAM 역할 및 권한에 대한 자세한 내용은 로깅 액세스 제어 가이드를 참고하세요.

방화벽 정책 규칙 로깅 사용 설정 및 사용 중지

방화벽 규칙을 만들 때 해당 방화벽 규칙에 로깅을 사용 설정할 수 있습니다. 자세한 내용은 방화벽 규칙 만들기를 참고하세요.

기존 방화벽 규칙에 방화벽 정책 규칙 로깅을 사용 설정하거나 중지하려면 다음 안내를 따르세요. 로깅을 사용 설정하면 메타데이터 필드를 포함할지 여부를 제어할 수 있습니다. 이러한 필드를 생략하면 스토리지 비용을 절약할 수 있습니다.

방화벽 정책 규칙 로깅 사용 설정

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.

    방화벽 정책으로 이동

  2. 로그 열에서 각 방화벽 규칙에 대해 방화벽 로깅이 사용 설정 또는 사용 중지되었는지 확인합니다.

  3. 하나 이상의 방화벽 규칙에 로깅을 사용 설정하려면 업데이트할 각 규칙 옆에 있는 체크박스를 선택합니다.

  4. VPC 방화벽 규칙 작업 모음에서 로그 구성을 클릭합니다.

  5. 로그 구성 대화상자에서 켜기를 선택합니다.

  6. 메타데이터 필드를 생략하려면 로그 세부정보 표시를 펼치고 메타데이터 포함 체크박스를 선택 해제합니다.

  7. Save configuration(구성 저장)을 클릭합니다.

gcloud

gcloud compute firewall-rules update RULE_NAME \
    --enable-logging \
    --logging-metadata=LOGGING_METADATA

다음을 바꿉니다.

  • RULE_NAME: 방화벽 규칙의 이름입니다.
  • LOGGING_METADATA: 방화벽 정책 규칙 로깅의 방화벽 규칙 로그에 메타데이터 필드를 포함할지 여부를 지정합니다. 로깅이 사용 설정된 경우에만 이 필드를 구성할 수 있습니다. 값은 exclude-all 또는 include-all이어야 합니다. 기본적으로 메타데이터 필드가 포함됩니다.

자세한 내용은 SDK 참조 문서를 참조하세요.

Terraform

Terraform 리소스를 사용하여 로깅이 사용 설정된 방화벽 규칙을 만들 수 있습니다.

resource "google_compute_firewall" "rules" {
  project     = var.project_id # Replace this with your project ID in quotes
  name        = "my-firewall-rule"
  network     = "default"
  description = "Creates firewall rule targeting tagged instances"

  log_config {
    metadata = "INCLUDE_ALL_METADATA"
  }

  allow {
    protocol = "tcp"
    ports    = ["80", "8080", "1000-2000"]
  }
  target_tags = ["web"]
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참고하세요.

API

기존 방화벽 규칙에 대한 방화벽 정책 규칙 로깅을 사용 설정합니다.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME
{
  "name": "RULE_NAME",
  "logConfig": {
    "enable": true,
    "metadata": "LOGGING_METADATA"
  }
}

자리표시자를 유효한 값으로 바꿉니다.

  • PROJECT_ID: 방화벽 규칙이 있는 프로젝트의 ID입니다.
  • RULE_NAME: 방화벽 규칙의 이름입니다.
  • LOGGING_METADATA: 방화벽 정책 규칙 로깅의 방화벽 규칙 로그에 메타데이터 필드를 포함할지 여부를 지정합니다. 로깅이 사용 설정된 경우에만 이 필드를 구성할 수 있습니다. 값은 exclude-all 또는 include-all이어야 합니다. 기본적으로 메타데이터 필드가 포함됩니다.

자세한 내용은 firewalls.patch 메서드를 참조하세요.

방화벽 정책 규칙 로깅 사용 중지

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.

    방화벽 정책으로 이동

  2. 로그 열에서 각 방화벽 규칙에 대해 방화벽 로깅이 사용 설정 또는 사용 중지되었는지 확인합니다.

  3. 하나 이상의 방화벽 규칙에 로깅을 사용 중지하려면 업데이트할 각 규칙 옆에 있는 체크박스를 선택합니다.

  4. VPC 방화벽 규칙 작업 모음에서 로그 구성을 클릭합니다.

  5. 로그 구성 대화상자에서 끄기를 선택한 다음 구성 저장을 클릭합니다.

gcloud

gcloud compute firewall-rules update RULE_NAME \
    --no-enable-logging

RULE_NAME을 방화벽 규칙의 이름으로 바꿉니다.

API

기존 방화벽 규칙에 대한 방화벽 정책 규칙 로깅을 사용 중지합니다.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME
{
  "name": "RULE_NAME",
  "logConfig": {
    "enable": false
  }
}

다음을 바꿉니다.

  • PROJECT_ID: 방화벽 규칙이 있는 프로젝트의 ID입니다.
  • RULE_NAME: 방화벽 규칙의 이름입니다.

자세한 내용은 firewalls.patch 메서드를 참조하세요.

로그 보기

방화벽 규칙 로그는 VM 인스턴스 및 방화벽 규칙이 포함된 네트워크를 호스팅하는 프로젝트에 생성됩니다. 공유 VPC를 사용하면 VM 인스턴스가 서비스 프로젝트에 생성되지만 호스트 프로젝트에 있는 공유 VPC 네트워크를 사용합니다. 방화벽 규칙 로그는 호스트 프로젝트에 저장됩니다.

방화벽 규칙 로그를 보려면 Google Cloud 콘솔의 로그 탐색기 섹션을 사용하세요.

다음 쿼리는 특정 방화벽 이벤트를 검색하는 방법을 보여줍니다.

모든 방화벽 로그 보기

방화벽 로그를 보려면 옵션 1 또는 옵션 2를 따르세요.

옵션 1

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 리소스를 클릭합니다.

  3. 리소스 선택 목록에서 서브네트워크를 클릭한 후 적용을 클릭합니다.

  4. 로그 이름을 클릭한 후 목록에서 방화벽을 선택합니다.

  5. 적용을 클릭합니다.

옵션 2

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 쿼리를 클릭합니다.

  3. 쿼리 창에 쿼리 편집기 필드가 표시되지 않으면 쿼리 표시 전환을 클릭합니다.

  4. 쿼리 창의 쿼리 편집기 필드에 다음을 붙여넣습니다. PROJECT_ID를 프로젝트 ID로 바꿉니다.

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
    
  5. 쿼리 실행을 클릭합니다.

특정 서브넷 로그 보기

특정 서브넷의 방화벽 로그를 보려면 옵션 1 또는 옵션 2를 따르세요.

옵션 1

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 리소스를 클릭합니다.

  3. 리소스 선택 목록에서 서브네트워크를 클릭합니다.

  4. 로그를 보려는 서브네트워크를 선택하고 적용을 클릭합니다.

  5. 로그 이름을 클릭한 후 목록에서 방화벽을 선택합니다.

  6. 적용을 클릭합니다.

옵션 2

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 쿼리를 클릭합니다.

  3. 쿼리 창에 쿼리 편집기 필드가 표시되지 않으면 쿼리 표시 전환을 클릭합니다.

  4. 쿼리 창의 쿼리 편집기 필드에 다음을 붙여넣습니다. PROJECT_ID를 프로젝트 ID로 바꾸고 SUBNET_NAME을 서브네트워크로 바꿉니다.

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
    resource.labels.subnetwork_name="SUBNET_NAME"
    
  5. 쿼리 실행을 클릭합니다.

특정 VM의 로그 보기

특정 VM의 방화벽 로그를 보려면 옵션 1 또는 옵션 2를 따르세요.

옵션 1

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 리소스를 클릭합니다.

  3. 리소스 선택 목록에서 VM 인스턴스를 클릭합니다.

  4. 로그를 보려는 인스턴스를 선택하고 적용을 클릭합니다.

  5. 로그 이름을 클릭한 후 목록에서 방화벽을 선택합니다.

  6. 적용을 클릭합니다.

옵션 2

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 쿼리를 클릭합니다.

  3. 쿼리 창에 쿼리 편집기 필드가 표시되지 않으면 쿼리 표시 전환을 클릭합니다.

  4. 쿼리 창의 쿼리 편집기 필드에 다음을 붙여넣습니다. PROJECT_ID를 프로젝트 ID로 바꾸고 INSTANCE_ID를 로그를 보려는 VM의 ID로 바꿉니다.

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
    jsonPayload.instance.vm_name="INSTANCE_ID"
    
  5. 쿼리 실행을 클릭합니다.

특정 국가의 연결 로그 보기

특정 국가의 방화벽 로그를 보려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 쿼리를 클릭합니다.

  3. 쿼리 창에 쿼리 편집기 필드가 표시되지 않으면 쿼리 표시 전환을 클릭합니다.

  4. 쿼리 창의 쿼리 편집기 필드에 다음을 붙여넣습니다. PROJECT_ID를 프로젝트 ID로 바꾸고 COUNTRYISO 3166-1 alpha-3 코드로 바꿉니다.

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
    jsonPayload.remote_location.country=COUNTRY
    

로그 내보내기

방화벽 규칙 로그를 내보내려면 싱크 구성 및 관리를 참고하세요.

쿼리 예시를 사용하여 내보내는 로그의 범위를 좁힐 수 있습니다.

상호작용 테이블

  • VM 간 통신의 경우 각 방화벽 규칙에 따라 두 VM에서 로그 레코드가 생성될 수 있습니다.
  • 로깅된 연결에는 방화벽이 초기 패킷을 허용한 경우 양방향으로 흐르는 패킷이 포함됩니다.
  • 지정된 VM의 경우 수신 연결은 해당 VM에 구성된 방화벽 규칙과 비교되고 발신 연결은 해당 VM에 구성된 이그레스 방화벽 규칙과 비교됩니다.
  • '허용 및 로깅'이 있는 방화벽 규칙과 일치하는 허용된 연결은 한 번만 로깅됩니다. 연결이 지속되더라도 로그 항목은 5초마다 반복되지 않습니다.
  • '거부 및 로깅'이 있는 방화벽 규칙과 일치하는 거부된 연결은 관찰된 패킷이 거부된 연결에 있으면 5초마다 로그 항목을 반복합니다.
  • 이미 활성 상태인 TCP 또는 UDP 연결과 일치하는 방화벽 규칙에서 로깅을 사용 설정하면 새 로그 항목이 생성되지 않습니다. 로그 항목은 연결이 10분 이상 유휴 상태로 유지되고 동일한 연결에서 새 패킷이 전송되는 경우에만 생성됩니다. 유휴 기간이 10분 미만인 연속 트래픽의 경우 연결에 대해 하나의 로그 항목만 생성됩니다.

이 테이블은 단일 VM의 관점에서 방화벽 로깅 동작을 보여줍니다.

VM1에 패킷과 일치하는 인그레스 규칙 R1과 패킷과 일치하는 이그레스 규칙 R2도 있는 시나리오에서 방화벽 로깅 동작은 다음과 같습니다.

VM1에 패킷과 일치하는 인그레스 규칙 R1이 있음 VM1에 패킷과 일치하는 이그레스 규칙 R2가 있음 연결 방향 작업 로그
허용 + 로깅 허용 인그레스 허용 하나의 로그 항목:
처분=허용, 규칙=R1
거부
허용 + 로깅
거부 + 로깅
허용 허용 인그레스 허용 로깅 안함
거부
허용 + 로깅
거부 + 로깅
거부 + 로깅 해당 사항 없음 인그레스 거부 5초마다 하나의 로그 항목:
처분=거부, 규칙=R1
거부 해당 사항 없음 인그레스 거부 로깅 안함
허용 허용 + 로깅 이그레스 허용 하나의 로그 항목:
처분=허용, 규칙=R2
거부
허용 + 로깅
거부 + 로깅
허용 허용 이그레스 허용 로깅 안함
거부
허용 + 로깅
거부 + 로깅
해당 사항 없음 거부 + 로깅 이그레스 거부 5초마다 하나의 로그 항목:
처분=거부, 규칙=R2
해당 사항 없음 거부 이그레스 거부 로깅 안함

인그레스와 이그레스는 대칭적입니다.

다음은 방화벽 로그 시맨틱스에 대한 자세한 설명입니다.

  • 허용 + 로깅 (TCP 및 UDP에 로깅 지원)

    • 규칙이 적용되는 방향에서 연결이 시작되면 단일 로그 레코드가 생성됩니다.
    • 연결 추적으로 인해 응답 트래픽이 허용됩니다. 응답 트래픽에서는 해당 방향의 방화벽 규칙에 관계없이 로깅이 발생하지 않습니다.
    • 방화벽에서 연결이 만료되면(10분 동안 비활성 상태이거나 TCP RST가 수신되는 경우) 어느 방향으로든 다른 패킷이 로깅을 트리거할 수 있습니다.
    • 로깅은 5-튜플을 기반으로 합니다. TCP 플래그는 로깅 동작에 영향을 주지 않습니다.
  • 거부 + 로깅 (TCP 및 UDP에 로깅 지원)

    • 패킷이 중단됩니다(연결이 시작되지 않음).
    • 고유한 5-튜플에 해당하는 각 패킷은 실패한 연결 시도로 로깅됩니다.
    • 동일한 5-튜플은 패킷을 계속 수신하는 경우 5초마다 다시 로깅됩니다.

다음 단계