Troca de dados segura com regras de entrada e saída

Este documento descreve casos de uso comuns para troca segura de dados e exemplos de configurações que permitem o acesso entre clientes e recursos separados por perímetros de serviço.

Para uma visão geral das regras de entrada e saída, consulte Regras de entrada e saída.

Para instruções sobre como configurar políticas de entrada e saída, consulte Como configurar políticas de entrada e saída.

Exemplos de configuração de casos de uso de troca de dados segura

Esta seção contém exemplos de casos de uso sobre troca de dados com segurança entre perímetros de serviço.

Acessar um recurso do Google Cloud fora do perímetro

O diagrama a seguir mostra um recurso do Compute Engine dentro de um perímetro de serviço que requer acesso a um recurso do Cloud Storage, que está fora do perímetro:

Saída de um perímetro

Suponha que você definiu o seguinte perímetro:

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
  - storage.googleapis.com
title: Example

É necessário conceder acesso de leitura a um bucket do Cloud Storage em project 999, que está em uma organização diferente. Em seguida, defina a seguinte regra de saída em um arquivo e salve o arquivo como gcs.yaml:

echo """
- egressTo:
    operations:
      - serviceName: storage.googleapis.com
        methodSelectors:
        - method: google.storage.objects.get
    resources:
    - projects/999
  egressFrom:
    identityType: ANY_IDENTITY
""" > gcs.yaml

Aplique a regra de saída executando o seguinte comando:

gcloud beta access-context-manager perimeters update Example --set-egress-policies=gcs.yaml

Para mais informações sobre o comando gcloud access-context-manager perimeters update, consulte gcloud access-context-manager perímetros update.

Compartilhar dados usando o Pub/Sub entre duas organizações que usam o VPC Service Controls

O diagrama a seguir mostra duas organizações, Org1 e Org2, que usam o VPC Service Controls e compartilham dados usando um tópico do Pub/Sub:

Saída de um perímetro e da entrada para outro perímetro

Suponha que você definiu os seguintes perímetros:

# Org 1 Perimeter Definition
name: accessPolicies/222/servicePerimeters/Example1
status:
  resources:
  - projects/111
  restrictedServices:
  - pubsub.googleapis.com
title: Example1

# Org 2 Perimeter Definition
name: accessPolicies/333/servicePerimeters/Example2
status:
  resources:
  - projects/222
  restrictedServices:
  - pubsub.googleapis.com
title: Example2

Para ativar a troca de dados, Org1 precisa definir a seguinte regra de saída que permite a assinatura e salvar o arquivo como org1egress.yaml:

# Org1: Org1's perimeter must allow a Pub/Sub subscription to project 222.

echo """
- egressTo:
    operations:
    - serviceName: pubsub.googleapis.com
      methodSelectors:
      - method: Subscriber.CreateSubscription
    resources:
    - projects/222
  egressFrom:
    identityType: ANY_IDENTITY
""" > org1egress.yaml

Org2 precisa definir uma regra de entrada correspondente que permita a assinatura e salve o arquivo como org2ingress.yaml.

# Org 2: Org2's perimeter must allow a Pub/Sub subscription from network
project 111 in Org1.

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/111
  ingressTo:
    operations:
    - serviceName: pubsub.googleapis.com
      methodSelectors:
      - method: Subscriber.CreateSubscription
    resources:
    - \"*\"
""" > org2ingress.yaml

Aplique as regras de entrada e saída executando os seguintes comandos:

gcloud beta access-context-manager perimeters update Example2 1--set-egress-policies=org1egress.yaml
gcloud beta access-context-manager perimeters update Example1 1--set-ingress-policies=org2ingress.yaml

Compartilhar dados anônimos de PHI com uma organização parceira

O diagrama a seguir mostra um perímetro em torno de um segmento de dados protegidos de informações de saúde (PHI), um segundo perímetro em torno de um segmento de dados anônimos e uma organização parceiro separada. O segmento de PHI pode manipular os dados no segmento de dados anônimos, e os dados do segmento de dados anônimos são compartilhados com a organização parceira.

Entrada no perímetro e saída do perímetro

Você quer definir regras de entrada e saída que permitam o compartilhamento de dados anônimos com a organização parceira e permitem que seu segmento de PHI manipule os dados no segmento de dados anônimos.

Suponha que você definiu os seguintes perímetros:

# PhiPerimeter
name: accessPolicies/222/servicePerimeters/PhiPerimeter
status:
  resources:
  - projects/111
  restrictedServices:
  - storage.googleapis.com
  - bigquery.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: PhiPerimeter
# AnonPerimeter
name: accessPolicies/222/servicePerimeters/AnonPerimeter
status:
  resources:
  - projects/222
  restrictedServices:
  - storage.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: AnonPerimeter

Você também pode presumir que o projeto da organização parceira é 999. É possível definir as seguintes regras de entrada e saída:

# Anon Perimeter

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/111
  ingressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: google.storage.Write
      - method: google.storage.objects.create
    resources:
    - \"*\"
""" > anoningress.yaml

echo """
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: google.storage.Write
      - method: google.storage.objects.create
    resources:
    - projects/999
  egressFrom:
    identityType: ANY_IDENTITY
""" > anonegress.yaml
# PHI Perimeter

echo """
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: \"*\"
    resources:
    - projects/222
  egressFrom:
    identityType: ANY_IDENTITY
""" > phiegress.yaml

