輸入和輸出規則

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

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

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

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

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

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

輸入和輸出規則的優點

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

政策模式

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

  • 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 bucket b
  • Perimeter B 中的輸出規則,允許存取 Cloud Storage bucket a
  • Perimeter B 中的輸入規則,允許 perimeter B 外部的 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_IDENTITYANY_USER_ACCOUNTANY_SERVICE_ACCOUNTANY_IDENTITY 允許來自所有身分的要求,包括未經驗證的要求。ANY_USER_ACCOUNT 允許所有人類使用者,ANY_SERVICE_ACCOUNT 允許所有服務帳戶,但 ANY_USER_ACCOUNTANY_SERVICE_ACCOUNT 都不允許未經驗證的要求。

    這項屬性不會根據組織限制身分。例如,ANY_SERVICE_ACCOUNT 允許來自任何組織的服務帳戶。

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

  • PRINCIPAL_IDENTIFIER - 指定要提供 perimeter 內資源的存取權的使用者帳戶、服務帳戶、Google 群組或第三方身分。VPC Service Controls 僅支援 IAM v1 API 主體 ID 中的下列身分:

    • 使用者帳戶和服務帳戶分別使用 user:USER_EMAIL_ADDRESSserviceAccount: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.createbigquery.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 屬性。您必須指定 accessLevelresource (Google Cloud 專案或虛擬私有雲網路),或將 accessLevel 屬性設為 "*"
  • identityTypeidentities 屬性
  • 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.createbigquery.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_IDENTITYANY_USER_ACCOUNTANY_SERVICE_ACCOUNTANY_IDENTITY 允許來自所有身分的要求,包括未經驗證的要求。ANY_USER_ACCOUNT 允許所有人類使用者,ANY_SERVICE_ACCOUNT 允許所有服務帳戶,但 ANY_USER_ACCOUNTANY_SERVICE_ACCOUNT 都不允許未經驗證的要求。

    這項屬性不會根據組織限制身分。例如,ANY_SERVICE_ACCOUNT 允許來自任何組織的服務帳戶。

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

  • PRINCIPAL_IDENTIFIER - 指定可存取 perimeter 外部指定資源的使用者帳戶、服務帳戶、Google 群組或第三方身分。VPC Service Controls 僅支援 IAM v1 API 主體 ID 中的下列身分:

    • 使用者帳戶和服務帳戶分別使用 user:USER_EMAIL_ADDRESSserviceAccount:SA_EMAIL_ADDRESS 格式。

    • 如為其他身分,請使用「支援的身分群組」中指定的格式。

    如要進一步瞭解這些身分,請參閱「允許政策的主體 ID」。

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

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

不支援的功能

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

  1. 改用標籤識別 Google Cloud 資源,而非專案。
  2. 並非所有服務都支援每個方法的輸入/輸出規則。請參閱「支援的服務方法限制」。
  3. ANY_SERVICE_ACCOUNTANY_USER_ACCOUNT 身分類型無法用於允許下列作業:
  4. 瞭解在輸入和輸出規則中使用身分群組的限制

限制

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

後續步驟