設定網際網路存取權與防火牆規則

本文說明如何完成下列工作:

  • 設定 Dataflow 虛擬機器 (VM) 執行個體的網際網路存取權
  • 建立網路標記
  • 為與 Dataflow 工作相關聯的網路定義防火牆規則

本文假設您具備 Google Cloud 網路的基本知識。 如要為 Dataflow 工作定義網路,請參閱「指定網路和子網路」。如要進一步瞭解如何排解網路問題,請參閱「排解 Dataflow 網路問題」。

存取 Google Cloud Dataflow API

Dataflow 工作站虛擬機器 (VM) 必須連線至Google Cloud API 和服務。這組相依端點可能會隨時間變更,但都支援 VPC Service Controls。 Google Cloud 如要設定 Google Cloud API 的存取權,請使用下列其中一種方法:

根據預設,防火牆規則和 DNS 設定會允許存取Google Cloud API。不過,您可能正在主動限制對部分 API 的存取權,例如使用 VPC Service Controls。 Google Cloud 在這種情況下,請至少提供 restricted.googleapis.com 的存取權。如果您使用 Private Service Connect,請提供 vpc-sc bundle 的存取權。提供對限制較少的網域 (例如 private.googleapis.com) 的存取權,也能提供必要功能。

如要透過特定網域存取必要的 Google Cloud API,您的環境必須符合下列規定:

  • 防火牆規則必須允許輸出至所選網域下的所有位址範圍。

  • DNS 必須解析 *.googleapis.com 至您選擇的網域。

舉例來說,如果防火牆規則將輸出內容限制在 restricted.googleapis.com 位址範圍內,則 *.googleapis.com 必須解析為該範圍內的位址。詳情請參閱「為 googleapis.com 設定 DNS」。

同樣地,如果您使用 Private Service Connect,則必須為googleapis.com預設網域建立 DNS 記錄,確保至少能存取vpc-sc 套裝組合中的所有服務。

Dataflow 的網際網路存取權

視使用案例而定,您的 VM 可能也需要存取Google Cloud外部的資源。請使用下列其中一種方法,為 Dataflow 設定網際網路存取權:

  • 設定工作站 VM 的外部 IP 位址,使其符合網際網路存取需求

  • 設定 NAT 解決方案,例如 Cloud NAT。這個選項適用於執行需要存取網際網路的作業,以存取 Google Cloud 外部的 API 和服務。舉例來說,Python SDK 工作可能需要存取 Python Package Index (PyPI),才能下載管道依附元件。在此情況下,您必須為工作站 VM 設定外部 IP 位址,或是使用 Cloud NAT。您也可以在提交工作時提供 Python 管道依附元件。舉例來說,您可以使用自訂容器提供 Python 管線依附元件,這樣就不需要在執行階段存取 PyPI。

    詳情請參閱 Apache Beam 說明文件中的「管理 Python 管道依附元件」。

關閉外部 IP 位址

根據預設,Dataflow 會為工作站指派外部和內部 IP 位址。關閉外部 IP 位址後,Dataflow 工作只能在下列位置存取資源:

即使沒有外部 IP 位址,您仍然可以執行管理和監控工作。您可以透過上列選項使用 SSH 存取工作站。不過,管道無法存取網際網路,網際網路主機也無法存取您的 Dataflow 工作站。

不使用外部 IP 位址,可為資料處理基礎架構提供更完善的保護。您還可以減少計入Google Cloud專案配額的外部 IP 位址數量。

如果關閉外部 IP 位址,Dataflow 工作就無法存取 Google Cloud 需要網際網路連線的外部 API 和服務。

如要關閉外部 IP 位址,請採取下列任一步驟:

Java

  1. 為網路或子網路啟用私人 Google 存取權
  2. 在 Dataflow 工作的參數中,指定 --usePublicIps=false--network=NETWORK-NAME--subnetwork=SUBNETWORK-NAME

    視您的選擇而定,更換下列其中一個項目:

    • NETWORK-NAME:Compute Engine 網路的名稱
    • SUBNETWORK-NAME:Compute Engine 子網路的名稱

Python

  1. 如要暫存所有 Python 套件依附元件,請按照 Apache Beam 管道依附元件操作說明操作。
  2. 為網路或子網路啟用私人 Google 存取權
  3. 在 Dataflow 工作的參數中,指定 --no_use_public_ips--network=NETWORK--subnetwork=SUBNETWORK
  4. 視您的選擇而定,更換下列其中一個項目:

    • NETWORK-NAME:Compute Engine 網路的名稱
    • SUBNETWORK-NAME:Compute Engine 子網路的名稱

