방화벽 규칙 로깅 개요

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

연결을 로깅해야 하는 각 방화벽 규칙에 방화벽 규칙 로깅을 개별적으로 사용 설정합니다. 방화벽 규칙 로깅은 방화벽 규칙의 작업(허용 또는 거부) 또는 방향(수신 또는 송신)에 관계없이 모든 방화벽 규칙에 대한 옵션입니다.

방화벽 규칙에 로깅을 사용 설정하면 Google Cloud Platform(GCP)은 규칙이 트래픽을 허용하거나 거부할 때마다 연결 레코드라고 하는 항목을 만듭니다. 이러한 연결 레코드를 분석하기 위해 Stackdriver Logging, Cloud Pub/SubBigQuery로 내보낼 수 있습니다.

각 연결 레코드에는 소스 및 대상 IP 주소, 프로토콜 및 포트, 날짜 및 시간, 트래픽에 적용된 방화벽에 대한 참조가 포함됩니다.

사양

방화벽 규칙 로깅의 사양은 다음과 같습니다.

연결 로깅 한도

VM 인스턴스당 로깅할 수 있는 최대 연결 수는 머신 유형에 따라 다릅니다. 연결 로깅 한도는 5초 간격으로 로깅할 수 있는 최대 연결 수로 표시됩니다.

인스턴스 머신 유형 5초 간격으로 로깅되는 최대 연결 개수
f1-micro 연결 100개
g1-small 연결 250개
vCPU가 1~8개인 머신 유형 vCPU당 연결 500개
vCPU가 9개 이상인 머신 유형 연결 4,000(500×8)개

로깅 예시

로그 항목은 로깅이 사용 설정된 방화벽 규칙이 트래픽에 적용될 때마다 생성됩니다. 지정된 패킷 흐름에는 로그 항목이 총 2개 이상 생성될 수 있지만 지정된 VM의 관점에서 볼 때 VM에 적용되는 방화벽 규칙에 로깅이 사용 설정되면 로그 항목이 최대 1개만 생성될 수 있습니다.

다음 예에서는 방화벽 로그가 실행되는 방식을 보여줍니다.

송신 거부 예시

이 예에서는 다음과 같이 정의됩니다.

  • example-proj 프로젝트의 example-net VPC 네트워크에서 VM 인스턴스 사이의 트래픽이 고려됩니다.
  • 두 개의 VM 인스턴스는 다음과 같습니다.
    • west-subnet(us-west1 지역)에서 IP 주소가 10.10.0.99us-west1-a 영역의 VM1
    • east-subnet(us-east1 지역)에서 IP 주소가 10.20.0.99us-east1-a 영역의 VM2
  • 규칙 A: 송신 거부 방화벽 규칙은 네트워크의 모든 인스턴스 대상인 10.20.0.99(VM2) 대상을 포함하며 TCP 포트 80에 적용됩니다.
    • 이 규칙에 로깅이 사용 설정됩니다.
  • 규칙 B: 수신 허용 방화벽 규칙은 네트워크의 모든 인스턴스 대상인 10.10.0.99(VM1) 소스를 포함하며 TCP 포트 80에 적용됩니다.
    • 이 규칙에도 로깅이 사용 설정됩니다.

다음 gcloud 명령어를 사용하여 방화벽 규칙을 만들 수 있습니다.

  1. 규칙 A: TCP 80에 대한 송신 거부 규칙이며 모든 인스턴스, 10.20.0.99 대상에 적용 가능합니다.

    gcloud compute firewall-rules create rule-a \
        --network example-net \
        --action deny \
        --direction egress \
        --rules tcp:80 \
        --destination-ranges 10.20.0.99/32 \
        --priority 10 \
        --enable-logging
    
  2. 규칙 B: TCP 80에 대한 수신 허용 규칙이며 모든 인스턴스, 10.10.0.99 소스에 적용 가능합니다.

    gcloud compute firewall-rules create rule-b \
        --network example-net \
        --action allow \
        --direction ingress \
        --rules tcp:80 \
        --source-ranges 10.10.0.99/32 \
        --priority 10 \
        --enable-logging
    
vm1-vm2 연결(확대하려면 클릭)
vm1-vm2 연결(확대하려면 클릭)

