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