使用 VPC Service Controls (VPC SC)

VPC Service Controls 是一項 Google Cloud 功能 ,可讓您設定安全範圍,防範資料遭竊。預設 run.app URL 和自訂網域都受 VPC Service Controls 限制。本指南說明如何搭配 Cloud Run 使用 VPC Service Controls,為服務加強安全防護。

限制和注意事項

  • 如果是 Artifact Registry 或 Container Registry:

    • 儲存容器的登錄檔必須與您要部署的專案位於相同的 VPC Service Controls 服務範圍。
    • 建構的程式碼必須與容器推送到的登錄檔位於相同周邊。
  • VPC Service Controls 範圍內的專案無法使用持續部署功能。

  • 叫用 Cloud Run 服務時,VPC Service Controls 政策強制執行作業不會使用用戶端的 IAM 驗證資訊。這類要求有以下限制:

    • VPC Service Controls 輸入政策規則不支援使用 IAM 主體。
    • 不支援使用 IAM 主體的 VPC Service Controls 範圍存取層級。

設定機構,支援 VPC Service Controls

如要將 VPC Service Controls 與 Cloud Run 搭配使用,請在組織層級設定服務範圍。設定適當的機構政策後,您就能確保使用 Cloud Run 時會強制執行 VPC Service Controls 檢查,且開發人員只能部署符合 VPC Service Controls 規範的服務。設定機構政策時,請進一步瞭解沿用違規情形。

如果您使用 gcloud functions 部署 Cloud Run 函式,您或管理員必須在 VPC Service Controls 範圍內授予 Cloud Build 服務帳戶存取權。詳情請參閱建構程序總覽

設定 VPC Service Controls perimeter

下列步驟說明如何設定 VPC Service Controls 服務範圍

  1. 確認您具備管理 VPC Service Controls 的必要角色

  2. 前往 Google Cloud 控制台的「VPC Service Controls」頁面。

    前往「VPC Service Controls」頁面

  3. 如果系統提示您選取「機構」,請依提示選取。

  4. 按一下「管理存取政策」。選取存取權政策或建立存取權政策。存取權政策必須包含您要新增至 perimeter 的所有專案。

  5. 按一下「New Perimeter」(新增範圍)。輸入範圍名稱。

  6. 選取要在 perimeter 內保護的專案。

    1. 按一下「專案」

    2. 在「Add Projects」(新增專案) 視窗中,選取要新增的專案。

      如果您使用共用虛擬私有雲,請務必新增主專案和服務專案。

    3. 按一下 [Add Projects] (新增專案) 按鈕。

  7. 選取要保護的 Cloud Run 服務。

    1. 按一下「受限制的服務」

    2. 按一下「新增服務」。

    3. 搜尋「Cloud Run」。然後選取「Cloud Run Admin API」。(如果您使用 gcloud functions,請選取「Cloud Functions V2 API」)。

    4. 按一下「新增 Cloud Run Admin API」 (或「Cloud Functions V2 API」,如果您使用 gcloud functions)。

  8. 啟用開發人員存取權。

    為 Cloud Run 啟用 VPC Service Controls 後,系統會禁止從 perimeter 外部進行所有存取作業,包括從不在 perimeter 內的機器 (例如公司筆電) 查看及部署服務。如要讓開發人員和應用程式營運人員查看及部署 perimeter 內的資源,您必須設定 perimeter 輸入政策

    1. 按一下「輸入政策」

    2. 指定「來源」、「身分」、「專案」和「服務」

    3. 按一下 [新增規則]。

    如果貴機構使用 Access Context Manager,您也可以設定存取層級,為開發人員啟用存取權。

  9. 按一下「建立範圍」

完成這些步驟後,系統會檢查所有對 Cloud Run Admin API 的呼叫,確保這些呼叫來自相同安全範圍內。

設定機構政策

如要管理機構政策,您需要機構政策管理員 (roles/orgpolicy.policyAdmin) 角色。