Aplique as regras de entrada e saída executando os seguintes comandos:

gcloud beta access-context-manager perimeters update AnonPerimeter --set-ingress-policies=anoningress.yaml --set-egress-policies=anonegress.yaml
gcloud beta access-context-manager perimeters update PhiPerimeter --set-egress-policies=phiegress.yaml

Conceder acesso a uma imagem de disco do Compute Engine de terceiros

Veja no diagrama a seguir um recurso do Compute Engine em um perímetro de serviço que requer acesso a uma imagem de disco do Compute Engine em um projeto de imagem de terceiros fora do perímetro:

Saída para o projeto de imagem

Suponha que você definiu o seguinte perímetro:

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  - projects/222
  restrictedServices:
  - compute.googleapis.com
  - containerregistry.googleapis.com
title: Example

Agora você precisa conceder acesso de leitura a imagens de disco em project 999, que está em uma organização diferente. Em seguida, defina a seguinte regra de saída em um arquivo e salve o arquivo como compute.yaml:

echo """
- egressTo:
    operations:
    - serviceName: compute.googleapis.com
      methodSelectors:
      - method: InstancesService.Insert
    resources:
    - projects/999
  egressFrom:
    identityType: ANY_IDENTITY
""" > compute.yaml

Aplique a regra de saída executando o seguinte comando:

gcloud beta access-context-manager perimeters update Example --set-egress-policies=compute.yaml

Ler um conjunto de dados do BigQuery ao permitir acesso particular de uma rede VPC fora do perímetro

O diagrama a seguir mostra várias redes VPC de parceiros fora do perímetro que precisam ler um recurso do BigQuery dentro de um perímetro:

Saída para o projeto de imagem

Suponha que você use o mesmo perímetro do exemplo 1:

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
title: Example

O objetivo é permitir o acesso de leitura de uma rede VPC fora do perímetro de vários parceiros. Defina a regra de entrada a seguir em um arquivo e salve-o como partneringress.yaml:

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/888
    - resource: projects/999
  ingressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - permission: bigquery.datasets.get
      - permission: bigquery.tables.list
      - permission: bigquery.tables.get
      - permission: bigquery.tables.getData
      - permission: bigquery.jobs.create
    resources:
    - \"*\"

""" > partneringress.yaml

Aplique a regra de entrada executando o seguinte comando:

gcloud beta access-context-manager perimeters update Example --set-ingress-policies=partneringress.yaml

Para ter mais flexibilidade e controle, o BigQuery usa - permission: methodSelectors em vez de - method: methodSelectors, que é usado pela maioria dos serviços. Um único método do BigQuery (RunQuery) pode operar de maneiras diferentes em vários recursos, e o alinhamento com o modelo de permissões proporciona mais flexibilidade e controle.

Carregar em um bucket do Cloud Storage (gravação) permitindo acesso privado de uma rede VPC fora do perímetro

Suponha que você use o mesmo perímetro do exemplo 1:

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - storage.googleapis.com
  - containerregistry.googleapis.com
title: Example

Seu objetivo é permitir o acesso de uma rede VPC fora do perímetro para permitir que um parceiro grave dados no bucket dentro dele. Defina uma regra de entrada e salve o arquivo como partneringress.yaml:

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/222
  ingressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: google.storage.objects.create
    resources:
    - \"*\"
""" > partneringress.yaml

Aplique a regra de entrada executando o seguinte comando:

gcloud beta access-context-manager perimeters update Example --set-ingress-policies=partneringress.yaml

Compartilhar registros em um perímetro separado, permitindo que projetos de vários perímetros compartilhem registros

Neste caso de uso, suponha que uma empresa tenha um projeto compartilhado para coleta de dados de registro em toda a implantação do Google Cloud. A empresa precisa ser capaz de registrar dados de vários perímetros do VPC Service Controls nesse projeto de registros compartilhados, que está no próprio perímetro. O projeto de registros não pode acessar outros recursos além dos registros.

Suponha que você definiu os três perímetros a seguir:

# Sensitive 1
name: accessPolicies/222/servicePerimeters/Sensitive1
status:
  resources:
  - projects/111
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
  - logging.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: Sensitive Data 1
# Sensitive 2
name: accessPolicies/222/servicePerimeters/Sensitive2
status:
  resources:
  - projects/222
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
  - logging.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: Sensitive Data 2
#Logs
name: accessPolicies/222/servicePerimeters/Logs
status:
  resources:
  - projects/777
  restrictedServices:
  - logging.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: Logs Perimeter

Para permitir que Sensitive1 e Sensitive2 gravem registros no perímetro de registros, defina a seguinte regra de saída em um arquivo e salve o arquivo como logsegress.yaml:

echo """
- egressTo:
    operations:
    - serviceName: logging.googleapis.com
      methodSelectors:
      - method: LoggingServiceV2.WriteLogEntries
      - method: LoggingService.WriteLogEntries
    resources:
    - projects/777
  egressFrom:
    identityType: ANY_IDENTITY
""" > logsegress.yaml

Aplique as regras de saída executando os seguintes comandos:

gcloud beta access-context-manager perimeters update Sensitive1 --set-egress-policies=logsegress.yaml
gcloud beta access-context-manager perimeters update Sensitive2 --set-egress-policies=logsegress.yaml

Uma configuração semelhante pode ser especificada para qualquer outro perímetro de dados confidenciais que precise gravar no perímetro de registros.

A seguir