輸入和輸出規則

本頁面說明 VPC Service Controls 的輸入和輸出規則。VPC Service Controls 會使用輸入和輸出規則,允許存取受服務範圍保護的資源和用戶端。

連入連出規則區塊會指定允許存取不同身分和資源的方向。如果先前需要一或多個周邊橋接器,現在可以使用輸入和輸出規則取代,簡化使用案例。

如要瞭解如何將輸入和輸出政策套用至服務周邊,請參閱「設定輸入和輸出政策」。

您可以在輸入和輸出規則中,設定身分群組和第三方身分,以及 IAM 角色 (搶先版)。

如需安全資料交換用途和範例清單,請參閱「透過輸入和輸出規則保護資料交換工作」。

如要查看情境感知存取權用途和範例清單,請參閱「含有輸入規則的情境感知存取權」。

輸入和輸出規則的優點

  1. 透過輸入和輸出規則,您可以使用 Google Cloud 服務 API,在機構內和跨機構間私下有效率地交換資料。
  2. 根據 API 要求的內容,您可以使用輸入和輸出規則,授予範圍內資源的存取權:
      Google Cloud
    1. 根據來源網路、IP 位址或裝置,限制可使用的身分類型或身分。
    2. 根據來源網路、IP 位址、裝置和身分類型,限制可存取的 Google Cloud API 和方法。
  3. 限制用於執行資料交換的確切服務、方法、專案、VPC 網路和身分,盡量降低資料竊取風險。Google Cloud
  4. 授予對外部資料集和圖片的唯讀存取權,但這些資料集和圖片由您管理。
  5. 確保權限較低的區隔中的用戶端無法存取權限較高的區隔中的資源,但允許反向存取。Google Cloud
  6. 簡化先前需要一或多個周邊橋接器的設定。

輸入和輸出定義

輸入和輸出的定義與資源上叫用的作業無關。因此,這些定義是指要求方向,而非資料移動方向。

  • 連入:指 API 用戶端從服務範圍外部存取服務範圍內的資源。範例:

    • 服務範圍外的 Cloud Storage 用戶端,對範圍內的 Cloud Storage 資源呼叫 Cloud Storage 讀取、寫入或複製作業。
  • 輸出:指任何存取行為,包括服務範圍內的 API 用戶端或資源,以及服務範圍外的資源。範例:

    • 服務範圍內的 Compute Engine 用戶端呼叫 Compute Engine create 作業,但映像檔資源位於範圍外。
    • Cloud Storage 用戶端 (範圍內或範圍外) 呼叫 copy 指令,其中一個 bucket 位於範圍內,另一個 bucket 位於範圍外。

政策模式

輸入或輸出規則包含 fromto 區塊,其中:

  • 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_IDENTITYANY_USER_ACCOUNTANY_SERVICE_ACCOUNTANY_IDENTITY 允許來自所有身分的要求,包括未經驗證的要求。ANY_USER_ACCOUNT 允許所有人類使用者,ANY_SERVICE_ACCOUNT 允許所有服務帳戶,但 ANY_USER_ACCOUNTANY_SERVICE_ACCOUNT 都不允許未經驗證的請求。

    這項屬性不會根據機構限制身分。舉例來說,ANY_SERVICE_ACCOUNT 允許任何機構的服務帳戶。

  • identities: - (必須使用這個屬性或 identityType 屬性) 這個屬性會啟動服務帳戶、使用者帳戶、Google 群組或第三方身分清單,這些帳戶/群組/身分可存取安全範圍內的資源。

  • PRINCIPAL_IDENTIFIER:指定要授予存取權的使用者帳戶、服務帳戶、Google 群組或第三方身分,讓這些對象存取安全範圍內的資源。請使用 IAM v1 API 主體 ID 中指定的格式。舉例來說,如要指定 Google 群組,請使用 group:GROUP_NAME@googlegroups.com 格式。

    VPC Service Controls 僅支援以 IAM v1 API 主體 ID 中的 userserviceAccountgroupprincipalprincipalSet 前置字元開頭的 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.createbigquery.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 屬性。您必須指定 accessLevelresource (Google Cloud 專案或虛擬私有雲網路),或將 accessLevel 屬性設為 *
  • identityTypeidentities 屬性
  • 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.createbigquery.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_IDENTITYANY_USER_ACCOUNTANY_SERVICE_ACCOUNTANY_IDENTITY 允許來自所有身分的要求,包括未經驗證的要求。ANY_USER_ACCOUNT 允許所有人類使用者,ANY_SERVICE_ACCOUNT 允許所有服務帳戶,但 ANY_USER_ACCOUNTANY_SERVICE_ACCOUNT 都不允許未經驗證的請求。

    這項屬性不會根據機構限制身分。舉例來說,ANY_SERVICE_ACCOUNT 允許來自任何機構的服務帳戶。

  • identities: - (必須使用這個屬性或 identityType 屬性)。這項屬性會列出可存取周邊範圍外指定資源的服務帳戶、使用者帳戶、Google 群組或第三方身分。

  • PRINCIPAL_IDENTIFIER:指定可存取周邊範圍外資源的使用者帳戶、服務帳戶、Google 群組或第三方身分。請使用 IAM v1 API 主體 ID 中指定的格式。舉例來說,如要指定 Google 群組,請使用 group:GROUP_NAME@googlegroups.com 格式。

    VPC Service Controls 僅支援以 IAM v1 API 主體 ID 中的 userserviceAccountgroupprincipalprincipalSet 前置字元開頭的 v1 身分。

  • sources::這項屬性會指定網路來源清單。屬性值可以是專案或存取層級清單。如要根據指定的 sources 強制執行存取限制,請將 sourceRestriction 屬性設為 SOURCE_RESTRICTION_ENABLED

    VPC Service Controls 會將 sources 屬性的 accessLevelresource 屬性評估為 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 模擬測試模式。方法是先在模擬執行模式下啟用周邊,且不設定任何進入或離開政策,然後從稽核記錄中收集叫用的方法清單。然後,在模擬測試模式下,逐步將這些方法新增至輸入/輸出政策,直到所有違規行為都停止為止。屆時,設定就能從模擬測試模式移至強制執行模式。

不支援的功能

輸入和輸出規則目前不支援下列功能:

  1. 改用標籤識別 Google Cloud 資源,而非專案。
  2. 並非所有服務都支援方法層級的輸入/輸出規則。請參閱「支援的服務方法相關限制」。
  3. ANY_SERVICE_ACCOUNTANY_USER_ACCOUNT 身分類型無法用於允許下列作業:

限制

如要瞭解輸入和輸出限制,請參閱「配額與限制」。

後續步驟