방화벽 규칙 로깅 사용

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

이 페이지에서는 Virtual Private Cloud 방화벽 규칙에 로깅을 사용 설정 및 중지하는 방법을 보여줍니다. 방화벽 정책 규칙 로깅에 대한 안내는 계층식 방화벽 정책 및 규칙 사용을 참조하세요.

이 페이지에서는 생성된 로그를 보는 방법도 보여줍니다. 로깅되는 내용, 로깅 예시, 로그 형식에 대한 자세한 내용은 방화벽 규칙 로깅을 참조하세요.

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

권한

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

작업 필요한 역할
방화벽 규칙 만들기, 삭제, 업데이트 프로젝트 소유자나 편집자 또는 보안 관리자
로그 보기 프로젝트 소유자, 편집자, 뷰어 또는 로그 뷰어
Logging IAM 역할 및 권한에 대한 세부정보는 Logging 액세스 제어 가이드를 참조하세요.

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

방화벽 규칙을 만들 때 방화벽 규칙 로깅을 사용하도록 선택할 수 있습니다. 자세한 내용은 방화벽 규칙 만들기를 참조하세요.

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

방화벽 규칙 로깅 사용 설정

콘솔

  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. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

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

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

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

  5. 적용을 클릭합니다.

다른 방법은 다음과 같습니다.

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

    로그 탐색기로 이동

  2. 쿼리를 클릭합니다.

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

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

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

특정 서브넷 로그 보기

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

    로그 탐색기로 이동

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

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

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

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

  6. 적용을 클릭합니다.

다른 방법은 다음과 같습니다.

  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에서 로그 보기

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

    로그 탐색기로 이동

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

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

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

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

  6. 적용을 클릭합니다.

다른 방법은 다음과 같습니다.

  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초마다 로그 항목을 반복합니다.

이 테이블은 단일 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초마다 다시 로깅됩니다.

문제해결

로그를 볼 수 없음

Google Cloud 콘솔의 로그 탐색기 섹션에서 방화벽 규칙 로그를 볼 수 없는 경우 다음을 확인하세요.

가능한 원인: 권한 부족

IAM 주 구성원에게 최소한 프로젝트의 로그 뷰어 역할이 있는지 프로젝트 소유자에게 확인을 요청합니다. 자세한 내용은 권한을 참조하세요.
가능한 원인: 이전 네트워크가 지원되지 않음
이전 네트워크에서 방화벽 규칙 로깅을 사용할 수 없습니다. VPC 네트워크만 지원됩니다.
가능한 원인: 올바른 프로젝트를 찾고 있는지 확인
방화벽 규칙 로그는 네트워크를 포함하는 프로젝트와 함께 저장되므로 올바른 프로젝트에서 로그를 찾고 있는지 확인해야 합니다. 공유 VPC를 사용하면 VM 인스턴스가 서비스 프로젝트에 생성되지만 호스트 프로젝트에 있는 공유 VPC 네트워크를 사용합니다. 공유 VPC 시나리오의 경우 방화벽 규칙 로그는 해당 호스트 프로젝트에 저장됩니다.

공유 VPC가 관련된 경우에 방화벽 규칙 로그를 보려면 호스트 프로젝트에 대한 적절한 권한이 필요합니다. VM 인스턴스 자체는 서비스 프로젝트에 있더라도 VM 인스턴스의 방화벽 규칙 로그는 호스트 프로젝트에 있습니다.

로그 항목 누락

가능한 원인: 예상 방화벽 규칙과 연결이 일치하지 않을 수 있음

예상 방화벽 규칙이 인스턴스에 적용 가능한 방화벽 목록에 있는지 확인하세요. 관련 인스턴스의 세부정보를 보려면 Google Cloud 콘솔을 사용하여 VM 인스턴스 세부정보 페이지의 네트워크 인터페이스 섹션에서 세부정보 보기 버튼을 클릭합니다. VM의 네트워크 인터페이스 세부정보 페이지의 방화벽 규칙 및 경로 세부정보 섹션에서 적용 가능한 방화벽 규칙을 검사합니다.

방화벽 규칙을 올바르게 만들었는지 확인하려면 VPC 방화벽 규칙을 검토합니다.

VM에서 tcpdump를 사용하여 전송하거나 수신하는 연결에 예상 방화벽과 일치하는 주소, 포트, 프로토콜이 있는지 확인할 수 있습니다.

가능한 원인: 방화벽 규칙 로깅이 사용 중지된 우선순위가 더 높은 규칙이 적용되었을 수 있음

방화벽 규칙은 우선순위에 따라 평가됩니다. VM 인스턴스의 관점에서 볼 때는 방화벽 규칙 1개만 트래픽에 적용됩니다.

적용 가능한 가장 높은 우선순위일 것이라고 예상한 규칙이 실제로는 가장 높은 우선순위 적용 규칙이 아닐 수 있습니다. 로깅이 사용 설정되지 않은 우선순위가 더 높은 규칙이 대신 적용되었을 수 있습니다.

문제해결을 위해 VM에 적용 가능한 모든 잠재적인 방화벽 규칙에 임시로 로깅을 사용 설정할 수 있습니다. 관련 VM의 세부정보를 보려면 Google Cloud 콘솔을 사용하여 VM 인스턴스 세부정보 페이지의 네트워크 인터페이스 섹션에서 세부정보 보기 버튼을 클릭합니다. VM의 네트워크 인터페이스 세부정보 페이지의 방화벽 규칙 및 경로 세부정보 섹션에서 적용 가능한 방화벽 규칙을 검사하고 해당 목록에서 커스텀 규칙을 식별합니다. 이러한 모든 커스텀 방화벽 규칙에 임시로 로깅을 사용 설정합니다.

로깅이 사용 설정되면 적용 가능한 규칙을 식별할 수 있습니다. 식별 후에는 실제로 필요하지 않은 모든 규칙에 로깅을 사용 중지해야 합니다.

일부 로그 항목의 누락된 메타데이터

가능한 원인: 구성 적용 지연

방화벽 로깅을 사용 설정한 방화벽 규칙을 업데이트하는 경우 규칙의 업데이트된 구성요소와 일치하는 트래픽을 기록하는 데 필요한 변경사항이 Google Cloud에 적용되기까지 몇 분 정도 걸릴 수 있습니다.

다음 단계