Go

  1. 為網路或子網路啟用私人 Google 存取權
  2. 在 Dataflow 工作的參數中,指定 --no_use_public_ips--network=NETWORK--subnetwork=SUBNETWORK
  3. 視您的選擇而定,更換下列其中一個項目:

    • NETWORK-NAME:Compute Engine 網路的名稱
    • SUBNETWORK-NAME:Compute Engine 子網路的名稱

Dataflow 的網路標記

網路標記是可附加至 Compute Engine VM 的文字屬性。網路標記可讓您建立適用於特定 VM 執行個體的 VPC 網路防火牆規則和特定自訂靜態路徑。Dataflow 支援將網路標記新增至執行特定 Dataflow 工作的全體工作站 VM。

即使您未使用網路參數,Dataflow 仍會為建立的每個工作站 VM 新增預設網路標記 dataflow

啟用網路標記

只有在執行 Dataflow 工作範本來建立工作時,才能指定網路標記。工作開始後,您無法在工作中新增更多網路標記。如要為工作套用其他網路標記,請使用必要的網路標記重新建立工作範本。

無論您是在 Java 或 Python 中執行,請在管道程式碼中加入下列內容:

--experiments=use_network_tags=TAG-NAME

TAG-NAME 換成您的標記名稱。如要新增多個標記,請以半形分號 (;) 分隔每個標記,如下列格式所示:TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;...

為 Flex 範本 VM 啟用網路標記

使用 Flex 範本時,如要為 Dataflow 工作站 VM 啟用網路標記,請使用 --additional-experiments 選項,如下列範例所示:

--additional-experiments=use_network_tags=TAG-NAME

如要為工作站 VM 和啟動器 VM 啟用網路標記,請使用下列兩個選項:

--additional-experiments=use_network_tags=TAG-NAME
--additional-experiments=use_network_tags_for_flex_templates=TAG-NAME

TAG-NAME 換成您的標記名稱。如要新增多個標記,請以半形分號 (;) 分隔每個標記,如下列格式所示:TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;...

啟用網路標記後,系統會剖析標記並附加至 VM。

請參閱網路標記適用的限制

Dataflow 的防火牆規則

防火牆規則可讓您允許或拒絕 VM 的往來流量。如果 Dataflow 工作使用 Dataflow ShuffleStreaming Engine,您只需要確保防火牆規則允許存取 Google Cloud API。否則,您必須設定額外的防火牆規則,讓 Dataflow VM 能夠在 TCP 通訊埠 12345 上傳送及接收串流工作網路流量,並在 TCP 通訊埠 12346 上傳送及接收批次工作網路流量。專案擁有者、編輯者或安全管理員必須在 Dataflow VM 使用的虛擬私有雲網路中,建立必要的防火牆規則。

設定 Dataflow 的防火牆規則前,請先閱讀下列文件:

為 Dataflow 建立防火牆規則時,請指定 Dataflow 網路標記。否則,防火牆規則會套用至虛擬私有雲網路中的所有 VM。

如果適用,系統會先評估階層式防火牆政策,這些規則會優先於虛擬私有雲防火牆規則。如果 Dataflow 工作位於資料夾或機構的專案中,且該專案使用階層式防火牆政策,您必須具備 compute.orgFirewallPolicyAdmin 角色,才能修改政策。

執行管道程式碼時,如果沒有建立自訂網路標記,Dataflow VM 會使用預設的 dataflow 標記。如果沒有自訂網路標記,請使用預設的 dataflow 標記建立防火牆規則。

如果您在執行管道程式碼時建立自訂網路標記,Dataflow VM 就會使用這些標記。使用自訂標記建立防火牆規則。

有些虛擬私有雲網路 (例如自動建立的 default 網路) 包含符合 Dataflow 防火牆需求的 default-allow-internal 規則。

防火牆輸入規則範例

輸入防火牆規則允許 Dataflow VM 彼此接收封包。您一律必須建立允許輸入的防火牆規則,否則即使輸出規則允許這類流量,系統仍會封鎖流量。

在下列範例中,系統會為 Dataflow 建立防火牆輸入規則,其中所有工作站 VM 都有預設網路標記 dataflow。專案擁有者、編輯者或安全管理員可利用下列 gcloud 指令建立輸入允許規則,允許系統在 TCP 通訊埠 1234512346 上,將流量從網路標記為 dataflow 的 VM 傳送到具有相同標記的其他 VM:

