VPC Service Controls para BigQuery

Nesta página, explicamos como melhorar a segurança dos recursos do BigQuery criando perímetros com o VPC Service Controls. Esses perímetros restringem o acesso ao BigQuery e são independentes dos controles de Identity and Access Management (IAM). Eles são úteis nos seguintes casos de uso:

  • Impedir a divulgação de dados restringindo o acesso a recursos, exceto aqueles especificamente permitidos nas regras de entrada e saída.
  • Carregar dados com segurança no BigQuery de fontes de terceiros ou de serviços do Google Cloud, como o Cloud Storage.
  • Controle a exportação de dados do BigQuery para o Cloud Storage ou outras origens.

Para mais informações, consulte a Visão geral do VPC Service Controls.

Antes de começar

Criar o perímetro

O exemplo a seguir mostra como criar um perímetro do VPC Service Controls que limita o intervalo de endereços IP externos que podem acessar um projeto do BigQuery.

  1. Crie um nível de acesso que permita o acesso apenas a um intervalo especificado de endereços IP, por exemplo, aqueles em uma rede corporativa. Para criar, use o comando 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
    

    Substitua:

    • ACCESS_LEVEL_NAME: o ID do nível de acesso
    • TITLE: o título legível para humanos do perímetro de serviço

    Para mais informações sobre como criar níveis de acesso, consulte as implementações de exemplo.

  2. Proteja o recurso do BigQuery criando ou atualizando um perímetro. Os exemplos a seguir protegem um projeto. Para outros casos de uso, como proteger a transferência de dados de um bucket do Cloud Storage em outro projeto, consulte os casos de uso.

    Criar perímetro

    Para criar um novo perímetro para proteger o projeto do BigQuery, use o comando 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
    

    Substitua:

    • POLICY_NAME: o ID da política de acesso
    • ACCESS_LEVEL_NAME: o ID do nível de acesso
    • PERIMETER: o ID do perímetro
    • TITLE: o título curto e legível para humanos do perímetro de serviço
    • BIGQUERY_PROJECT_NUMBER: o ID do projeto do BigQuery
    • POLICY_NAME: o ID da política de acesso

    Atualizar perímetro

    Para atualizar um perímetro, use o comando gcloud access-context-manager perimeters update:

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

    Substitua BIGQUERY_PERIMETER pelo ID do perímetro que protege o recurso do BigQuery.

Testar o perímetro

Teste o perímetro do VPC Service Controls antes de aplicá-lo. Para mais informações, consulte Modo de simulação para perímetros de serviço e Usar o modo de simulação para testar políticas de entrada ou saída.

Casos de uso

Os exemplos de caso de uso a seguir mostram como proteger os dados que entram e saem do BigQuery com o VPC Service Controls.

Consultar dados de tabelas externas de um bucket do Cloud Storage em outro projeto

Os exemplos a seguir mostram como permitir seletivamente a comunicação entre os projetos do BigQuery e do Cloud Storage quando eles estão separados por perímetros.

  1. Permita que o projeto do BigQuery acesse o projeto do Cloud Storage atualizando as regras de saída para o perímetro em torno do projeto do 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
    

    Substitua:

    • BIGQUERY_PROJECT_NUMBER: o ID do projeto do BigQuery
    • CLOUD_STORAGE_PERIMETER: o ID do perímetro que protege os recursos do Cloud Storage
    • POLICY_NAME: o ID da política de acesso
  2. Permita que o projeto do Cloud Storage acesse o projeto do BigQuery atualizando as regras de saída para o perímetro ao redor do projeto do 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
    

    Substitua:

    • CLOUD_STORAGE_PROJECT_NUMBER: o ID do projeto do Cloud Storage
    • PERIMETER: o ID do perímetro
    • POLICY_NAME: o ID da política de acesso
  3. Opcional: se o perímetro que protege o projeto do BigQuery inclui storage.googleapis.com como um serviço restrito, atualize a regra de entrada:

    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
    

Importar e exportar dados do BigQuery Omni

Como uma camada extra de defesa, é possível usar os perímetros do VPC Service Controls para restringir o acesso entre o BigQuery Omni e um serviço de nuvem externo. Para mais informações e exemplos, consulte a configuração do VPC Service Controls para quando você cria uma tabela do BigLake do Azure Blob Storage.

A seguir