您可以根據防火牆規則記錄,進一步稽核、驗證及分析防火牆規則的成效。舉例來說,您可以判斷用來拒絕流量的防火牆規則是否正常運作。需要瞭解特定防火牆規則影響的連線數量時,這項功能也能派上用場。
您必須為需要記錄連線的每項防火牆規則,個別啟用防火牆規則記錄。無論規則的動作 (allow
或 deny
) 或方向 (傳入或傳出) 為何,您都可以為任何防火牆規則啟用防火牆規則記錄功能。
防火牆規則記錄功能會記錄 Compute Engine 虛擬機器 (VM) 執行個體的往來流量。包括以 Compute Engine VM 為基礎建構的產品,例如 Google Kubernetes Engine (GKE) 叢集和 App Engine 彈性環境執行個體。Google Cloud
啟用防火牆規則記錄後,每當規則允許或拒絕流量時, Google Cloud 就會建立稱為「連線記錄」的項目。您可以在 Cloud Logging 中查看這些記錄,並將記錄檔匯出至 Cloud Logging 匯出功能支援的任何目的地。
每項連線記錄都會包含來源和目標 IP 位址、通訊協定和通訊埠、日期和時間,以及流量所套用防火牆規則的參照。
防火牆規則記錄功能適用於虛擬私有雲防火牆規則和階層式防火牆政策。
如要瞭解如何查看記錄,請參閱「使用防火牆規則記錄」一文。
規格
防火牆規則記錄適用的規範如下:
- 您只能在虛擬私有雲 (VPC) 網路中啟用防火牆規則記錄。 不支援舊版網路。
- 防火牆規則記錄只會記錄 TCP 和 UDP 連線。您可以建立其他通訊協定適用的防火牆規則,但無法記錄這類連線。如要記錄其他通訊協定,請考慮使用封包鏡像。
- 您不能針對默示拒絕輸入規則和默示允許輸出規則啟用防火牆規則記錄。
- 記錄項目是以 VM 的角度寫成。只有在防火牆規則已啟用記錄,且該規則套用至 VM 傳送或接收的流量時,系統才會建立記錄項目。系統會盡可能根據連線記錄限制建立記錄項目。
- 特定間隔內可記錄的連線數取決於機器類型。
- 您可以在 VPC 稽核記錄中查看防火牆規則的變更。
記錄範例
每當啟用記錄功能的防火牆規則套用至流量時,系統就會產生記錄項目。特定封包的傳輸流程可能會產生不只一個記錄項目。不過如果從特定 VM 的角度來看,當套用至該 VM 的防火牆規則已啟用記錄時,系統最多只會產生一個記錄項目。
您可以透過以下範例瞭解防火牆記錄檔的運作方式。
拒絕輸出的範例
在這個例子中:
- 會考慮
example-proj
專案中example-net
虛擬私有雲網路中 VM 執行個體之間的流量。 - 這兩個 VM 執行個體是:
us-west1-a
區域中的 VM1,其 IP 位址10.10.0.99
在west-subnet
(us-west1
地區)。us-east1-b
區域中的 VM2,其 IP 位址10.20.0.99
在east-subnet
(us-east1
地區)。
- 規則 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 的記錄項目。
以下範例會產生防火牆記錄檔記錄。
欄位 | 值 |
---|---|
連結 | 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 |
執行個體 | project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
虛擬私人雲端 | 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 | 沒有資訊。只有在目的地位於虛擬私有雲網路之外時,才會使用這個欄位。 |
同時允許輸出和輸入的範例
在這個例子中:
- 會考慮
example-proj
專案中example-net
虛擬私有雲網路中 VM 執行個體之間的流量。 - 這兩個 VM 執行個體是:
us-west1-a
區域中的 VM1,其 IP 位址10.10.0.99
在west-subnet
(us-west1
地區)。us-east1-b
區域中的 VM2,其 IP 位址10.20.0.99
在east-subnet
(us-east1
地區)。
- 規則 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 回報的防火牆記錄檔記錄。
欄位 | 值 |
---|---|
連結 | 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 |
執行個體 | project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
虛擬私人雲端 | 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 | 沒有資訊。只有在目的地位於虛擬私有雲網路之外時,才會使用這個欄位。 |
在下列範例中,系統會產生由 VM2 回報的防火牆記錄檔記錄。
欄位 | 值 |
---|---|
連結 | 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 |
執行個體 | project_id="example-proj" instance_name=VM2 region=us-east1 zone=us-east1-b |
虛擬私人雲端 | 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 | 沒有資訊。只有在目的地位於虛擬私有雲網路之外時,才會使用這個欄位。 |
網際網路輸入範例
在這個例子中:
- 會考慮
example-net
虛擬私有雲網路外的系統傳至該網路內之 VM 執行個體的流量。該網路屬於example-proj
專案。 - 網際網路系統的 IP 位址為
203.0.113.114
。 us-west1-a
區域中的 VM1,其 IP 位址10.10.0.99
在west-subnet
(us-west1
地區)。- 規則 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
的系統嘗試連線至 VM1 的 TCP 通訊埠 80。會發生以下情況:
- VM1 接收來自
203.0.113.114
的流量時,系統會以 VM1 的角度產生規則 C 的記錄項目。 - 儘管有規則 D,但Google Cloud 防火牆規則有狀態,因此系統會允許 VM1 回覆傳入要求。只要系統允許傳入要求,任何種類的輸出規則都無法封鎖已建立的回應。
- 由於規則 D 不會套用,在連線作業未涉及這項規則的情況下,系統就不會產生規則 D 的記錄項目。
以下範例會產生防火牆記錄檔記錄。
欄位 | 值 |
---|---|
連結 | 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 |
執行個體 | project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
虛擬私人雲端 | project_id="example-proj" vpc_name=example-net subnetwork_name=west-subnet |
remote_location | 洲別 國家/地區 區域 城市 |
防火牆記錄檔格式
如果防火牆規則套用至 VM 執行個體的流量,且已啟用記錄功能,系統就會在 Cloud Logging 中為該規則建立記錄項目 (須符合規格)。記錄記錄會納入 Logging LogEntry 的 JSON 酬載欄位。
記錄包含做為每個記錄核心欄位的幾個基礎欄位,以及用來新增其他資訊的中繼資料欄位。您可以控管是否要加入中繼資料欄位。如果省略這些欄位,即可節省儲存空間費用。
部分記錄檔欄位支援的值也是欄位。這些欄位可能包含多項資料。舉例來說,connection
欄位採用的格式是 IpConnection
,也就是一個欄位同時包含來源和目的地 IP 位址及通訊埠,外加通訊協定等資料。下表提供這些欄位的說明。
欄位 | 說明 | 欄位類型:基本或選用中繼資料 |
---|---|---|
連結 | IpConnection 5 個元組,說明這個連線的來源和目的地 IP 位址、來源和目的地通訊埠,以及 IP 通訊協定。 |
基本 |
disposition | 字串 表示連線是 ALLOWED 或 DENIED 。 |
基本 |
rule_details | RuleDetails 套用至這個連線的規則詳細資料。 |
|
rule_details.reference 欄位 |
基本 | |
其他規則詳細資料欄位 | 中繼資料 | |
執行個體 | InstanceDetails VM 執行個體詳細資料。在共用虛擬私有雲設定中, project_id 會對應至服務專案。 |
中繼資料 |
虛擬私人雲端 | VpcDetails 虛擬私有雲網路詳細資料。在共用虛擬私有雲設定中, project_id 會對應至主專案。 |
中繼資料 |
remote_instance | InstanceDetails 如果連線的遠端端點是位於 Compute Engine 的 VM,這個欄位會填入 VM 執行個體詳細資料。 |
中繼資料 |
remote_vpc | VpcDetails 如果連線的遠端端點是位於虛擬私有雲網路中的 VM,這個欄位會填入網路詳細資料。 |
中繼資料 |
remote_location | GeographicDetails 如果連線的遠端端點位於虛擬私有雲網路外部,這個欄位會填入可用的位置中繼資料。 |
中繼資料 |
IpConnection
欄位 | 類型 | 說明 |
---|---|---|
src_ip | 字串 | 來源 IP 位址。如果來源是 Compute Engine VM,src_ip 必須是主要內部 IP 位址,或是 VM 網路介面別名 IP 範圍內的位址。不會顯示外部 IP 位址。記錄檔會顯示 VM 的 IP 位址,因為 VM 會在封包標頭中看到該位址,這與您在 VM 上執行 TCP 傾印時相同。 |
src_port | 整數 | 來源通訊埠 |
dest_ip | 字串 | 目標 IP 位址。如果目的地是 Google Cloud VM,dest_ip 則可以是主要內部 IP 位址,也可以是 VM 網路介面別名 IP 範圍內的位址。即使連線時使用外部 IP 位址,系統也不會顯示。 |
dest_port | 整數 | 目的地通訊埠 |
protocol | 整數 | 連線的 IP 通訊協定 |
RuleDetails
欄位 | 類型 | 說明 |
---|---|---|
reference | 字串 | 防火牆規則的參照;格式:"network:{network name}/firewall:{firewall_name}" |
優先順序 | 整數 | 防火牆規則的優先順序。 |
action | 字串 | ALLOW (允許) 或 DENY (拒絕) |
source_range[ ] | 字串 | 套用防火牆規則的來源範圍清單。 |
destination_range[ ] | 字串 | 防火牆規則適用的目的地範圍清單。 |
ip_port_info[ ] | IpPortDetails | 規則的 IP 通訊協定和適用通訊埠範圍清單。 |
方向 | 字串 | 防火牆規則適用的方向 (傳入或傳出)。 |
source_tag[ ] | 字串 | 套用防火牆規則的所有來源標記清單。 |
target_tag[ ] | 字串 | 套用防火牆規則的所有目標標記清單。 |
source_service_account[ ] | 字串 | 套用防火牆規則的所有來源服務帳戶清單。 |
target_service_account[ ] | 字串 | 套用防火牆規則的所有目標服務帳戶清單。 |
source_region_code[ ] | 字串 | 防火牆規則適用的所有來源國家/地區代碼清單。 |
destination_region_code[ ] | 字串 | 防火牆規則適用的所有目的地國家/地區代碼清單。 |
source_fqdn[ ] | 字串 | 防火牆規則適用的所有來源網域名稱清單。 |
destination_fqdn[ ] | 字串 | 防火牆規則適用的所有目的地網域名稱清單。 |
source_threat_intelligence[ ] | 字串 | 防火牆規則適用的所有來源 Google Threat Intelligence 清單名稱。 |
destination_threat_intelligence[ ] | 字串 | 防火牆規則適用的所有目的地 Google 威脅情報清單名稱。 |
source_address_groups[ ] | 字串 | 防火牆規則適用的所有來源位址群組清單。 |
destination_address_groups[ ] | 字串 | 防火牆規則適用的所有目的地地址群組清單。 |
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 | 字串 | 外部端點所在的城市 |
後續步驟
- 如要設定記錄及查看記錄檔,請參閱「使用防火牆規則記錄」。
- 如要取得防火牆規則使用情形的深入分析資訊,請參閱「防火牆深入分析」。
- 如要儲存、搜尋、分析及監控記錄資料和事件,並接收相關快訊,請參閱 Cloud Logging。
- 如要轉送記錄項目,請參閱「設定及管理接收器」。