BigQuery 適用的 VPC Service Controls

本頁面說明如何使用 VPC Service Controls 建立 perimeter,強化 BigQuery 資源的安全性。這些 perimeter 會限制 BigQuery 的存取權,且與 Identity and Access Management (IAM) 控制項無關。適用於下列情況:

  • 限制資源存取權,防止資料外洩,但輸入和輸出規則中明確允許的資源除外。
  • 從第三方來源或 Google Cloud 服務 (例如 Cloud Storage) 安全地將資料載入 BigQuery。
  • 控管從 BigQuery 匯出至 Cloud Storage 或其他目標的資料。

詳情請參閱「VPC Service Controls 總覽」。

事前準備

建立 VPC Service Controls 範圍

以下範例說明如何建立 VPC Service Controls perimeter,限制可存取 BigQuery 專案的外部 IP 位址範圍。

  1. 建立存取層級,只允許存取特定範圍的 IP 位址,例如公司網路內的 IP 位址。如要建立,請使用 gcloud access-context-manager levels create 指令:

    echo """
    - ipSubnetworks:
      - 162.222.181.0/24
      - 2001:db8::/48
    """ > level.yaml
    
    gcloud access-context-manager levels create ACCESS_LEVEL_NAME \
        --title="TITLE" --basic-level-spec=level.yaml
    

    更改下列內容:

    • ACCESS_LEVEL_NAME:存取層級的 ID
    • TITLE:service perimeter 的人類可讀標題

    如要進一步瞭解如何建立存取層級,請參閱實作範例。

  2. 建立或更新 perimeter,保護 BigQuery 資源。以下範例會保護專案。如需其他用途 (例如保護其他專案中 Cloud Storage bucket 的資料移轉作業),請參閱用途。

    建立範圍

    如要建立新的 perimeter 來保護 BigQuery 專案,請使用 gcloud access-context-manager perimeters create 指令:

    echo """
    - ingressFrom:
        identityType: ANY_IDENTITY
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: bigquery.googleapis.com
        resources:
        - '*'
    
    """ > ingress.yaml
    
    gcloud access-context-manager perimeters create BIGQUERY_PERIMETER --title="TITLE" \
        --resources=BIGQUERY_PROJECT_NUMBER \
        --restricted-services=bigquery.googleapis.com \
        --ingress-policies=ingress.yaml
        --policy=POLICY_NAME
    

    更改下列內容:

    • POLICY_NAME:存取權政策的 ID
    • ACCESS_LEVEL_NAME:存取層級的 ID
    • PERIMETER:perimeter 的 ID
    • TITLE:service perimeter 的人類可讀簡短標題
    • BIGQUERY_PROJECT_NUMBER:BigQuery 專案 ID
    • POLICY_NAME:存取權政策的 ID

    更新範圍

    如要更新現有 perimeter,請使用 gcloud access-context-manager perimeters update 指令:

    gcloud access-context-manager perimeters update BIGQUERY_PERIMETER --set-ingress-policies=ingress.yaml
    

    將 BIGQUERY_PERIMETER 替換為保護 BigQuery 資源的 perimeter ID。

測試 perimeter

先測試 VPC Service Controls 範圍,再強制執行。詳情請參閱「service perimeter 的模擬測試模式」和「使用模擬測試模式測試輸入或輸出政策」。

用途

下列用途範例說明如何使用 VPC Service Controls,保護進出 BigQuery 的資料。

查詢其他專案 Cloud Storage bucket 中的外部資料表資料

下列範例說明如何選擇性允許 BigQuery 和 Cloud Storage 專案之間的通訊,即使兩者位於不同 perimeter。

  1. 更新 Cloud Storage 專案周邊的輸出規則,允許 BigQuery 專案存取 Cloud Storage 專案:

    echo """
    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - projects/BIGQUERY_PROJECT_NUMBER
    """ > egress.yaml
    
    gcloud access-context-manager perimeters update CLOUD_STORAGE_PERIMETER --policy=POLICY_NAME --set-egress-policies=egress.yaml
    

    更改下列內容:

    • BIGQUERY_PROJECT_NUMBER:BigQuery 專案 ID
    • CLOUD_STORAGE_PERIMETER:保護 Cloud Storage 資源的 perimeter ID
    • POLICY_NAME:存取權政策的 ID
  2. 更新 BigQuery 專案周邊的輸出規則,允許 Cloud Storage 專案存取 BigQuery 專案:

    echo """
    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - projects/CLOUD_STORAGE_PROJECT_NUMBER
    """ > egress1.yaml
    
    gcloud access-context-manager perimeters update BIGQUERY_PERIMETER --policy=POLICY_NAME --set-egress-policies=egress1.yaml
    

    更改下列內容:

    • CLOUD_STORAGE_PROJECT_NUMBER:Cloud Storage 專案 ID
    • PERIMETER:perimeter 的 ID
    • POLICY_NAME:存取權政策的 ID
  3. 選用:如果保護 BigQuery 專案的 perimeter 將 storage.googleapis.com 列為受限制的服務,您必須更新輸入規則:

    echo """
    - ingressFrom:
        identityType: ANY_IDENTITY
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: bigquery.googleapis.com
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > ingress.yaml
    
    gcloud access-context-manager perimeters create BIGQUERY_PERIMETER --title="TITLE" \
        --resources=BIGQUERY_PROJECT_NUMBER \
        --restricted-services=bigquery.googleapis.com \
        --ingress-policies=ingress.yaml
        --policy=POLICY_NAME
    

從 BigQuery Omni 匯入及匯出資料

如要多一層防護,您可以使用 VPC Service Controls 範圍,限制 BigQuery Omni 與外部雲端服務之間的存取權。如需更多資訊和範例,請參閱建立 Azure Blob 儲存體 BigLake 資料表時的 VPC Service Controls 設定。

後續步驟