VM1이 TCP 포트 80의 VM2로 연결을 시도한다고 가정합니다. 다음 방화벽 규칙이 로깅됩니다.

  • VM1이 10.20.0.99(VM2)로 연결을 시도하면 VM1의 관점에서 규칙 A의 로그 항목이 생성됩니다.
  • 규칙 A가 실제로 트래픽을 차단하여 규칙 B는 고려되지 않으므로 VM2의 관점에서 규칙 B의 로그 항목은 없습니다.

이 예에서는 다음 방화벽 로그 레코드를 생성합니다.

필드
connection src_ip=10.10.0.99, src_port=[EPHEMERAL_PORT], dest_ip=10.20.0.99, dest_port=80, protocol=tcp
disposition DENIED
rule_details Reference = "network:example-net/firewall:rule-a"
priority = 10
action = DENY
destination_range = 10.20.0.99/32
ip_port_info = tcp:80
direction = egress
instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_location 정보가 없습니다. 이 필드는 대상이 VPC 네트워크 외부에 있는 경우에만 사용됩니다.

송신 허용, 수신 허용 예시

이 예에서는 다음과 같이 정의됩니다.

  • example-proj 프로젝트의 example-net VPC 네트워크에서 VM 인스턴스 사이의 트래픽이 고려됩니다.
  • 두 개의 VM 인스턴스는 다음과 같습니다.
    • west-subnet(us-west1 지역)에서 IP 주소가 10.10.0.99us-west1-a 영역의 VM1
    • east-subnet(us-east1 지역)에서 IP 주소가 10.20.0.99us-east1-a 영역의 VM2
  • 규칙 A: 송신 허용 방화벽 규칙은 네트워크의 모든 인스턴스 대상인 10.20.0.99(VM2) 대상을 포함하며 TCP 포트 80에 적용됩니다.
    • 이 규칙에 로깅이 사용 설정됩니다.
  • 규칙 B: 수신 허용 방화벽 규칙은 네트워크의 모든 인스턴스 대상인 10.10.0.99(VM1) 소스를 포함하며 TCP 포트 80에 적용됩니다.
    • 이 규칙에도 로깅이 사용 설정됩니다.

다음 gcloud 명령어를 사용하여 두 개의 방화벽 규칙을 만들 수 있습니다.

  1. 규칙 A: TCP 80에 대한 송신 허용 규칙이며 모든 인스턴스, 10.20.0.99(VM2) 대상에 적용 가능합니다.

    gcloud compute firewall-rules create rule-a \
        --network example-net \
        --action allow \
        --direction egress \
        --rules tcp:80 \
        --destination-ranges 10.20.0.99/32 \
        --priority 10 \
        --enable-logging
    
  2. 규칙 B: TCP 80에 대한 수신 허용 규칙이며 모든 인스턴스, 10.10.0.99(VM1) 소스에 적용 가능합니다.

    gcloud compute firewall-rules create rule-b \
        --network example-net \
        --action allow \
        --direction ingress \
        --rules tcp:80 \
        --source-ranges 10.10.0.99/32 \
        --priority 10 \
        --enable-logging
    
vm1-vm2 연결(확대하려면 클릭)
vm1-vm2 연결(확대하려면 클릭)

VM1이 TCP 포트 80의 VM2로 연결을 시도한다고 가정합니다. 다음 방화벽 규칙이 로깅됩니다.

  • VM1이 10.20.0.99(VM2)에 연결되면 VM1의 관점에서 규칙 A의 로그 항목이 생성됩니다.
  • VM2가 10.10.0.99(VM1)의 수신 연결을 허용하면 VM2의 관점에서 규칙 B의 로그 항목이 생성됩니다.

VM1에서 보고된 다음 방화벽 로그 레코드가 생성됩니다.

필드
connection src_ip=10.10.0.99, src_port=[EPHEMERAL_PORT], dest_ip=10.20.0.99, dest_port=80, protocol=tcp
disposition ALLOWED
rule_details Reference = "network:example-net/firewall:rule-a"
Priority = 10
Action = ALLOW
Destination_range = 10.20.0.99/32
Ip_port_info = tcp:80
Direction = egress
instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_location 정보가 없습니다. 이 필드는 대상이 VPC 네트워크 외부에 있는 경우에만 사용됩니다.

VM2에서 보고된 다음 방화벽 로그 레코드가 생성됩니다.