如要遵守 VPC Service Controls 規定並防範資料外洩,請設定下列機構組織政策,控管服務範圍內 Cloud Run 的允許輸入輸出設定。

限制允許的輸入設定

run.allowedIngress 組織政策可控管開發人員可對 Cloud Run 使用的輸入設定。如要只允許內部要求,請將這項機構政策設為強制開發人員使用 internal 值;如要允許透過外部應用程式負載平衡器提出要求,並由 Cloud Load Balancing 管理存取控管機制,請將這項機構政策設為 internal-and-cloud-load-balancing

如要進一步瞭解這些設定,請參閱「限制 Cloud Run 的輸入流量

控制台

  1. 前往Google Cloud 控制台的「允許的輸入設定 (Cloud Run)」政策頁面:

    前往機構政策

  2. 按一下 [編輯]

  3. 在「Edit」(編輯) 頁面選取 [Customize] (自訂)

  4. 在「政策強制執行」下方,選取「取代」

  5. 在「Policy values」(政策值) 底下,選取 [Custom] (自訂)。

  6. 在「政策類型」下方,選取「允許」

  7. 在「自訂值」下方輸入 internal。如要允許 Cloud Load Balancing 流量,請按一下「New policy value」(新政策值),然後輸入 internal-and-cloud-load-balancing

  8. 按一下 [儲存]

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 服務只能接受來自服務周邊內虛擬私有雲網路的流量。嘗試將輸入設定為其他值時,會遭到機構政策封鎖。

限制允許的虛擬私有雲輸出設定

run.allowedVPCEgress機構政策可控管開發人員可用的 Cloud Run 輸出設定。將這項機構政策設為只允許 all-traffic 值:

控制台

  1. 前往 Google Cloud 控制台的「Allowed VPC egress settings (Cloud Run)」(允許的虛擬私有雲輸出設定 (Cloud Run)) 政策頁面:Google Cloud

    前往機構政策

  2. 按一下 [編輯]

  3. 在「Edit」(編輯) 頁面選取 [Customize] (自訂)

  4. 在「政策強制執行」下方,選取「取代」

  5. 在「Policy values」(政策值) 底下,選取 [Custom] (自訂)。

  6. 在「政策類型」下方,選取「允許」

  7. 在「自訂值」下方輸入 all-traffic

  8. 按一下 [儲存]

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,您必須為服務範圍內的個別專案進行額外設定。

設定虛擬私人雲端網路

本節說明如何設定虛擬私有雲網路,讓傳送至一般 googleapis.com 網域的要求,自動路由至受限的受限虛擬 IP (VIP) 範圍 199.36.153.4/30 (restricted.googleapis.com),也就是 Cloud Run 服務提供服務的位置。不必修改任何程式碼。

針對專案中的每個虛擬私有雲網路,請按照下列步驟封鎖輸出流量,但限制的 VIP 範圍除外:

  1. 在代管虛擬私有雲網路資源的子網路上啟用私人 Google 存取權

  2. 設定防火牆規則,防止資料離開虛擬私有雲網路:

    • 建立拒絕輸出規則,封鎖所有傳出流量。

    • 建立允許輸出規則,允許流量前往 199.36.153.4/30 的 TCP 通訊埠 443。請確認這項規則的優先順序高於您剛建立的拒絕輸出規則,這樣輸出流量就只會流向受限的 VIP 範圍。

  3. 建立 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
  4. 在回應政策中新增規則,將 *.googleapis.com 解析為 restricted.googleapis.comrestricted.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:您在上一個步驟中建立的回應政策名稱,以半形引號括住。
  5. 在回應政策中新增規則,以將 *.run.app (或 gcloud functions deploy 建立函式時的 *.cloudfunctions.net) 解析為 restricted.googleapis.comrestricted.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 列出服務的指令碼,並醒目顯示未指定適當網路設定的服務。