為充分利用這項內容,您應熟悉下列概念:
- 基本網路
- Google Cloud 虛擬私有雲 (VPC) 網路
為了保護服務和應用程式的網路流量,許多機構會使用 Google Cloud 上的私人網路,並搭配邊界控管機制,以防資料外洩。您的私人網路可能具有下列屬性:
- 您可能會在一個或多個虛擬私人雲端網路中,放置多個 VM 等資源。
- 這些 VM 可能屬於多個不同的專案,且可能會透過共用虛擬私有雲連結在一起。
- 您可能會使用 Cloud VPN 或 Cloud Interconnect,將內部部署工作負載或其他雲端的工作負載連結至這個環境。
- 您可能已啟用 VPC Service Controls 範圍,以降低資料外洩的風險。
- 您可能會有多個私人網路,每個網路對應至不同的環境,例如一個用於實際工作環境、一個用於測試環境,以及一個用於開發環境。
與 VM 不同,Cloud Run 資源預設不會與任何特定的 VPC 網路建立關聯。本頁面說明如何將 Cloud Run 資源納入私人網路。
無伺服器網路說明
如要瞭解各種常見的企業設定,以便在公用和私人網路中使用,請參閱無伺服器網路說明文件。
本入門指南將介紹以下從基本到進階的 Cloud Run 情境:
- 安全地部署使用自訂網域的「Hello, World!」應用程式
- 開發企業應用程式和微服務
- 公開或私密存取資料庫和檔案系統
- 與 SaaS 供應商聯絡
- 套用安全性控管
請參閱對應的 Terraform 模組清單。
接收私人網路的要求
如要接收私人網路的要求,您必須根據下列條件進行設定:
- 要求來源。
- Cloud Run 資源是否只允許私人網路的請求。
舉例來說,接收來自 VPC 網路的請求可能需要不同的設定,而接收來自內部資源和其他雲端的請求則不然。
接收來自其他 Cloud Run 資源或 App Engine 的要求
如果您的目的地 Cloud Run 資源接收來自其他 Cloud Run 資源或 App Engine 的流量,且使用「內部」或「內部和負載平衡」的入站設定,則流量必須使用 VPC 網路才能視為內部流量。
如要接收來自其他 Cloud Run 資源或 App Engine 的請求,請執行下列步驟:
設定來源資源,使用直接虛擬私有雲輸出或連接器。
請使用下列任一選項,確保 Cloud Run 的流量會透過虛擬私有雲網路傳送:
- 設定來源資源,透過虛擬私有雲網路傳送所有流量,並在與直接虛擬私有雲出口或連接器相關聯的子網路上啟用私人 Google 存取權。
- 設定 Private Service Connect 或內部應用程式負載平衡器,以便轉送至目的地 Cloud Run 資源。在這種設定下,您可以使用內部 IP 位址存取 Cloud Run,因此要求會透過 VPC 網路進行路由。
- 在與來源資源相關聯的子網路上啟用私人 Google 存取權,並設定 DNS,將
run.app
網址解析為private.googleapis.com
(199.36.153.8/30
) 或restricted.googleapis.com
(199.36.153.4/30
) 範圍。系統會將傳送至這些範圍的要求,透過 VPC 網路轉送。
接收來自虛擬私有雲網路的要求
根據預設,只有具備外部 IP 位址或使用 Cloud NAT 的資源,才能直接存取網際網路和Google Cloud 服務,例如 Pub/Sub 和 Cloud Run。如要為其他資源啟用前往 Cloud Run 的流量路徑,有幾種方法可供選擇:
- 最直接的做法是在代管資源的子網路上啟用私人 Google 存取權。啟用私人 Google 存取權後,子網路上的資源就能透過預設
run.app
URL 存取 Cloud Run 資源。從虛擬私人雲端網路傳送至 Cloud Run 的流量會留在 Google 網路中。在這種情況下,傳送至 Cloud Run 資源的要求 IP 範圍為0.0.0.0/32
。也就是說,在要求記錄項目中,HttpRequest 的remoteIp
屬性會是0.0.0.0
。 - 如果您需要透過 VPC 網路中的內部 IP 位址存取 Cloud Run 資源 (以及其他 Google API),請考慮建立 Private Service Connect 端點,並為
run.app
設定私人 DNS 區域。有了這項設定,虛擬私有雲網路中的資源就能透過 Private Service Connect 端點 IP 位址,存取預設run.app
URL 中的 Cloud Run 資源。 - 如果您需要負載平衡功能和控制項,請考慮使用內部應用程式負載平衡器。採用這種做法後,VPC 網路中的資源會使用與內部應用程式負載平衡器相關聯的網址存取 Cloud Run 資源。
- 如果您想將服務公開給內部用戶端做為代管服務,並且能夠控管哪些專案可以存取該服務,您可以使用內部應用程式負載平衡器代管服務,並透過 Private Service Connect 發布服務。需要使用這項服務的專案可以透過 Private Service Connect 端點或 Private Service Connect 後端存取這項服務。
系統會使用要求經過的相同路徑傳回回應。
共用虛擬私有雲的特別注意事項
當您使用 internal
設定搭配 Cloud Run 入站控制項,強制要求所有流量都必須來自私人網路時,共用虛擬私有雲流量只會在下列情況下視為「內部」:
Cloud Run 資源在共用虛擬私有雲主專案中執行。
共用虛擬私有雲入口:Cloud Run 資源已連結至共用虛擬私有雲網路。在這種情況下,請注意下列注意事項:
只有已設定直接虛擬私有雲輸出或已設定無伺服器虛擬私有雲存取連接器,以便將流量傳送至共用虛擬私有雲網路的服務修訂版本,才會接受來自該共用虛擬私有雲網路的流量。
要求會根據流量方向使用不同的路徑。從 Cloud Run 傳送至共用虛擬私有雲網路的要求,會透過直接虛擬私有雲輸出或連接器進行路由。不過,從共用虛擬私人雲端網路傳送至 Cloud Run 的要求會使用標準的入口路徑。
如要將 Cloud Run 資源從 Shared VPC 網路中分離,請重新部署時不要使用虛擬私有雲網路存取權,或是將資源設為將流量傳送至其他虛擬私有雲網路。
您使用內部應用程式負載平衡器來代理流量。
您已將共用虛擬私有雲主機和所有服務專案放入同一個 VPC Service Controls 範圍內。如要設定 VPC Service Controls,請參閱「使用 VPC Service Controls (VPC SC)」。
專案以外的其他虛擬私有雲網路的特別注意事項
使用 internal
設定搭配 Cloud Run 入站控制項,強制要求所有流量都必須來自私人網路,如果來自專案以外其他虛擬私有雲網路的流量並非來自下列情況:
- 設定 VPC Service Controls 允許將
run.googleapis.com
設為受限制服務的流量,並為來源子網路啟用私人 Google 存取權。 - 您的 Cloud Run 資源會使用 Private Service Connect 發布為代管服務 (需要內部應用程式負載平衡器),並從其他虛擬私有雲網路存取。
與專案以外的 VPC 網路對等互連,不會讓流量視為「內部」。
接收其他 Google Cloud 服務的要求
來自 Pub/Sub 等 Google Cloud 服務的 Cloud Run 要求會留在 Google 網路內。
如果您已將 Cloud Run 輸入控制項設為僅允許「內部」流量,請特別注意以下幾點:
- 由 BigQuery、Cloud Scheduler、Cloud Tasks、Dialogflow CX、Eventarc、Pub/Sub、綜合監控器 (包括正常運作時間檢查) 和同一個專案或虛擬私有雲 Service Control 範圍內的 Workflow 發送的要求,會視為「內部」。
- 從相同專案或虛擬私有雲 Service Controls 範圍內傳送的 Cloud Run 或 App Engine 要求,都需要額外設定,才能視為「內部」。詳情請參閱「接收來自其他 Cloud Run 服務或 App Engine 的要求」一節。
- 如果您選擇的 Google Cloud 服務無法存取 ingress 已設為
internal
的 Cloud Run 資源,請注意,許多服務都支援 Cloud Run 驗證,例如 Pub/Sub (同時支援internal
和驗證)、API Gateway 和 Dialogflow CX (同時支援internal
和驗證)。視安全性需求而定,只要目的地 Cloud Run 資源要求驗證即可,不必使用「內部」入口。 - 來自未在前述提及的 Google Cloud 服務的請求不會視為內部請求,且無法由將入口設為
internal
或internal-and-cloud-load-balancing
的 Cloud Run 資源接收。
接收來自內部部署資源或其他雲端的請求
您可以透過多種方式,從內部資源和其他雲端私密接收要求。
- 基本設定:如要讓來自內部部署資源和其他雲端的請求穿越私人網路,請設定內部部署主機的私人 Google 存取權。
- 透過內部 IP 位址存取 Cloud Run 資源:如要使用內部 IP 位址呼叫 Cloud Run 資源,請建立Private Service Connect 端點來存取 Google API,為
run.app
設定私人 DNS 區域,並設定內部網路以存取端點。有了這項設定,地端主機就能透過 Private Service Connect 端點 IP 位址,存取位於預設run.app
網址的 Cloud Run 資源。 - 提供負載平衡功能:如果您需要負載平衡功能和控制項,請使用內部應用程式負載平衡器。如要瞭解如何從內部網路存取應用程式負載平衡器,請參閱「使用 Cloud VPN 和 Cloud Interconnect」。
- 跨管理界限:如果您想將服務以代管服務的形式公開給內部用戶端,並且能夠控管哪些專案可以存取服務,您可以使用 Private Service Connect 發布服務 (需要內部應用程式負載平衡器)。如要從內部部署主機存取服務,請建立 Private Service Connect 端點,並設定內部部署網路以存取端點。詳情請參閱「透過混合式網路存取端點」。或者,您也可以搭配負載平衡器使用 Private Service Connect 後端。如要瞭解如何從內部網路存取負載平衡器,請參閱您使用的負載平衡器的說明文件。例如,如要瞭解如何存取內部應用程式負載平衡器,請參閱「使用 Cloud VPN 和 Cloud Interconnect」。
要求要求來自私人網路的要求
如要防止來自外部來源的傳入流量 (ingress),請指定限制性的輸入設定。最嚴格的入站設定為 internal
。如果將 ingress 設為 internal
,服務只會允許來自專案、專案連結的共用虛擬私有雲網路,以及 VPC Service Controls 範圍的請求。這項設定會因要求來源而有限制。如要瞭解這些限制條件和如何克服這些限制,請參閱「接收私人網路的要求」一節。
您可以為每個 Cloud Run 資源指定輸入設定,也可以強制機構中的所有 Cloud Run 資源使用您偏好的輸入設定。
- 如何為每個 Cloud Run 資源指定輸入設定:請參閱「設定輸入」。
- 如要為專案、資料夾或機構中的所有 Cloud Run 資源強制執行特定入口設定:請設定
run.allowedIngress
機構政策限制。如要瞭解如何操作,請參閱「自訂清單限制條件政策」。
將要求傳送至私人網路
如果 Cloud Run 資源需要存取私人網路上的資源,您可以為網路中的私人要求設定路徑。設定取決於要求的最終目的地。
傳送要求至虛擬私有雲網路
如要向虛擬私有雲網路傳送要求,您必須設定直接虛擬私有雲輸出或無伺服器虛擬私有雲存取連接器。比較直接虛擬私有雲輸出和虛擬私有雲連接器。請參閱定價,瞭解相關費用。
設定直接虛擬私有雲輸出或連接器時,系統會預設套用下列考量事項:
所有 DNS 查詢都會傳送至為與 VPC 網路傳出設定相關聯的 VPC 網路所設定的 DNS 伺服器。
系統會使用直接虛擬私有雲輸出或連接器,將內部 IP 位址的要求路由至虛擬私有雲網路。除非您已設定其他出站設定,否則系統會繼續將傳送至公開目的地的請求直接轉送至網際網路。
如果要求是透過直接虛擬私有雲輸出或連接器轉送,回應會透過要求經過的路徑傳回。從您的 VPC 網路傳送至 Cloud Run 的請求會使用其他技術啟用,且不會透過直接虛擬私有雲輸出或連接器轉送,而對這些請求的回應會透過相同路徑傳回。如要進一步瞭解如何從虛擬私有雲網路將要求傳送至 Cloud Run,請參閱「接收來自虛擬私有雲網路的要求」。
將要求傳送至專案以外的 VPC 網路
如要向專案以外的 VPC 網路傳送要求,請按照下列步驟操作:
- 共用虛擬私有雲使用者請參閱「連線至共用虛擬私有雲網路」。
- 針對其他虛擬私有雲網路,請設定直接虛擬私有雲端出口或連接器,以便連線至專案中的虛擬私有雲端網路。
- 對等互連的 VPC 網路:如要傳送至與使用 VPC 網路出站的 VPC 對等互連,不需要額外設定。不過,託管虛擬私有雲網路出口的子網路中,VM 必須能夠連線至目標虛擬私有雲網路。
- 其他虛擬私人雲端網路:如果是專案以外的虛擬私人雲端網路,且不屬於同一個共用虛擬私人雲端環境,或未與專案虛擬私人雲端網路對等互連,請在設定虛擬私人雲端網路出口後,再設定私人服務連線。
將要求傳送至其他 Cloud Run 資源和 Google Cloud 服務
從一個 Cloud Run 資源傳送至另一個 Cloud Run 資源或其他Google Cloud 服務的要求會保留在 Google 的內部網路中,並受 VPC Service Controls 的管轄。
針對具有限制性入站設定的 Cloud Run 資源要求,您必須進行額外設定。請參閱「接收來自其他 Cloud Run 資源或 App Engine 的要求」。
將要求傳送至內部部署資源和其他雲端
如要透過私人網路將要求傳送至內部部署資源和其他雲端,您必須執行下列操作:
- 請確認虛擬私有雲網路已設定為將流量私下轉至目的地,例如透過 VPN 通道。
- 將服務設為將要求傳送至 VPC 網路。
- 要求所有要求都傳送至您的 VPC 網路。
要求所有要求都會傳送至您的虛擬私有雲網路
如要要求 Cloud Run 資源的所有要求都傳送至虛擬私有雲網路,請指定 all-traffic
虛擬私有雲網路輸出設定。您可以為每個使用虛擬私有雲網路輸出功能的 Cloud Run 資源指定輸出設定,也可以強制為專案、資料夾或機構中的所有 Cloud Run 資源使用偏好的輸出設定。
這項功能在以下情況下相當實用:
- 您想為 Cloud Run 資源設定靜態外部 IP 位址。
- 您想為 Cloud Run 資源的所有輸出流量套用防火牆規則。
- 您想透過私人網路將要求傳送至內部部署資源和其他雲端。
如果 Cloud Run 資源向虛擬私有雲網路外部的最終目的地提出要求,要求所有要求都必須傳送至虛擬私有雲網路,就會增加已設定的無伺服器虛擬私有雲存取連接器的頻寬使用量,並可能因此增加費用。連接器會在流量增加時自動擴充,但不會在流量減少時縮減。請參閱定價,瞭解相關費用。
- 如要指定個別 Cloud Run 資源的出口設定:請參閱「控管出口服務流量」。
- 如要為專案、資料夾或機構中的所有 Cloud Run 資源強制執行特定外出設定:請設定
run.allowedVPCEgress
機構政策限制。如要瞭解如何操作,請參閱「自訂清單限制條件政策」。
其他控制項
- 範圍控管:如要降低一組資源的資料竊取風險,請使用 VPC Service Controls 將這些資源置於情境感知範圍內。
- 如要瞭解 VPC Service Controls,請參閱「VPC Service Controls 總覽」。
- 如要開始使用,請參閱 Cloud Run 指南「使用 VPC Service Controls (VPC SC)」。
- 如要瞭解費用,請參閱定價。
- 精細控制項:如要控制私人網路中特定資源 (例如特定 Cloud Run 資源或 Compute Engine 虛擬機器) 的流量存取權,請使用服務帳戶來控制權限和驗證。
後續步驟
如果您使用 Terraform,可以使用 Terraform 範例程式碼在私人網路中設定 Cloud Run 資源。