适用于 BigQuery 的 VPC Service Controls

本页面介绍了如何使用 VPC Service Controls 创建边界,从而增强 BigQuery 资源的安全性。这些边界可限制对 BigQuery 进行的访问以及从 BigQuery 进行的访问,并独立于 Identity and Access Management (IAM) 控制措施。它们在以下使用场景中非常有用:

  • 通过限制对资源的访问(入站流量和出站流量规则中明确允许的资源除外)来防止数据泄露。
  • 从第三方来源或 Google Cloud 服务(例如 Cloud Storage)安全地将数据加载到 BigQuery 中。
  • 控制将数据从 BigQuery 导出到 Cloud Storage 或其他目标。

如需了解详情,请参阅 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 配置。

后续步骤