BigQuery 的 VPC Service Controls

本頁面說明如何透過 VPC Service Controls 建立範圍,強化 BigQuery 資源的安全性。這些範圍會限制 BigQuery 的存取權,且與身分與存取權管理 (IAM) 控管無關。在下列用途中相當實用:

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

詳情請參閱 VPC Service Controls 總覽

事前準備

建立 VPC Service Controls 範圍

以下範例說明如何建立 VPC Service Controls 範圍,限制可存取 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:服務範圍的易讀標題

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

  2. 建立或更新外圍,保護 BigQuery 資源。以下範例會保護專案。如要瞭解其他用途,例如保護從其他專案的 Cloud Storage 值區進行的資料移轉作業,請參閱用途

    建立範圍

    如要建立新的邊界來保護 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:周界 ID
    • TITLE:服務範圍的簡短、易讀標題
    • BIGQUERY_PROJECT_NUMBER:BigQuery 專案的 ID
    • POLICY_NAME:存取權政策的 ID

    更新範圍

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

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

    BIGQUERY_PERIMETER 替換為保護 BigQuery 資源的週邊 ID。

測試周邊

請先測試 VPC Service Controls 範圍,再強制執行。如需更多資訊,請參閱「服務邊界模擬執行模式」和「使用模擬執行模式測試入站或出站政策」。

用途

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

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

以下範例說明如何在 BigQuery 和 Cloud Storage 專案之間建立邊界時,選擇性允許兩者之間的通訊。

  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 資源的邊界 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:周界 ID
    • POLICY_NAME:存取權政策的 ID
  3. 選用:如果保護 BigQuery 專案的範圍將 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 Storage BigLake 資料表時的 VPC Service Controls 設定。

後續步驟