방화벽 규칙 로깅을 사용하면 방화벽 규칙의 영향을 감사, 확인, 분석할 수 있습니다. 예를 들어 트래픽을 거부하도록 설계된 방화벽 규칙이 의도한 대로 작동하는지 확인할 수 있습니다. 방화벽 규칙 로깅은 특정 방화벽 규칙의 영향을 받는 연결 수를 확인해야 하는 경우에도 유용합니다.
연결을 로깅해야 하는 각 방화벽 규칙에 방화벽 규칙 로깅을 개별적으로 사용 설정합니다. 방화벽 규칙 로깅은 방화벽 규칙의 작업(allow
또는 deny
) 또는 방향(인그레스 또는 이그레스)에 관계없이 모든 방화벽 규칙에 대한 옵션입니다.
방화벽 규칙 로깅은 Compute Engine 가상 머신(VM) 인스턴스에서 주고받는 트래픽을 로깅합니다. 여기에는 Google Kubernetes Engine(GKE) 클러스터 및 App Engine 가변형 환경 인스턴스와 같이 Compute Engine VM에서 빌드된 Google Cloud 제품이 포함됩니다.
방화벽 규칙에 로깅을 사용 설정하면 Google Cloud는 규칙이 트래픽을 허용하거나 거부할 때마다 연결 레코드라고 하는 항목을 만듭니다. 이러한 기록은 Cloud Logging에서 볼 수 있으며 Cloud Logging 내보내기가 지원되는 모든 대상으로 로그를 내보낼 수 있습니다.
각 연결 레코드에는 소스 및 대상 IP 주소, 프로토콜 및 포트, 날짜 및 시간, 트래픽에 적용된 방화벽에 대한 참조가 포함됩니다.
방화벽 규칙 로깅은 VPC 방화벽 규칙과 계층적 방화벽 정책 모두에 사용할 수 있습니다.
로그를 보는 방법에 대한 자세한 내용은 방화벽 규칙 로깅 사용을 참조하세요.
사양
방화벽 규칙 로깅의 사양은 다음과 같습니다.
- Virtual Private Cloud(VPC) 네트워크의 규칙에만 방화벽 규칙 로깅을 사용 설정할 수 있습니다. 기존 네트워크는 지원되지 않습니다.
- 방화벽 규칙 로깅은 TCP 및 UDP 연결만 기록합니다. 다른 프로토콜에 적용 가능한 방화벽 규칙을 만들 수 있지만 이 연결을 로깅할 수는 없습니다. 다른 프로토콜도 로깅하려면 패킷 미러링을 사용하는 것이 좋습니다.
- 묵시적 인그레스 거부 및 묵시적 이그레스 허용 규칙에는 방화벽 규칙 로깅을 사용 설정할 수 없습니다.
- 로그 항목은 VM의 관점에서 작성됩니다. 로그 항목은 방화벽 규칙에 로깅이 사용 설정되고 방화벽 규칙이 VM을 오가는 트래픽에 적용될 때만 생성됩니다. 항목은 최상의 방식으로 연결 로깅 한도에 따라 생성됩니다.
- 특정 간격으로 로깅할 수 있는 연결 수는 머신 유형을 기반으로 합니다.
- 방화벽 규칙의 변경사항은 VPC 감사 로그에서 확인할 수 있습니다.
로깅 예시
로그 항목은 로깅이 사용 설정된 방화벽 규칙이 트래픽에 적용될 때마다 생성됩니다. 지정된 패킷 흐름에는 로그 항목이 총 2개 이상 생성될 수 있지만 지정된 VM의 관점에서 볼 때 VM에 적용되는 방화벽 규칙에 로깅이 사용 설정되면 로그 항목이 최대 1개만 생성될 수 있습니다.
다음 예시에서는 방화벽 로그가 실행되는 방식을 보여줍니다.
이그레스 거부 예시
예를 들면 다음과 같습니다.
example-proj
프로젝트의example-net
VPC 네트워크에서 VM 인스턴스 사이의 트래픽이 고려됩니다.- 두 개의 VM 인스턴스는 다음과 같습니다.
west-subnet
(us-west1
리전)에서 IP 주소가10.10.0.99
인us-west1-a
영역의 VM1east-subnet
(us-east1
리전)에서 IP 주소가10.20.0.99
인us-east1-b
영역의 VM2
- 규칙 A: 이그레스 거부 방화벽 규칙은 네트워크의 모든 인스턴스 대상인
10.20.0.99
(VM2) 대상을 포함하며 TCP 포트 80에 적용됩니다.- 이 규칙은 로깅이 사용 설정되어 있습니다.
- 규칙 B: 인그레스 허용 방화벽 규칙은 네트워크의 모든 인스턴스 대상인
10.10.0.99
(VM1) 소스를 포함하며 TCP 포트 80에 적용됩니다.- 이 규칙에도 로깅이 사용 설정되어 있습니다.
다음 gcloud
명령어를 사용하여 방화벽 규칙을 만들 수 있습니다.
규칙 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
규칙 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이 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=6 |
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-b |
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.99
인us-west1-a
영역의 VM1east-subnet
(us-east1
리전)에서 IP 주소가10.20.0.99
인us-east1-b
영역의 VM2
- 규칙 A: 이그레스 허용 방화벽 규칙은 네트워크의 모든 인스턴스 대상인
10.20.0.99
(VM2) 대상을 포함하며 TCP 포트 80에 적용됩니다.- 이 규칙은 로깅이 사용 설정되어 있습니다.
- 규칙 B: 인그레스 허용 방화벽 규칙은 네트워크의 모든 인스턴스 대상인
10.10.0.99
(VM1) 소스를 포함하며 TCP 포트 80에 적용됩니다.- 이 규칙에도 로깅이 사용 설정되어 있습니다.
다음 gcloud
명령어를 사용하여 방화벽 규칙을 만들 수 있습니다.
규칙 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
규칙 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이 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=6 |
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-b |
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=6 |
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-b |
vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=east-subnet |
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=west-subnet |
remote_location | 정보가 없습니다. 이 필드는 대상이 VPC 네트워크 외부에 있는 경우에만 사용됩니다. |
인터넷 인그레스 예시
예를 들면 다음과 같습니다.
example-net
VPC 네트워크 외부의 시스템에서 이 네트워크의 VM 인스턴스로 이동하는 트래픽이 고려됩니다. 네트워크는example-proj
프로젝트에 있습니다.- 인터넷 시스템의 IP 주소는
203.0.113.114
입니다. west-subnet
(us-west1
리전)에서 IP 주소가10.10.0.99
인us-west1-a
영역의 VM1- 규칙 C: 인그레스 허용 방화벽 규칙은 네트워크의 모든 인스턴스 대상인 모든 IP 주소(
0.0.0.0/0
) 소스를 포함하며 TCP 포트 80에 적용됩니다.- 이 규칙은 로깅이 사용 설정되어 있습니다.
- 규칙 D: 이그레스 거부 방화벽 규칙은 네트워크의 모든 인스턴스 대상인 IP 주소(
0.0.0.0/0
) 대상을 포함하며 모든 프로토콜에 적용됩니다.- 이 규칙에도 로깅이 사용 설정되어 있습니다.
다음 gcloud
명령어를 사용하여 방화벽 규칙을 만들 수 있습니다.
규칙 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
규칙 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
IP 주소가 203.0.113.114
인 시스템이 TCP 포트 80에서 VM1로 연결을 시도한다고 가정합니다. 다음과 같은 결과가 발생합니다.
- VM1이
203.0.113.114
의 트래픽을 허용하면 VM1의 관점에서 규칙 C의 로그 항목이 생성됩니다. - Google Cloud 방화벽 규칙은 스테이트풀(Stateful)이므로 규칙 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=6 |
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 인스턴스를 오가는 트래픽에 방화벽 규칙이 적용되는 경우 사양에 따라 로깅이 사용 설정된 각 방화벽 규칙에 대해 Cloud Logging에 로그 항목이 생성됩니다. 로그 기록은 Logging LogEntry의 JSON 페이로드 필드에 포함됩니다.
로그 레코드에는 모든 로그 레코드의 핵심 필드인 기본 필드와 추가 정보를 추가하는 메타데이터 필드가 있습니다. 메타데이터 필드를 포함할지 여부를 제어할 수 있습니다. 이러한 필드를 생략하면 스토리지 비용을 절약할 수 있습니다.
일부 로그 필드는 필드이기도 한 값을 지원합니다. 이러한 필드에는 지정된 필드에 2개 이상의 데이터가 포함될 수 있습니다. 예를 들어 connection
필드는 IpConnection
형식이며 소스 및 대상 IP 주소, 포트, 프로토콜이 단일 필드에 포함됩니다. 이러한 필드는 다음 표에 설명되어 있습니다.
필드 | 설명 | 필드 유형: 기본 또는 선택적 메타데이터 |
---|---|---|
connection | IpConnection 이 연결의 소스 및 대상 IP 주소, 소스 및 대상 포트, IP 프로토콜을 설명하는 5-튜플입니다. |
기본 |
disposition | 문자열은 연결이 ALLOWED 인지 DENIED 인지를 나타냅니다. |
기본 |
rule_details | RuleDetails 이 연결에 적용된 규칙의 세부정보입니다. |
|
rule_details.reference 필드 |
기본 | |
기타 규칙 세부정보 필드 | 메타데이터 | |
instance | InstanceDetails VM 인스턴스 세부정보입니다. 공유 VPC 구성에서 project_id 는 서비스 프로젝트의 프로젝트 ID에 해당합니다. |
메타데이터 |
vpc | VpcDetails VPC 네트워크 세부정보입니다. 공유 VPC 구성에서 project_id 는 호스트 프로젝트의 프로젝트 ID에 해당합니다. |
메타데이터 |
remote_instance | InstanceDetails 연결의 원격 엔드포인트가 Compute Engine에 위치한 VM인 경우 VM 인스턴스 세부정보가 이 필드에 입력됩니다. |
메타데이터 |
remote_vpc | VpcDetails 연결의 원격 엔드포인트가 VPC 네트워크에 있는 VM인 경우 이 필드는 네트워크 세부정보로 채워집니다. |
메타데이터 |
remote_location | GeographicDetails 연결의 원격 엔드포인트가 VPC 네트워크에 외부에 있는 경우 사용 가능한 위치 메타데이터가 이 필드에 입력됩니다. |
메타데이터 |
IpConnection
필드 | 유형 | 설명 |
---|---|---|
src_ip | string | 소스 IP 주소입니다. 소스가 Compute Engine VM인 경우 src_ip 는 기본 내부 IP 주소이거나 VM 네트워크 인터페이스의 별칭 IP 범위에 있는 주소입니다. 외부 IP 주소는 표시되지 않습니다. VM이 패킷 헤더에서 IP 주소를 확인할 때 VM에서 TCP 덤프를 실행한 것과 동일하게 로깅에 VM의 IP가 표시됩니다. |
src_port | integer | 소스 포트 |
dest_ip | string | 대상 IP 주소입니다. 대상이 Google Cloud VM인 경우 dest_ip 는 기본 내부 IP 주소이거나 VM 네트워크 인터페이스의 별칭 IP 범위에 있는 주소입니다. 외부 IP 주소는 연결에 사용된 경우에도 표시되지 않습니다. |
dest_port | integer | 대상 포트 |
protocol | integer | 연결의 IP 프로토콜 |
RuleDetails
필드 | 유형 | 설명 |
---|---|---|
reference | string | 방화벽 규칙에 대한 참조입니다. 형식:"network:{network name}/firewall:{firewall_name}" |
priority | integer | 방화벽 규칙의 우선순위입니다. |
action | string | ALLOW 또는 DENY |
source_range[ ] | 문자열 | 방화벽 규칙이 적용되는 소스 범위 목록입니다. |
destination_range[ ] | 문자열 | 방화벽 규칙이 적용되는 대상 범위 목록입니다. |
ip_port_info[ ] | IpPortDetails | 규칙의 IP 프로토콜 및 적용 가능한 포트 범위 목록입니다. |
direction | string | 방화벽 규칙이 적용되는 방향입니다(인그레스 또는 이그레스). |
source_tag[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 소스 태그 목록입니다. |
target_tag[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 대상 태그 목록입니다. |
source_service_account[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 소스 서비스 계정 목록입니다. |
target_service_account[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 대상 서비스 계정 목록입니다. |
source_region_code[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 소스 국가 코드 목록입니다. |
destination_region_code[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 대상 국가 코드 목록입니다. |
source_fqdn[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 소스 도메인 이름 목록입니다. |
destination_fqdn[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 대상 도메인 이름 목록입니다. |
source_threat_intelligence[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 소스 위협 인텔리전스 목록 이름의 목록입니다. |
destination_threat_intelligence[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 대상 위협 인텔리전스 목록 이름의 목록입니다. |
source_address_groups[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 소스 주소 그룹의 목록입니다. |
destination_address_groups[ ] | 문자열 | 방화벽 규칙이 적용되는 모든 대상 주소 그룹의 목록입니다. |
IpPortDetails
필드 | 유형 | 설명 |
---|---|---|
ip_protocol | string | 방화벽 규칙이 적용되는 IP 프로토콜입니다. 모든 프로토콜에 적용되면 'ALL'입니다. |
port_range[ ] | 문자열 | 규칙에 적용 가능한 포트 범위 목록입니다(예: 8080-9090 ). |
InstanceDetails
필드 | 유형 | 설명 |
---|---|---|
project_id | 문자열 | VM이 포함된 프로젝트의 ID |
vm_name | 문자열 | VM의 인스턴스 이름 |
region | string | VM의 리전 |
zone | string | VM의 영역 |
VpcDetails
필드 | 유형 | 설명 |
---|---|---|
project_id | string | 네트워크가 포함된 프로젝트의 ID |
vpc_name | string | VM이 작동 중인 네트워크 |
subnetwork_name | string | VM이 작동 중인 서브넷 |
GeographicDetails
필드 | 유형 | 설명 |
---|---|---|
continent | 문자열 | 외부 엔드포인트의 대륙 |
country | string | 외부 엔드포인트의 국가 |
region | 문자열 | 외부 엔드포인트의 리전 |
city | 문자열 | 외부 엔드포인트의 도시 |
다음 단계
- 로깅을 설정하고 로그를 보려면 방화벽 규칙 로깅 사용을 참조하세요.
- 방화벽 규칙이 사용되는 방식에 대한 통계는 방화벽 통계를 참조하세요.
- 로그 데이터 및 이벤트를 저장, 검색, 분석 모니터링하려면 Cloud Logging을 참조하세요.
- 로그 항목을 라우팅하려면 싱크 구성 및 관리를 참조하세요.