필드
connection src_ip=10.10.0.99, src_port=[EPHEMERAL_PORT], dest_ip=10.20.0.99, dest_port=80, protocol=tcp
disposition ALLOWED
rule_details Reference = "network:example-net/firewall:rule-b"
Priority = 10
Action = ALLOW
Source_range = 10.10.0.99/32
Ip_port_info = tcp:80
Direction = ingress
instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-a
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=subnet-east
remote_instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=subnet-west
remote_location 정보가 없습니다. 이 필드는 대상이 VPC 네트워크 외부에 있는 경우에만 사용됩니다.

인터넷 수신 예시

이 예에서는 다음과 같이 정의됩니다.

  • example-net VPC 네트워크 외부의 시스템에서 이 네트워크의 VM 인스턴스로 이동하는 트래픽이 고려됩니다. 네트워크는 example-proj 프로젝트에 있습니다.
  • 인터넷 시스템의 IP 주소는 203.0.113.114입니다.
  • us-west1-a 영역의 VM1은 west-subnet(us-west1 지역)에서 IP 주소가 10.10.0.99입니다.
  • 규칙 C: 수신 허용 방화벽 규칙은 네트워크의 모든 인스턴스 대상인 모든 IP 주소(0.0.0.0/0) 소스를 포함하며 TCP 포트 80에 적용됩니다.
    • 이 규칙에 로깅이 사용 설정됩니다.
  • 규칙 D: 송신 거부 방화벽 규칙은 네트워크의 모든 인스턴스 대상인 모든 IP 주소(0.0.0.0/0) 대상을 포함하며 모든 프로토콜에 적용됩니다.
    • 이 규칙에도 로깅이 사용 설정됩니다.

다음 gcloud 명령어를 사용하여 방화벽 규칙을 만들 수 있습니다.

  1. 규칙 C: TCP 80에 대한 수신 허용 규칙이며 모든 인스턴스, 모든 소스에 적용 가능합니다.

    gcloud compute firewall-rules create rule-c \
        --network example-net \
        --action allow \
        --direction ingress \
        --rules tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --priority 10 \
        --enable-logging
    
  2. 규칙 D: 모든 프로토콜에 대한 송신 거부 규칙이며 모든 인스턴스, 모든 대상에 적용 가능합니다.

    gcloud compute firewall-rules create rule-d \
        --network example-net \
        --action deny \
        --direction egress \
        --rules all \
        --destination-ranges 0.0.0.0/0 \
        --priority 10 \
        --enable-logging
    
인터넷-VM 연결(확대하려면 클릭)
인터넷-VM 연결(확대하려면 클릭)

IP 주소가 203.0.113.114인 시스템이 TCP 포트 80의 VM1로 연결을 시도한다고 가정합니다. 다음과 같은 결과가 발생합니다.

  • VM1이 203.0.113.114의 트래픽을 허용하면 VM1의 관점에서 규칙 C의 로그 항목이 생성됩니다.
  • GCP 방화벽 규칙은 상태를 저장할 수 있으므로 규칙 D에도 불구하고 VM1은 수신 요청에 응답하도록 허용됩니다. 수신 요청이 허용되는 경우 설정된 응답은 모든 종류의 송신 규칙으로 차단할 수 없습니다.
  • 규칙 D가 적용되지 않아 고려되지 않으므로 규칙 D의 로그 항목은 없습니다.

이 예에서는 다음 방화벽 로그 레코드를 생성합니다.

필드
connection src_ip=203.0.113.114, src_port=[EPHEMERAL_PORT], dest_ip=10.10.0.99, dest_port=80, protocol=tcp
disposition ALLOWED
rule_details Reference = "network:my-vpc/firewall:rule-c"
Priority = 10
Action = ALLOW
Source_range = 0.0.0.0/0
Ip_port_info = tcp:80
Direction = ingress
instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_location continent
country
region
city

방화벽 로그 형식

방화벽 규칙이 VM 인스턴스를 오가는 트래픽에 적용되는 경우 사양에 따라 로그 항목은 로깅이 사용 설정된 각 방화벽 규칙의 Stackdriver Logging에 생성됩니다.

방화벽 규칙은 다음 표에 표시된 형식을 따릅니다.

Stackdriver LogEntry JSON 페이로드 필드에는 다음 메시지 형식이 포함됩니다.

