Intercambio seguro de datos con reglas de entrada y salida

En este documento, se describen casos de uso comunes para el intercambio de datos seguro y configuraciones de ejemplo a fin de permitir el acceso entre clientes y recursos separados por perímetros de servicio.

Para obtener una descripción general de las reglas de entrada y salida, consulta Reglas de entrada y salida.

A fin de obtener instrucciones para configurar las políticas de reglas de entrada y salida, consulta Configura las políticas de entrada y salida.

Ejemplos de configuración de casos prácticos de intercambio de datos seguros

En esta sección, se incluyen ejemplos de casos de uso de intercambio de datos de forma segura entre perímetros de servicio.

Accede a un recurso de Google Cloud fuera del perímetro

En el siguiente diagrama, se muestra un recurso de Compute Engine dentro de un perímetro de servicio que requiere acceso a un recurso de Cloud Storage, que está fuera del perímetro:

Salida desde un perímetro

Supongamos que definiste el siguiente perímetro:

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

Debes otorgar acceso de lectura a un bucket de Cloud Storage en project 999, que se encuentra en una organización diferente. Luego, debes definir la siguiente regla de salida en un archivo y guardarla 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

Ejecuta el siguiente comando para aplicar la regla de entrada:

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

Para obtener más información sobre el comando gcloud access-context-manager perimeters update, consulta actualización de perímetros de access-context-managerde de gcloud .

Comparte datos mediante Pub/Sub entre dos organizaciones que usan los Controles del servicio de VPC

En el siguiente diagrama, se muestran dos organizaciones, Org1 y Org2, que usan los Controles del servicio de VPC y comparten datos mediante un tema de Pub/Sub:

Salida desde un perímetro y entrada en otro perímetro

Supongamos que definiste los siguientes 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 habilitar el intercambio de datos, Org1 debe definir la siguiente regla de salida que permite la suscripción y guarda el archivo 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 debe definir una regla de entrada correspondiente que permita la suscripción y guardar el archivo 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

Ejecuta los siguientes comandos para aplicar las reglas de entrada y salida:

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

Comparte datos anónimos de PHI con una organización asociada

En el siguiente diagrama, se muestra un perímetro alrededor de un segmento de datos de Información de salud protegida (PHI), un segundo perímetro alrededor de un segmento de datos anonimizado y una organización de socio independiente. El segmento de PHI puede manipular los datos en el segmento de datos anónimos y los datos del segmento de datos anonimizado se comparten con la organización del socio.

Entrada del perímetro y salida del perímetro

Deseas definir reglas de entrada y salida que permitan compartir datos anónimos con la organización asociada y permitir que tu segmento de la PHI manipule los datos en el segmento de datos anonimizado.

Supongamos que definiste los siguientes 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

También puedes suponer que el proyecto de la organización del socio es 999. Puedes definir las siguientes reglas de entrada y salida:

# 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

Ejecuta los siguientes comandos para aplicar las reglas de entrada y salida:

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

Otorga acceso a una imagen de disco de Compute Engine de terceros

En el siguiente diagrama, se muestra un recurso de Compute Engine en un perímetro de servicio que requiere acceso a una imagen de disco de Compute Engine en un proyecto de imagen de terceros que está fuera del perímetro:

Salida al proyecto de imagen

Supongamos que definiste el siguiente perímetro:

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

Ahora debes otorgar acceso de lectura a las imágenes de disco en project 999, que se encuentra en una organización diferente. Luego, debes definir la siguiente regla de salida en un archivo y guardarla como compute.yaml:

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

Ejecuta el siguiente comando para aplicar la regla de entrada:

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

Permite un acceso privado desde una red de VPC fuera del perímetro para leer un conjunto de datos de BigQuery

En el siguiente diagrama, se muestran varias redes de VPC de socios fuera del perímetro que deben leer de un recurso de BigQuery dentro de un perímetro:

Salida al proyecto de imagen

Puedes suponer que usas el mismo perímetro que en el ejemplo 1:

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

Tu objetivo es permitir el acceso de lectura desde una red de VPC fuera del perímetro de varios socios. Define la siguiente regla de entrada en un archivo y guárdala 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

Ejecuta el siguiente comando para aplicar la regla de entrada:

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

Para obtener más flexibilidad y control, BigQuery usa - permission: methodSelectors en lugar del - method: methodSelectors que usan la mayoría de los servicios. Un solo método de BigQuery (RunQuery) puede operar de distintas maneras en varios recursos diferentes, y alinearse con el modelo de permisos proporciona más flexibilidad y control.

Permite el acceso privado desde una red de VPC fuera del perímetro para cargar en un bucket de Cloud Storage (escritura)

Puedes suponer que usas el mismo perímetro que en el ejemplo 1:

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

Tu objetivo es permitir el acceso desde una red de VPC fuera del perímetro para que un socio escriba datos en el bucket dentro del perímetro. Debes definir una regla de entrada y guardar el archivo 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

Ejecuta el siguiente comando para aplicar la regla de entrada:

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

Permite que los proyectos de varios perímetros compartan registros en un perímetro independiente

En este caso práctico, supongamos que una empresa tiene un proyecto compartido para la recopilación de datos de registro de toda su implementación de Google Cloud. La empresa debe poder registrar datos de diferentes perímetros de los Controles del servicio de VPC en el proyecto de registros compartidos, que se encuentra en su propio perímetro. El proyecto de registros no debería acceder a ningún otro recurso que no sea el de los registros.

Supongamos que definiste estos tres perímetros:

# 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 y Sensitive2 escriban registros en el perímetro de registros, define la siguiente regla de salida en un archivo y guárdalo 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

Aplica las reglas de salida mediante la ejecución de los siguientes 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

Se puede especificar una configuración similar para cualquier otro perímetro de datos sensibles que deba escribir en el perímetro de registro.

¿Qué sigue?