VPC Service Controls 是 Google Cloud 可讓您設定安全範圍,以防範資料外洩的功能。預設 run.app
網址和自訂網域都受 VPC Service Controls 的管轄。本指南說明如何搭配使用 VPC Service Controls 和 Cloud Run,為服務增添額外的安全防護。
限制和建議
如果是 Artifact Registry 或 Container Registry:
- 儲存容器的登錄項必須與要部署的專案位於相同的 VPC Service Controls 服務範圍。
- 正在建構的程式碼必須與要推送至容器的登錄項位於相同範圍內。
持續部署功能不適用於 VPC Service Controls 範圍內的專案。
在叫用 Cloud Run 服務時,VPC Service Controls 政策強制執行不會使用用戶端的 IAM 驗證資訊。這類要求有以下限制:
- 不支援使用 IAM 使用者主體的 VPC Service Controls 入站政策規則。
- 不支援使用 IAM 使用者主體的 VPC Service Controls 範圍存取層級。
設定貴機構以支援 VPC Service Controls
如要將 VPC Service Controls 與 Cloud Run 搭配使用,您可以在機構層級設定服務範圍。只要設定適當的機構政策,您就能確保在使用 Cloud Run 時強制執行 VPC Service Controls 檢查,並且開發人員只能部署符合 VPC Service Controls 的服務。設定機構政策時,請進一步瞭解繼承和違規。
如果您要使用 gcloud functions
部署 Cloud Run 函式,您或管理員必須授予 Cloud Build 服務帳戶在 VPC Service Controls 範圍內的存取權。詳情請參閱建構程序總覽。
設定 VPC Service Controls 範圍
下列步驟說明如何設定 VPC Service Controls 範圍。
在 Google Cloud 控制台中,前往「VPC Service Controls」頁面。
如果系統提示,請選取「機構」。
按一下「管理存取權政策」。選取存取權政策或建立。存取權政策必須納入您要加入範圍的所有專案。
按一下「新增範圍」。輸入範圍名稱。
選取您想在該範圍內保護的專案。
按一下「專案」。
在「Add Projects」視窗中,選取要新增的專案。
如果您使用的是共用虛擬私有雲,請務必新增主專案和服務專案。
按一下 [Add Projects] (新增專案) 按鈕。
選取 Cloud Run 做為您想在該範圍內保護的服務。
按一下「受限制的服務」。
按一下「新增服務」。
搜尋「Cloud Run」。然後選取「Cloud Run Admin API」。(如果您使用
gcloud functions
,請選取「Cloud Functions V2 API」)。按一下「Add Cloud Run Admin API」 (如果您使用的是
gcloud functions
,請按一下「Cloud Functions V2 API」)。
啟用開發人員存取權。
為 Cloud Run 開啟 VPC Service Controls 後,系統會禁止範圍外所有存取權,包括從範圍外機器 (例如公司筆電) 查看及部署服務。如要讓開發人員和應用程式操作者查看及部署邊界內的資源,您必須設定邊界入口政策:
按一下「輸入政策」。
指定「來源」、「身分」、「專案」和「服務」。
按一下 [新增規則]。
如果貴機構使用 Access Context Manager,您也可以設定存取層級,為開發人員啟用存取權。
按一下「建立範圍」。
完成這些步驟後,系統會檢查所有對 Cloud Run 管理員 API 的呼叫,確保這些呼叫來自相同的範圍。
設定機構政策
如要管理機構政策,您必須具備機構政策管理員 (roles/orgpolicy.policyAdmin
) 角色。
為遵守 VPC Service Controls 規定並防範資料外洩,請設定下列機構政策,控管服務範圍中 Cloud Run 的入站和出站設定。
限制允許的輸入設定
run.allowedIngress
組織政策可控管開發人員可在 Cloud Run 中使用的輸入設定。如果您只想允許內部要求,請將這個機構政策設為強制開發人員使用 internal
值;如果您想允許透過外部應用程式負載平衡器提出要求,並由 Cloud Load Balancing 管理存取控制項,請使用 internal-and-cloud-load-balancing
。
如要進一步瞭解這些設定,請參閱「限制 Cloud Run 的輸入」
主控台
前往Google Cloud 控制台的「允許的輸入設定 (Cloud Run)」政策頁面:
按一下 [編輯]。
在「Edit」(編輯) 頁面選取 [Customize] (自訂)。
在「政策強制執行」下方,選取「取代」。
在「Policy values」(政策值) 底下,選取 [Custom] (自訂)。
在「政策類型」下方,選取「允許」。
在「自訂值」下方輸入
internal
。如果您也想允許 Cloud Load Balancing 流量,請按一下「New policy value」(新的政策值),然後輸入internal-and-cloud-load-balancing
。按一下 [儲存]。
gcloud
使用 gcloud resource-manager org-policies allow
指令:
gcloud resource-manager org-policies allow \ run.allowedIngress internal \ --organization ORGANIZATION_ID
其中 ORGANIZATION_ID
是您的機構 ID。如果您也想允許 Cloud Load Balancing 流量,請將 run.allowedIngress internal
替換為 run.allowedIngress internal-and-cloud-load-balancing
。
這項機構政策生效後,所有服務都必須使用輸入設定的允許值。也就是說,Cloud Run 服務只能接受來自服務範圍內虛擬私有雲網路的流量。如果嘗試將 ingress 設為其他值,系統會以機構政策封鎖這項操作。
限制允許的虛擬私有雲輸出設定
run.allowedVPCEgress
組織政策會控管開發人員可在 Cloud Run 中使用的egress 設定。將這項機構政策設為只允許 all-traffic
值:
主控台
前往Google Cloud 控制台的「允許的虛擬私有雲輸出設定 (Cloud Run)」政策頁面:
按一下 [編輯]。
在「Edit」(編輯) 頁面選取 [Customize] (自訂)。
在「政策強制執行」下方,選取「取代」。
在「Policy values」(政策值) 底下,選取 [Custom] (自訂)。
在「政策類型」下方,選取「允許」。
在「自訂值」下方輸入
all-traffic
。按一下 [儲存]。
gcloud
使用 gcloud resource-manager org-policies allow
指令:
gcloud resource-manager org-policies allow \ run.allowedVPCEgress all-traffic \ --organization ORGANIZATION_ID
其中,ORGANIZATION_ID
是您的機構 ID。
設定機構政策後的行為
設定組織政策後,所有新修訂版本都必須使用直接虛擬私有雲輸出或無伺服器虛擬私有雲存取連接器,且輸出設定必須使用 all-traffic
值。這種組合會將這些修訂版本的所有輸出流量,透過虛擬私有雲端網路轉送,並讓這類流量受到虛擬私有雲端網路的防火牆規則和其他設定的管轄。指定不同值的新修訂版本部署作業會遭到機構政策封鎖。
機構政策和流量遷移
如果服務是在設定機構政策前建立,您可以繼續將流量遷移至不符規定的修訂版本,直到所有提供流量的修訂版本都符合規定為止。
這項行為可讓您測試並逐步推出符合政策的新修訂版本。當所有提供流量的修訂版本都符合政策規定後,機構政策就會阻擋任何嘗試將流量移至不符規定的修訂版本的行為。
設定專案以支援 VPC Service Controls
對於服務範圍內的個別專案,您必須進行額外設定才能使用 VPC Service Controls。
設定虛擬私人雲端網路
本節說明如何設定 VPC 網路,讓傳送至一般 googleapis.com
網域的請求自動路由至 Cloud Run 服務提供服務的受限 受限虛擬 IP (VIP) 範圍 199.36.153.4/30
(restricted.googleapis.com
)。您不需要修改任何程式碼。
針對專案中的每個虛擬私有雲網路,請按照下列步驟封鎖傳出流量,但傳送至受限制 VIP 範圍的流量除外:
在代管 VPC 網路資源的子網路中啟用 私人 Google 存取權。
設定防火牆規則,防止資料離開虛擬私有雲網路:
建立拒絕輸出規則,封鎖所有傳出流量。
建立輸出規則,允許 TCP 通訊埠 443 上的流量傳送至
199.36.153.4/30
。請確認其優先順序在您剛建立的拒絕傳出規則的前面,這樣才能只允許傳出至受限制的 VIP 範圍。
建立 Cloud DNS 回應政策。
gcloud dns response-policies create RESPONSE_POLICY \ --networks=NETWORK \ --description=DESCRIPTION
更改下列內容:
RESPONSE_POLICY
:回應政策的名稱。NETWORK
:要與此政策建立關聯的網路名稱。如要指定多個網路,請以半形逗號分隔每個網路的名稱,例如:network1,network2
。DESCRIPTION
:回應政策的說明,例如Cloud Run VPC Service Controls response policy
請在回應政策中新增規則,將
*.googleapis.com
解析為restricted.googleapis.com
。restricted.googleapis.com
的 IP 位址範圍為199.36.153.4/30
。gcloud dns response-policies rules create RESPONSE_POLICY_RULE \ --response-policy=RESPONSE_POLICY \ --dns-name="*.googleapis.com." \ --local-data=name="restricted.googleapis.com.",type="A",ttl=300,rrdatas="199.36.153.4|199.36.153.5|199.36.153.6|199.36.153.7"
更改下列內容:
RESPONSE_POLICY_RULE
:回應政策規則的名稱。RESPONSE_POLICY
:您在上一個步驟中建立的回應政策名稱,以引號括住。
在回應政策中新增規則,將
*.run.app
(或*.cloudfunctions.net
,如果您使用gcloud functions deploy
建立函式) 解析為restricted.googleapis.com
。restricted.googleapis.com
的 IP 位址範圍為199.36.153.4/30
。gcloud dns response-policies rules create RESPONSE_POLICY_RULE \ --response-policy=RESPONSE_POLICY \ --dns-name="*.run.app." \ --local-data=name="restricted.googleapis.com.",type="A",ttl=300,rrdatas="199.36.153.4|199.36.153.5|199.36.153.6|199.36.153.7"
更改下列內容:
RESPONSE_POLICY_RULE
:回應政策規則的名稱。RESPONSE_POLICY
:您在上一個步驟中指定的回應政策名稱,以引號括住。
此時,來自虛擬私有雲網路內的要求:
- 無法離開虛擬私有雲網路,因此無法輸出至服務範圍外。
- 只能存取檢查 VPC Service Controls 的 Google API 和服務,避免透過 Google API 竊取資料。
部署符合 VPC Service Controls 規範的 Cloud Run 服務和工作
為 Cloud Run 設定 VPC Service Controls 後,請確認在服務範圍內部署的所有 Cloud Run 服務和工作都已啟用 VPC Service Controls。這需要以下條件:
- Cloud Run 服務和工作必須使用直接虛擬私有雲輸出功能或無伺服器虛擬私有雲存取連接器。詳情請參閱「連線至虛擬私有雲網路」。
- Cloud Run 服務和工作必須將所有傳出流量透過虛擬私有雲網路轉送。詳情請參閱「輸出設定」。
- Cloud Run 服務必須只允許來自內部來源的流量。詳情請參閱Ingress 設定。將輸入要求設為「全部」會停用 VPC Service Controls 的強制執行機制。
稽核現有服務是否符合 VPC Service Controls 規定
設定 VPC Service Controls 後,系統會自動檢查服務範圍內專案中建立的新服務是否符合規定。不過,為避免中斷現有工作負載,現有服務會繼續運作,但可能不遵守機構政策。
Google 建議您定期稽核服務,確保入口和出口設定符合相關規定,並視需要更新或重新部署服務。舉例來說,您可以建立使用 Cloud Run Admin API 的腳本,列出服務並醒目顯示未指定正確網路設定的服務。