gcloud compute firewall-rules create FIREWALL_RULE_NAME_INGRESS \
    --action=allow \
    --direction=ingress \
    --network=NETWORK  \
    --target-tags=CUSTOM_TAG \
    --source-tags=CUSTOM_TAG \
    --priority=PRIORITY_NUM \
    --rules tcp:12345-12346

更改下列內容:

  • FIREWALL_RULE_NAME_INGRESS:防火牆規則的名稱

  • NETWORK:工作站 VM 使用的網路名稱

  • CUSTOM_TAG:以半形逗號分隔的網路標記清單

    以下是使用網路標記的相關規範:

    • 如果省略 --target-tags,規則會套用到虛擬私有雲網路中的所有 VM。

    • 如果省略 --source-tags 和所有其他來源規格,系統會允許來自任何來源的流量。

    • 如果您未指定自訂網路標記,且希望規則專用於 Dataflow VM,請使用 dataflow 做為網路標記。

    • 如果您已指定自訂網路標記,且希望規則僅適用於 Dataflow VM,請使用自訂網路標記。

  • PRIORITY_NUM:防火牆規則的優先順序

    數字越小,優先順序越高,0 的優先順序最高。

防火牆輸出規則範例

輸出防火牆規則允許 Dataflow VM 彼此傳送封包。如果您已建立任何輸出拒絕防火牆規則,可能需要在虛擬私有雲網路中建立自訂輸出允許防火牆規則。

在本範例中,系統會為 Dataflow 建立防火牆輸出規則,其中所有工作站 VM 都有 dataflow 的預設網路標記。專案擁有者、編輯者或安全管理員可使用下列 gcloud 指令建立輸出允許規則,允許系統將網路標記為 dataflow 的 VM 上,TCP 通訊埠 1234512346 的流量傳送到具有相同標記的其他 VM:

gcloud compute firewall-rules create FIREWALL_RULE_NAME_EGRESS \
    --network=NETWORK \
    --action=allow \
    --direction=egress \
    --target-tags=CUSTOM_TAG \
    --source-tags=CUSTOM_TAG \
    --destination-ranges=DESTINATION-RANGES\
    --priority=PRIORITY_NUM  \
    --rules tcp:12345-12346

更改下列內容:

  • FIREWALL_RULE_NAME_EGRESS:防火牆規則的名稱

  • NETWORK:工作站 VM 使用的網路名稱

  • CUSTOM_TAG:以半形逗號分隔的網路標記清單

    以下是使用網路標記的相關規範:

    • 如果省略 --target-tags,規則會套用到虛擬私有雲網路中的所有 VM。

    • 如果省略 --source-tags 和所有其他來源規格,系統會允許來自任何來源的流量。

    • 如果您未指定自訂網路標記,且希望規則專用於 Dataflow VM,請使用 dataflow 做為網路標記。

    • 如果您已指定自訂網路標記,且希望規則僅適用於 Dataflow VM,請使用自訂網路標記。

  • DESTINATION-RANGES:以半形逗號分隔的 CIDR 清單

    納入所選子網路的主要 IP 位址範圍。

  • PRIORITY_NUM:防火牆規則的優先順序

    數字越小,優先順序越高,0 的優先順序最高。

如要瞭解 Dataflow 使用的特定 TCP 通訊埠,請查看專案容器資訊清單。容器資訊清單會明確指定通訊埠,以便將主機通訊埠對應至容器。

透過 SSH 存取工作站 VM

Dataflow 不需要使用 SSH,不過 SSH 在疑難排解時相當實用。

如果工作站 VM 具有外部 IP 位址,您可以透過 Google Cloud 控制台或使用 Google Cloud CLI 連線至 VM。如要使用 SSH 連線,您必須設有防火牆規則,至少針對執行 gcloud 的系統,或執行您用於存取Google Cloud 控制台的網路瀏覽器的系統,允許來自這些系統的 IP 位址透過 TCP 通訊埠 22 的連入連線。

如要查看網路設定和活動,請開啟其中一個工作站的 SSH 工作階段,然後執行 iproute2。詳情請參閱 Linux Foundation Wiki 中的iproute2 頁面

如需連線至僅有內部 IP 位址的工作站 VM,請參閱「為僅限內部 VM 選擇連線選項」。

後續步驟