本頁面說明 VPC Service Controls 的輸入和輸出規則。VPC Service Controls 使用輸入和輸出規則,允許存取受 service perimeter 保護的資源和用戶端。
輸入和輸出規則區塊會指定允許存取不同身分和資源的方向。如果先前需要一或多個 perimeter bridge,現在可以使用輸入和輸出規則取代,簡化用途。
如要瞭解如何將輸入和輸出政策套用至 service perimeter,請參閱「設定輸入和輸出政策」。
您可以在輸入和輸出規則中設定身分群組和第三方身分,以及 IAM 角色 (預先發布版)。
如需安全資料交換用途和範例清單,請參閱「透過輸入和輸出規則的安全資料交換」。
如要查看情境感知存取權用途和範例清單,請參閱「含輸入規則的情境感知存取權」。
輸入和輸出規則的優點
- 透過輸入和輸出規則,您可以使用 Google Cloud 服務 API,在組織內和跨組織間私下有效率地交換資料。
- 根據 API 要求的內容,透過輸入和輸出規則授予 perimeter 中 Google Cloud資源的存取權:
- 根據來源網路、IP 位址或裝置,限制可使用的身分類型或身分。
- 根據來源網路、IP 位址、裝置和身分類型,限制可存取的 Google Cloud API 和方法。
- 限制用於執行資料交換的確切服務、方法、Google Cloud 專案、虛擬私有雲網路和身分,盡量降低竊取風險。
- 授予對外部資料集和圖片的唯讀存取權,但這些資料集和圖片不由您管理。
- 確保權限較低區隔中的用戶端無法存取權限較高區隔中的Google Cloud 資源,但允許反向存取。
- 簡化先前需要一或多個 perimeter bridge 的設定。
輸入和輸出的定義
輸入和輸出的定義與資源上叫用的作業無關。因此,這些定義是指要求方向,而非資料移動方向。
輸入:指 API 用戶端從 service perimeter 外部存取 service perimeter 內的資源。範例:
- Service perimeter 外部的 Cloud Storage 用戶端,對 perimeter 內的 Cloud Storage 資源呼叫 Cloud Storage 讀取、寫入或複製作業。
輸出:指任何涉及 service perimeter 內 API 用戶端或資源,以及 service perimeter 外部資源的存取作業。範例:
- Service perimeter 內的 Compute Engine 用戶端呼叫 Compute Engine
create作業,但映像檔資源位於 perimeter 外部。 - Cloud Storage 用戶端 (perimeter 內外) 呼叫
copy指令,其中一個 bucket 位於 perimeter 內,另一個 bucket 位於 perimeter 外。
- Service perimeter 內的 Compute Engine 用戶端呼叫 Compute Engine
政策模式
輸入或輸出規則包含 from 和 to 區塊,其中:
from參照 API 用戶端的屬性。to參照 Google Cloud 服務和資源的屬性。
Service perimeter 可與多個輸入和輸出規則建立關聯。系統會根據下列元件資訊允許或拒絕Google Cloud 服務呼叫:
- 如果滿足必要輸入規則的條件,系統就會允許 perimeter 外部的用戶端向 perimeter 內的 Google Cloud 資源發出要求。
- 如果符合必要輸出規則的條件,系統會允許 perimeter 內的用戶端向 perimeter 外部的 Google Cloud 資源發出要求。
- 如果有用戶端符合的輸入規則 (如果用戶端不在 perimeter 內),以及外部資源符合的輸出規則,則允許涉及 perimeter 內 Google Cloud 資源和 perimeter 外部 Google Cloud 資源的 API 呼叫。
輸入規則允許的 API 要求範例
- Perimeter 外部的 Cloud Storage 用戶端從 perimeter 內部的 Cloud Storage bucket 下載物件至本機電腦 (例如使用
gcloud storage cp指令)。 - Perimeter 外部的 BigQuery 用戶端使用 perimeter 內部專案的 BigQuery 工作,查詢 perimeter 內部的 BigQuery 資料集 (例如使用
bq query指令)。 - 虛擬私有雲網路中位於 perimeter 外部的 Compute Engine VM 會寫入 perimeter 內的 Cloud Storage bucket。
輸出規則允許的 API 要求範例
- 在 perimeter 內部的 Cloud Storage 用戶端,將物件從 perimeter 外部的 Cloud Storage bucket 複製到 perimeter 內部的 bucket (例如使用
gcloud storage cp指令)。
- Perimeter 內部的 BigQuery 用戶端使用 perimeter 外部專案中的 BigQuery 工作,查詢 perimeter 內部的 BigQuery 資料集 (例如使用
bq query指令)。
輸入和輸出規則組合允許的 API 要求範例
- Perimeter 外部的 Cloud Storage 用戶端在 perimeter 外部的 Cloud Storage bucket,以及 perimeter 內部的 bucket 之間複製物件 (例如使用
gcloud storage cp指令)。 - Perimeter 外部的 BigQuery 用戶端使用 perimeter 外部專案中的 BigQuery 工作,查詢 perimeter 內部的 BigQuery 資料集 (例如使用
bq query指令)。 - Perimeter 外部的 Compute Engine 用戶端使用 perimeter 內部的 Cloud KMS 金鑰,在 perimeter 外部建立 Compute Engine 磁碟。
在 BigQuery 和 Compute Engine 範例中,由於 BigQuery 工作或 Compute Engine 磁碟位於 perimeter 外部,因此僅有輸入規則是不夠。如要允許涉及 perimeter 內部 Google Cloud 資源 (BigQuery 資料集或 Cloud KMS 金鑰) 和 perimeter 外部資源 (BigQuery 工作或 Compute Engine 磁碟) 的 API 要求,必須設定輸出規則。
涉及多個 service perimeter 的 API 要求
如果存取的資源和/或 API 用戶端屬於不同的 service perimeter,所有相關 perimeter 的政策都必須允許 API 要求。例如,假設 service perimeter A 內有 Cloud Storage 用戶端和 bucket a,service perimeter B 內有 bucket b。在本範例中,如要讓 Cloud Storage 用戶端將物件從 bucket a 複製到 bucket b,以及從 bucket b 複製到 bucket a,必須有下列輸入和輸出規則:
- 在 perimeter
A中設定輸出規則,允許存取 Cloud Storage bucketb。 - Perimeter
B中的輸出規則,允許存取 Cloud Storage bucketa。 - Perimeter
B中的輸入規則,允許 perimeterB外部的 Cloud Storage 用戶端存取。
輸入規則參考資料
可以使用 Google Cloud 控制台、JSON 檔案或 YAML 檔案設定輸入規則。下列範例使用 .yaml 格式:
- ingressFrom:
identityType: ANY_IDENTITY | ANY_USER_ACCOUNT | ANY_SERVICE_ACCOUNT
*OR*
identities:
- PRINCIPAL_IDENTIFIER
sources:
- resource: RESOURCE
*OR*
- accessLevel: ACCESS_LEVEL
ingressTo:
operations:
- serviceName: SERVICE
methodSelectors:
- method: METHOD
*OR*
- permission: PERMISSION
*OR*
roles:
- ROLE_NAME
resources:
- projects/PROJECT
title: TITLE
- ingressFrom:- (必要) 啟動from區塊,列出 perimeter 外部的允許來源和身分。identityType:- (必須使用這項屬性或identities屬性) 這項屬性會定義可從指定sources(網路來源) 使用的身分類型。可接受的值:ANY_IDENTITY、ANY_USER_ACCOUNT、ANY_SERVICE_ACCOUNT。ANY_IDENTITY允許來自所有身分的要求,包括未經驗證的要求。ANY_USER_ACCOUNT允許所有人類使用者,ANY_SERVICE_ACCOUNT允許所有服務帳戶,但ANY_USER_ACCOUNT和ANY_SERVICE_ACCOUNT都不允許未經驗證的要求。這項屬性不會根據組織限制身分。例如,
ANY_SERVICE_ACCOUNT允許來自任何組織的服務帳戶。identities:- (必須使用這項屬性或identityType屬性) 這項屬性會列出可存取 perimeter 內資源的服務帳戶、使用者帳戶、Google 群組或第三方身分。PRINCIPAL_IDENTIFIER- 指定要提供 perimeter 內資源的存取權的使用者帳戶、服務帳戶、Google 群組或第三方身分。VPC Service Controls 僅支援 IAMv1API 主體 ID 中的下列身分:使用者帳戶和服務帳戶分別使用
user:USER_EMAIL_ADDRESS和serviceAccount:SA_EMAIL_ADDRESS格式。如為其他身分,請使用「支援的身分群組」中指定的格式。
如要進一步瞭解這些身分,請參閱「允許政策的主體 ID」。
sources:- (必要) 這項屬性是指網路來源清單。清單中的每個值都是存取層級或 Google Cloud 專案。如果將accessLevel屬性設為"*",輸入政策就會允許來自任何網路來源的存取要求。如果將這項屬性設為 Google Cloud 專案,則輸入政策會允許來自該專案所屬虛擬私有雲網路的存取要求。永久刪除相關聯的專案時,可能會移除這個值。不過,移除這個值不會導致錯誤。疑難排解任何問題時,請務必檢查這個值是否存在。
- resource:- (使用這項屬性或accessLevel屬性) 指定要提供存取權的專案或虛擬私有雲網路 (位於 perimeter 外部)。如要指定專案,請使用下列格式:projects/PROJECT_NUMBER。如要指定虛擬私有雲網路,請使用下列格式://compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_NAME。- accessLevel:- (必須使用這項屬性或resource屬性) 指定從 perimeter 外部授予的存取層級。如果將accessLevel屬性設為"*",輸入政策就會允許來自任何網路來源的存取要求。ingressTo:- (必要) 啟動to區塊,列出 perimeter 內指定 Google Cloud 資源允許的服務作業。operations:- (必須使用這項屬性或roles屬性) 標記可存取服務和動作/方法清單的開頭,滿足from區塊條件的用戶端可供存取。- serviceName:- (必要) 這個欄位可以是有效的服務名稱,也可以設為"*",允許存取所有服務。例如,bigquery.googleapis.com是有效的serviceName。如要查看可用的服務清單,請參閱「支援的產品」。methodSelectors:- (如果serviceName不是"*",則為必要欄位) 滿足from封鎖條件的用戶端可存取的方法清單開頭。如需可限制的服務方法和權限清單,請參閱「支援的服務方法限制」。如需 VPC Service Controls 無法控管的服務方法清單,請參閱「服務方法例外狀況」。
- method:- (必須使用這項屬性或permission屬性) 這個欄位可以是有效的服務方法,也可以設為"*",允許存取指定服務的所有方法。- permission:- (必須使用這項屬性或method屬性) 這個欄位必須是有效的服務權限。如果作業需要權限,即可存取 perimeter 內部的資源。如果對資源的要求需要多項權限,您必須在相同作業下指定所有必要權限,才能讓輸入規則正常運作。例如,如果對 BigQuery 資源的要求需要
bigquery.jobs.create和bigquery.tables.create權限,您必須在同一項作業中指定這兩項權限。此外,如果您使用Google Cloud 控制台多次為同一資源指定權限,系統不會在同一項作業下建立權限。為避免發生這個問題,請一次指定資源的所有權限。roles:- (必須使用這項屬性或operations屬性) 這項屬性是指 IAM 角色清單,用於定義規則中指定服務的存取權範圍。ROLE_NAME- 指定單一角色或角色組合,其中包含存取服務所需的所有權限。如要指定角色,請使用「角色元件」中提及的角色名稱格式,但下列格式除外:projects/PROJECT_ID/roles/IDENTIFIER。如要瞭解支援的服務和角色,請參閱「支援的產品」。
resources:- (必要) 這項屬性會指定 service perimeter 中的Google Cloud 資源清單,perimeter 外部的用戶端可以存取這些資源。這個欄位可以設為"*",允許對 perimeter 內部的任何 Google Cloud 資源進行輸入存取。title:- (選用) 這項屬性指定輸入規則的標題。Perimeter 內的標題不得重複,且長度不得超過 100 個字元。在存取權政策中,所有規則標題的總長度不得超過 240,000 個字元。
如要建立正常運作的輸入規則,請指定下列屬性:
sources屬性。您必須指定accessLevel或resource(Google Cloud 專案或虛擬私有雲網路),或將accessLevel屬性設為"*"。
identityType或identities屬性resources屬性serviceName屬性
完成輸入政策檔案設定後,請參閱「更新輸入和輸出政策」,瞭解如何將輸入政策檔案套用至 service perimeter 的操作說明。
如果您在 service perimeter 中設定多個輸入規則,只要要求符合任一輸入規則的條件,VPC Service Controls 就會允許該要求。
輸出規則參考資料
可以使用 Google Cloud 控制台、JSON 檔案或 YAML 檔案設定輸出規則。下列範例使用 .yaml 格式:
- egressTo:
operations:
- serviceName: SERVICE_NAME
methodSelectors:
- method: METHOD
*OR*
- permission: PERMISSION
*OR*
roles:
- ROLE_NAME
resources:
- projects/PROJECT
*OR*
externalResources:
- EXTERNAL_RESOURCE_PATH
egressFrom:
identityType: ANY_IDENTITY | ANY_USER_ACCOUNT | ANY_SERVICE_ACCOUNT
*OR*
identities:
- PRINCIPAL_IDENTIFIER
sources:
- resource: RESOURCE
*OR*
- accessLevel: ACCESS_LEVEL
sourceRestriction: RESTRICTION_STATUS
title: TITLE
- egressTo:- (必要) 啟動to區塊,列出 perimeter 外指定專案中 Google Cloud 資源允許的服務作業。operations:- (必須使用這項屬性或roles屬性) 標記可存取服務和動作/方法清單的開頭,滿足from區塊條件的用戶端可供存取。- serviceName:- (必要) 這個欄位可以是有效的服務名稱,也可以設為"*",允許存取所有服務。如要查看可用服務清單,請參閱「支援的產品」。methodSelectors:- (如果serviceName不是"*",則為必要欄位) 滿足from封鎖條件的用戶端可存取的方法清單開頭。如需可限制的服務方法和權限清單,請參閱「支援的服務方法限制」。如需 VPC Service Controls 無法控管的服務方法清單,請參閱「服務方法例外狀況」。
- method:- (必須使用這項屬性或permission屬性)。這個欄位可以是有效的服務方法,也可以設為"*",允許存取指定服務的所有方法。- permission:- (必須使用這項屬性或method屬性)。這個欄位必須是有效的服務權限。對於需要權限的作業,系統允許存取 perimeter 外部的指定資源。如果對資源的要求需要多項權限,您必須在相同作業下指定所有必要權限,才能讓輸出規則正常運作。例如,如果對 BigQuery 資源的要求需要
bigquery.jobs.create和bigquery.tables.create權限,您必須在同一項作業中指定這兩項權限。此外,如果您使用Google Cloud 控制台多次為同一資源指定權限,系統不會在同一項作業下建立權限。為避免發生這個問題,請一次指定資源的所有權限。roles:- (必須使用這項屬性或operations屬性) 這項屬性是指 IAM 角色清單,用於定義規則中指定服務的存取權範圍。ROLE_NAME- 指定單一角色或角色組合,其中包含存取服務所需的所有權限。如要指定角色,請使用「角色元件」中提及的角色名稱格式,但下列格式除外:projects/PROJECT_ID/roles/IDENTIFIER。如要瞭解支援的服務和角色,請參閱「支援的產品」。
resources:- 這項屬性是 Google Cloud資源清單,由專案指定,perimeter 內部的用戶端可存取。您可以將這個欄位設為"*",允許對任何Google Cloud 資源進行輸出存取。externalResources:- 這項屬性僅用於指定 BigQuery Omni 資源。這項屬性是 BigQuery Omni 支援的外部資源清單,perimeter 內部的用戶端可以存取這些資源。您只能指定 Amazon S3 或 Azure Blob 儲存體資源。如果是 Amazon S3,支援的格式為s3://BUCKET_NAME。如果是 Azure 儲存體,支援的格式為azure://myaccount.blob.core.windows.net/CONTAINER_NAME。egressFrom:- (必要) 啟動from區塊,列出允許的來源和 perimeter 內的身分。identityType:- (必須使用這項屬性或identities屬性)。這項屬性會定義可用於從 perimeter 外部存取指定資源的身分類型。可接受的值:ANY_IDENTITY、ANY_USER_ACCOUNT、ANY_SERVICE_ACCOUNT。ANY_IDENTITY允許來自所有身分的要求,包括未經驗證的要求。ANY_USER_ACCOUNT允許所有人類使用者,ANY_SERVICE_ACCOUNT允許所有服務帳戶,但ANY_USER_ACCOUNT和ANY_SERVICE_ACCOUNT都不允許未經驗證的要求。這項屬性不會根據組織限制身分。例如,
ANY_SERVICE_ACCOUNT允許來自任何組織的服務帳戶。identities:- (必須使用這項屬性或identityType屬性)。這項屬性會列出可存取 perimeter 外部指定資源的服務帳戶、使用者帳戶、Google 群組或第三方身分。PRINCIPAL_IDENTIFIER- 指定可存取 perimeter 外部指定資源的使用者帳戶、服務帳戶、Google 群組或第三方身分。VPC Service Controls 僅支援 IAMv1API 主體 ID 中的下列身分:使用者帳戶和服務帳戶分別使用
user:USER_EMAIL_ADDRESS和serviceAccount:SA_EMAIL_ADDRESS格式。如為其他身分,請使用「支援的身分群組」中指定的格式。
如要進一步瞭解這些身分,請參閱「允許政策的主體 ID」。
sources:- 這項屬性會指定網路來源清單。屬性值可以是專案或存取層級清單。如要根據指定的sources強制執行存取限制,請將sourceRestriction屬性設為SOURCE_RESTRICTION_ENABLED。VPC Service Controls 會將
sources屬性的accessLevel和resource屬性評估為 OR 條件。- resource:- (使用這項屬性或accessLevel屬性) 指定一或多個 service perimeter 中的Google Cloud 資源,允許存取 perimeter 外部的資料。這項屬性僅支援專案。如要指定專案,請使用下列格式:projects/PROJECT_NUMBER。無法在這項屬性中使用
"*"來允許所有 Google Cloud 資源。- accessLevel:- (使用這項屬性或resource屬性) 指定一或多個存取層級,允許 perimeter 內部的資源存取 perimeter 外部的資源。請確認這些存取層級與 perimeter 來自同一項存取權政策。如果將accessLevel屬性設為"*",輸出政策會允許從任何網路來源存取。sourceRestriction:- (如使用sources屬性,則為必填) 這項屬性可根據指定的sources強制執行存取限制。如要強制執行這些存取限制,請將sourceRestriction屬性設為SOURCE_RESTRICTION_ENABLED。如要停用這些存取限制,請將
sourceRestriction屬性設為SOURCE_RESTRICTION_DISABLED。如果未設定
sourceRestriction屬性的任何值,VPC Service Controls 會忽略sources屬性,且不會強制執行任何存取限制。title:- (選用) 這項屬性可指定輸出規則的標題。Perimeter 內的標題不得重複,且長度不得超過 100 個字元。在存取權政策中,所有規則標題的總長度不得超過 240,000 個字元。
完成輸出政策檔案設定後,請參閱「更新輸入和輸出政策」,瞭解如何將輸出政策檔案套用至 service perimeter 的操作說明。
如果您在 service perimeter 中設定多個輸出規則,只要要求符合任一輸出規則的條件,VPC Service Controls 就會允許該要求。
使用模擬測試模式測試輸入/輸出政策
如果不想授予所有服務方法的存取權,有時可能難以判斷要允許的精確方法清單。這是因為服務的特定方法可能會導致在其他 Google Cloud 服務上叫用不同方法。例如,BigQuery 會從 Cloud Storage bucket 載入資料表,以執行查詢。
如要判斷允許的正確方法組合,可以使用 VPC Service Controls 模擬測試模式。方法是先在模擬測試模式中啟用 perimeter,且不使用任何輸入或輸出政策,然後從稽核記錄中收集叫用的方法清單。然後,以模擬測試模式逐步將這些方法新增至輸入/輸出政策,直到所有違規事項都停止為止。屆時,設定即可從模擬測試模式移至強制執行模式。
不支援的功能
輸入和輸出規則目前不支援下列功能:
- 改用標籤識別 Google Cloud 資源,而非專案。
- 並非所有服務都支援每個方法的輸入/輸出規則。請參閱「支援的服務方法限制」。
ANY_SERVICE_ACCOUNT和ANY_USER_ACCOUNT身分類型無法用於允許下列作業:- 所有 Container Registry 作業。
- 所有 notebooks.googleapis.com 服務作業。
- 使用已簽署的網址執行 Cloud Storage 作業。
- 使用 Cloud Run functions,從本機電腦部署 Cloud 函式。
- 將記錄從 Cloud Logging 接收器匯出至 Cloud Storage 資源。
- Cloud Composer 中的所有 Apache Airflow 網頁介面作業。
- 瞭解在輸入和輸出規則中使用身分群組的限制。
限制
如要瞭解輸入和輸出限制,請參閱「配額與限制」。
後續步驟
- 完成這項程式碼實驗室,瞭解如何修正輸入和輸出違規事項。
- 瞭解如何設定及查看違規事項資訊主頁。