필드 설명
connection IpConnection
이 연결의 소스 및 대상 IP 주소, 소스 및 대상 포트, IP 프로토콜을 설명하는 5-튜플입니다.
disposition 문자열
연결이 ALLOWED인지 DENIED인지를 나타냅니다.
rule_details RuleDetails
이 연결에 적용된 규칙의 세부정보입니다.
instance InstanceDetails
VM 인스턴스 세부정보입니다. 공유 VPC 구성에서 project_id는 서비스 프로젝트의 프로젝트 ID에 해당합니다.
vpc VpcDetails
VPC 네트워크 세부정보입니다. 공유 VPC 구성에서 project_id는 호스트 프로젝트의 프로젝트 ID에 해당합니다.
remote_instance InstanceDetails
연결의 원격 엔드포인트가 Google Compute Engine에 있는 VM인 경우 VM 인스턴스 세부정보가 이 필드에 입력됩니다.
remote_vpc VpcDetails
연결의 원격 엔드포인트가 Google VPC에 있는 VM인 경우 VPC 네트워크 세부정보가 이 필드에 입력됩니다.
remote_location GeographicDetails
연결의 원격 엔드포인트가 Google VPC 외부에 있는 경우 사용 가능한 위치 메타데이터가 이 필드에 입력됩니다.

IpConnection

필드 유형 설명
src_ip 문자열 소스 IP 주소입니다. 소스가 Compute Engine VM이면 이 필드 값은 인터페이스의 내부 IP 주소이며 외부 공용 IP 주소는 표시되지 않습니다. VM이 패킷 헤더에서 IP 주소를 확인할 때 VM에서 TCP 덤프를 실행한 것과 동일하게 로깅에 VM의 IP가 표시됩니다.
src_port 정수 소스 포트
dest_ip 문자열 대상 IP 주소입니다. 대상이 GCP VM인 경우 이 필드 값은 인터페이스의 내부 비공개 IP 주소입니다. 외부 공용 IP 주소는 연결에 사용되더라도 표시되지 않습니다.
dest_port 정수 대상 포트
protocol 정수 연결의 IP 프로토콜

RuleDetails

필드 유형 설명
reference 문자열 방화벽 규칙에 대한 참조입니다. 형식: 'network:{network name}/firewall:{firewall_name}'
priority 정수 방화벽 규칙의 우선순위입니다.
action 문자열 ALLOW 또는 DENY
source_range[] 문자열 방화벽 규칙이 적용되는 소스 범위 목록입니다.
destination_range[] 문자열 방화벽 규칙이 적용되는 대상 범위 목록입니다.
ip_port_info[] IpPortDetails 규칙의 ip 프로토콜 및 적용 가능한 포트 범위 목록입니다.
direction 문자열 방화벽이 적용되는 방향(INGRESS 또는 EGRESS)입니다.
source_tag[] 문자열 방화벽 규칙이 적용되는 모든 소스 태그 목록입니다.
target_tag[] 문자열 방화벽 규칙이 적용되는 모든 대상 태그 목록입니다.
source_service_account[] 문자열 방화벽 규칙이 적용되는 모든 소스 서비스 계정 목록입니다.
target_service_account[] 문자열 방화벽 규칙이 적용되는 모든 대상 서비스 계정 목록입니다.

IpPortDetails

필드 유형 설명
ip_protocol 문자열 방화벽 규칙이 적용되는 IP 프로토콜로 모든 프로토콜에 적용되면 'ALL'입니다.
port_range[] 문자열 규칙에 적용 가능한 포트 범위 목록입니다. 예: "8080-9090"

InstanceDetails

필드 유형 설명
project_id 문자열 VM이 포함된 프로젝트의 ID
vm_name 문자열 VM의 인스턴스 이름
region 문자열 VM의 리전
zone 문자열 VM의 영역

VpcDetails

필드 유형 설명
project_id 문자열 네트워크가 포함된 프로젝트의 ID
vpc_name 문자열 VM이 작동 중인 네트워크
subnetwork_name 문자열 VM이 작동 중인 서브넷

GeographicDetails

필드 유형 설명
continent 문자열 외부 엔드포인트의 대륙
country 문자열 외부 엔드포인트의 국가
region 문자열 외부 엔드포인트의 리전
city 문자열 외부 엔드포인트의 도시

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...