Usa los Controles del servicio de VPC con extremos de catálogo federados

En el catálogo de tiempo de ejecución de Lakehouse, las reglas perimetrales de los Controles del servicio de VPC para los extremos de catálogo federados te permiten consultar tablas externas de Apache Iceberg en BigQuery y, al mismo tiempo, ayudan a evitar el robo de datos. Cuando tus proyectos deGoogle Cloud o buckets de Cloud Storage residen dentro de un perímetro de servicio, puedes configurar reglas de salida para Amazon S3 y Microsoft Azure Data Lake Storage (ADLS) Gen2 o reglas de entrada para Cloud Storage. Estas reglas autorizan la sincronización de metadatos y las consultas para las tablas registradas en AWS Glue Data Catalog, Databricks Unity Catalog, Snowflake Horizon Catalog y Workday Data Lake.

Si tus proyectos no están dentro de un perímetro de servicio, los extremos del catálogo federado funcionan sin ninguna configuración de los Controles del servicio de VPC. Para las conexiones multinube a SAP Business Data Cloud (SAP BDC), consulta Configuración de los Controles del servicio de VPC para SAP BDC. Para proteger los buckets a los que se accede a través del extremo del catálogo de REST de Apache Iceberg en el modo de entrega de credenciales, consulta Usa los Controles del servicio de VPC con la entrega de credenciales.

Antes de comenzar

  1. Configura un extremo de catálogo federado para el catálogo de datos de AWS Glue, el catálogo de Databricks Unity, el catálogo de Snowflake Horizon o el data lake de Workday.
  2. Crea uno o más perímetros de servicio para tus proyectos, según dónde se almacenen los archivos de tabla:

  3. Si los usuarios o las cuentas de servicio fuera del perímetro consultan el extremo del catálogo federado, agrega una regla de entrada que los admita en el perímetro del proyecto del extremo del catálogo.

Roles obligatorios

Para obtener los permisos que necesitas para configurar perímetros de servicio, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu organización:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Casos de uso y reglas de perímetro requeridas

Las reglas de perímetro que configures dependen de dónde residen los archivos de tabla y dónde se ejecutan los emisores de consultas:

Caso de uso Regla de perímetro obligatoria Pasos de configuración
Consulta tablas multinube en Amazon S3 o ADLS Gen2: Consulta tablas de Apache Iceberg en buckets de s3:// o contenedores de abfss:// a través de un extremo de catálogo federado en un proyecto de BigQuery protegido, mientras bloqueas la salida externa no autorizada. Agrega una regla de salida en el perímetro del proyecto del extremo del catálogo que permita que tanto la cuenta de servicio blirc-... del extremo del catálogo como tus principales de consulta lean los buckets o contenedores externos aprobados. Busca la cuenta de servicio del extremo del catálogo y, luego, agrega una regla de salida para el almacenamiento externo en la nube.
Accede a tablas de catálogos externos en buckets de Cloud Storage protegidos: Consulta tablas de Databricks Unity Catalog o Snowflake Horizon Catalog almacenadas en un bucket de gs:// dentro de un perímetro que restringe storage.googleapis.com (incluso en el mismo proyecto y perímetro que el extremo del catálogo federado). Agrega una regla de entrada en el perímetro del proyecto del bucket de Cloud Storage que permita que la cuenta de servicio de Google Cloud del catálogo remoto acceda a storage.googleapis.com. Agrega una regla de entrada para los buckets de Cloud Storage en un perímetro de servicio.
Permitir consultas de emisores fuera del perímetro del extremo del catálogo: Ejecuta trabajos de BigQuery en el proyecto del extremo del catálogo desde cuentas de analistas, herramientas de IE o cuentas de servicio de cargas de trabajo ubicadas fuera del perímetro. Agrega una regla de entrada en el perímetro del proyecto de extremo del catálogo que admita los emisores externos a bigquery.googleapis.com y biglake.googleapis.com, además de la regla de almacenamiento para la ubicación de tu tabla. Configura la entrada del emisor con la referencia de reglas de entrada y, luego, sigue el procedimiento de almacenamiento para la ubicación de tu tabla.

Cómo los Controles del servicio de VPC evalúan el tráfico de los extremos del catálogo federado

Un extremo de catálogo federado realiza dos operaciones distintas que leen desde tu almacenamiento subyacente: la sincronización de metadatos y las consultas de BigQuery. La forma en que los Controles del servicio de VPC evalúan estas operaciones depende de dónde se almacenen los archivos de la tabla:

  • Almacenamiento en la nube externo (Amazon S3 o Azure Data Lake Storage Gen2): Los Controles del servicio de VPC evalúan la salida del perímetro de servicio del proyecto de extremo del catálogo en relación con la identidad del emisor en Google Cloud y el bucket o contenedor externo de destino:

    Operación Identidad evaluada Recurso evaluado
    Sincronización de metadatos La cuenta de servicio de Lakehouse aprovisionada automáticamente del extremo del catálogo (blirc-PROJECT_NUMBER-ID@gcp-sa-biglakerestcatalog.iam.gserviceaccount.com) El bucket o contenedor externo que contiene los metadatos de Apache Iceberg de la tabla
    Consulta Es el usuario o la cuenta de servicio que ejecuta el trabajo de BigQuery. Los buckets o contenedores externos que contienen los metadatos y los archivos de datos de la tabla

    En el caso de las tablas almacenadas en Amazon S3 o ADLS Gen2, la regla de salida de tu perímetro debe incluir todo lo siguiente:

    • Identidades: la cuenta de servicio del extremo del catálogo y tus principales de consulta.
    • Recursos externos: Cada bucket o contenedor que usan tus tablas para los metadatos y los archivos de datos.
    • Operaciones: bigquery.googleapis.com (con el permiso externalResource.read) y biglake.googleapis.com (con todos los métodos, '*').
  • Cloud Storage (ubicaciones externas de Databricks Unity Catalog o Snowflake Horizon Catalog en Google Cloud): Durante la sincronización de metadatos y las consultas de BigQuery, BigQuery y Lakehouse leen de Cloud Storage con las credenciales de alcance reducido que vende el catálogo remoto, en lugar de la cuenta de servicio blirc-... del extremo del catálogo. Cuando el proyecto del bucket de Cloud Storage está dentro de un perímetro de servicio que restringe storage.googleapis.com, storage.googleapis.com evalúa la cuenta de servicio de Google Cloud del catálogo remoto como una identidad externa que intenta ingresar al perímetro. Esta evaluación se aplica incluso cuando el bucket se encuentra en el mismo proyecto y perímetro de servicio que el extremo del catálogo federado. Debes agregar una regla de entrada al perímetro de servicio del proyecto del bucket que permita que la cuenta de servicio del catálogo remoto Google Cloud acceda a storage.googleapis.com.

Los Controles del servicio de VPC solo evalúan las lecturas de almacenamiento que realizan BigQuery y Lakehouse (biglake.googleapis.com). No evalúan las llamadas que Lakehouse realiza al extremo de API del catálogo remoto (como enumerar espacios de nombres y tablas) ni rigen los motores de consultas externos que leen tu almacenamiento directamente.

Formatos de recursos externos

Especifica los recursos externos en las reglas de salida como un URI exacto de bucket o contenedor. No se admiten rutas de acceso de objetos ni comodines. Los nombres de los buckets, los contenedores y las cuentas de almacenamiento deben estar en minúsculas. Las reglas que contienen caracteres en mayúscula en estos nombres se rechazan cuando guardas la regla. Los URIs de Azure Data Lake Storage Gen2 (abfss://) y Azure Blob Storage (azure://) no son intercambiables en las reglas de salida de los Controles del servicio de VPC. Para los extremos de catálogo federados, debes especificar el formato abfss://.

En la siguiente tabla, se muestran los formatos de URI de recursos externos admitidos para los extremos de catálogo federados:

Servicio de almacenamiento Formato Ejemplo
Amazon S3 s3://BUCKET_NAME s3://my-iceberg-warehouse
Azure Data Lake Storage Gen2 abfss://CONTAINER@STORAGE_ACCOUNT.dfs.core.windows.net abfss://unity-catalog-storage@mystorageaccount.dfs.core.windows.net

Busca la cuenta de servicio del extremo del catálogo

Lakehouse aprovisiona una cuenta de servicio dedicada para cada extremo de catálogo federado cuando creas el extremo de catálogo. En el caso de las tablas de Cloud Storage, ve a Agrega una regla de entrada para los buckets de Cloud Storage en un perímetro de servicio. Si tus tablas se almacenan en Amazon S3 o ADLS Gen2, recupera esta dirección de correo electrónico de la cuenta de servicio para tu regla de salida:

gcloud biglake iceberg catalogs describe CATALOG_ID \
    --project=PROJECT_ID \
    --format='value(biglake-service-account)'

Reemplaza lo siguiente:

  • CATALOG_ID: Es el ID del extremo del catálogo federado.
  • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene el extremo del catálogo federado.

El comando devuelve una dirección de correo electrónico con el siguiente formato:

blirc-PROJECT_NUMBER-ID@gcp-sa-biglakerestcatalog.iam.gserviceaccount.com

Agrega una regla de salida para el almacenamiento en la nube externo

Si las tablas a las que se accede a través del extremo del catálogo federado se almacenan en Amazon S3 o ADLS Gen2, agrega una regla de salida al perímetro de servicio que protege el proyecto del extremo del catálogo.

Console

  1. En la consola de Google Cloud , ve a la página Controles del servicio de VPC.

    Ir a los Controles del servicio de VPC

  2. Selecciona tu organización y política de acceso y, luego, haz clic en el nombre del perímetro de servicio que contiene tu proyecto de extremo de catálogo.

  3. Haz clic en Editar y, luego, en la sección Política de salida, haz clic en Agregar una regla de salida.

  4. En la sección De, en Identidades, selecciona Seleccionar identidades y grupos, haz clic en Agregar identidades y agrega la cuenta de servicio del extremo del catálogo y los usuarios o las cuentas de servicio que ejecutan consultas.

  5. En la sección Para, haz lo siguiente:

    1. Selecciona Recursos externos, haz clic en Agregar recursos, ingresa cada bucket de s3:// o contenedor de abfss:// que usan tus tablas y haz clic en Agregar recursos externos.
    2. En Operaciones o roles de IAM, configura los siguientes servicios en la tabla Operaciones de la API:
      • API de BigQuery (bigquery.googleapis.com): Para restringir la entrada predeterminada de todos los métodos (*) al acceso de solo lectura, abre el menú de acciones de bigquery.googleapis.com y haz clic en Editar, selecciona Seleccionar métodos, elige el permiso externalResource.read y haz clic en Agregar métodos seleccionados.
      • API de BigLake (biglake.googleapis.com): Haz clic en Agregar operaciones, selecciona API de BigLake (biglake.googleapis.com), selecciona Todos los métodos y haz clic en Agregar todos los métodos.
  6. Haz clic en Guardar.

gcloud CLI

  1. Crea un archivo llamado egress.yaml que especifique la cuenta de servicio del extremo del catálogo, las principales de consulta y cada bucket o contenedor externo que usen tus tablas. Para ver el esquema completo, consulta la referencia de las reglas de salida.

    - egressFrom:
        identities:
        - serviceAccount:CATALOG_ENDPOINT_SERVICE_ACCOUNT
        - user:QUERY_USER_EMAIL
      egressTo:
        externalResources:
        - s3://S3_BUCKET_NAME
        - abfss://ADLS_CONTAINER@STORAGE_ACCOUNT.dfs.core.windows.net
        operations:
        - serviceName: bigquery.googleapis.com
          methodSelectors:
          - permission: externalResource.read
        - serviceName: biglake.googleapis.com
          methodSelectors:
          - method: '*'
    

    Reemplaza lo siguiente:

    • CATALOG_ENDPOINT_SERVICE_ACCOUNT: Es la dirección de correo electrónico de la cuenta de servicio del extremo del catálogo que recuperaste antes.
    • QUERY_USER_EMAIL: Es la dirección de correo electrónico de un usuario o una cuenta de servicio que ejecuta consultas a través del extremo del catálogo federado. Para una cuenta de servicio, usa el prefijo serviceAccount: en lugar de user:. Como alternativa, reemplaza identities por identityType: ANY_IDENTITY para permitir cualquier principal en el perímetro.
    • S3_BUCKET_NAME, ADLS_CONTAINER y STORAGE_ACCOUNT: Son las ubicaciones de almacenamiento externo que contienen los metadatos y los archivos de datos de la tabla. Incluye solo las entradas que se aplican a tu proveedor de almacenamiento.
  2. Busca el ID numérico de la política de acceso de tu organización:

    gcloud access-context-manager policies list \
        --organization=ORGANIZATION_ID \
        --format='value(name)'
    

    Reemplaza ORGANIZATION_ID por el ID numérico de tu organización.

  3. Aplica la regla de salida a tu perímetro de servicio:

    gcloud access-context-manager perimeters update PERIMETER_NAME \
        --policy=POLICY_ID \
        --set-egress-policies=egress.yaml
    

    Reemplaza lo siguiente:

    • PERIMETER_NAME: Es el nombre de tu perímetro de servicio.
    • POLICY_ID: Es el ID numérico de tu política de acceso.

    Para probar la regla antes de aplicarla, aplícala a una configuración de ejecución de prueba con gcloud access-context-manager perimeters dry-run update y aplícala después de la validación con gcloud access-context-manager perimeters dry-run enforce.

  4. Verifica que la regla está activa:

    gcloud access-context-manager perimeters describe PERIMETER_NAME \
        --policy=POLICY_ID \
        --format='yaml(status.egressPolicies)'
    

Agrega una regla de entrada para los buckets de Cloud Storage en un perímetro de servicio

Si las tablas de un catálogo remoto (como Databricks Unity Catalog o Snowflake Horizon Catalog) se almacenan en un bucket de Cloud Storage protegido por un perímetro que restringe storage.googleapis.com, agrega una regla de entrada al perímetro de servicio del proyecto del bucket. Debido a que BigQuery y Lakehouse se autentican en Cloud Storage con la cuenta de servicio de Google Cloud del catálogo remoto (no la cuenta de servicio deblirc-...), esta regla es obligatoria incluso cuando el bucket está en el mismo proyecto y perímetro que el extremo del catálogo federado.

Console

  1. En la consola de Google Cloud , ve a la página Controles del servicio de VPC.

    Ir a los Controles del servicio de VPC

  2. Selecciona tu organización y política de acceso y, luego, haz clic en el nombre del perímetro de servicio que protege el proyecto que contiene tu bucket de Cloud Storage.

  3. Haz clic en Editar y, luego, en la sección Política de entrada, haz clic en Agregar una regla de entrada.

  4. En la sección De, haz lo siguiente:

    1. En Identidades, elige Seleccionar identidades y grupos, haz clic en Agregar identidades y agrega la cuenta de servicio de Google Cloud aprovisionada por el catálogo remoto para tu bucket de Cloud Storage.
    2. En Fuentes, selecciona Todas las fuentes (o elige Seleccionar fuentes para especificar un nivel de acceso).
  5. En la sección Para, haz lo siguiente:

    1. En Recursos, elige Seleccionar recursos. En la pestaña Proyectos, haz clic en Agregar proyectos, selecciona el proyecto que contiene tu bucket de Cloud Storage y haz clic en Agregar proyectos seleccionados.
    2. En Operaciones o roles de IAM, elige Operaciones seleccionadas, haz clic en Agregar operaciones, selecciona API de Cloud Storage (storage.googleapis.com), elige Todos los métodos y haz clic en Agregar todos los métodos. Como alternativa, elige Seleccionar métodos para elegir métodos de servicio compatibles específicos (como google.storage.objects.get, google.storage.objects.list y google.storage.buckets.get) y haz clic en Agregar métodos seleccionados.
  6. Haz clic en Guardar.

gcloud CLI

  1. Crea un archivo llamado ingress.yaml que permita que la cuenta de servicio Google Cloud del catálogo remoto acceda a storage.googleapis.com en el proyecto del bucket. Para obtener el esquema completo, consulta la referencia de reglas de entrada.

    - ingressFrom:
        identities:
        - serviceAccount:REMOTE_CATALOG_GCS_SERVICE_ACCOUNT
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - serviceName: storage.googleapis.com
          methodSelectors:
          - method: '*'
        resources:
        - projects/BUCKET_PROJECT_NUMBER
    

    Reemplaza lo siguiente:

    • REMOTE_CATALOG_GCS_SERVICE_ACCOUNT: Es la dirección de correo electrónico de la cuenta de servicio deGoogle Cloud aprovisionada por el catálogo remoto para acceder a tu bucket de Cloud Storage (por ejemplo, desde DESCRIBE STORAGE CREDENTIAL en Databricks Unity Catalog o DESC EXTERNAL VOLUME en Snowflake Horizon Catalog).
    • BUCKET_PROJECT_NUMBER: Es el número numérico del proyecto que contiene el bucket de Cloud Storage.
  2. Busca el ID numérico de la política de acceso de tu organización:

    gcloud access-context-manager policies list \
        --organization=ORGANIZATION_ID \
        --format='value(name)'
    

    Reemplaza ORGANIZATION_ID por el ID numérico de tu organización.

  3. Aplica la regla de entrada al perímetro de servicio que protege el proyecto del bucket:

    gcloud access-context-manager perimeters update BUCKET_PERIMETER_NAME \
        --policy=POLICY_ID \
        --set-ingress-policies=ingress.yaml
    

    Reemplaza lo siguiente:

    • BUCKET_PERIMETER_NAME: Es el nombre del perímetro de servicio que protege el proyecto del bucket.
    • POLICY_ID: Es el ID numérico de tu política de acceso.

    Para probar la regla antes de aplicarla, aplícala a una configuración de ejecución de prueba con gcloud access-context-manager perimeters dry-run update y aplícala después de la validación con gcloud access-context-manager perimeters dry-run enforce.

  4. Verifica que la regla está activa:

    gcloud access-context-manager perimeters describe BUCKET_PERIMETER_NAME \
        --policy=POLICY_ID \
        --format='yaml(status.ingressPolicies)'
    

Verifica la configuración

Las actualizaciones de las políticas de perímetro de servicio pueden tardar hasta 30 minutos en propagarse. Después de que la regla entre en vigencia, verifica que la sincronización de metadatos y las consultas de BigQuery se completen sin rechazos de los Controles del servicio de VPC:

  1. Espera a que finalice el siguiente ciclo de sincronización de metadatos programado y, luego, verifica los registros de auditoría de política denegada en los Registros de auditoría de Cloud para confirmar que no se produzcan incumplimientos de los Controles del servicio de VPC. La sincronización se ejecuta automáticamente según su programa de actualización y no se puede activar de forma manual.

    En el Explorador de registros, selecciona el proyecto protegido: el proyecto de extremo de catálogo para el almacenamiento externo en la nube o el proyecto de bucket de Cloud Storage para las tablas de Cloud Storage. Para obtener más información, consulta Recupera errores de los Controles del servicio de VPC a partir de los registros de auditoría. Ejecute la siguiente consulta:

    log_id("cloudaudit.googleapis.com/policy")
    protoPayload.metadata.@type:"type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
    

    Si aparecen entradas de incumplimiento después de que se propaga la regla, inspecciona los campos egressViolations.targetResource, ingressViolations.targetResource y authenticationInfo.principalEmail en la entrada de registro para confirmar que coincidan con los recursos y las identidades de la regla. Si las tablas nuevas no se sincronizan y no aparecen entradas de VpcServiceControlAuditMetadata, verifica los permisos y las credenciales del catálogo remoto. Consulta Soluciona problemas de acceso a datos multinube.

  2. Ejecuta una consulta de prueba en una tabla de BigQuery con la convención de nombres de cuatro partes P.C.N.T (Project.Catalog.Namespace.Table):

    SELECT COUNT(*)
    FROM `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`;
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene el extremo del catálogo federado.
    • CATALOG_ID: Es el ID del extremo del catálogo federado.
    • NAMESPACE: Es el espacio de nombres en el extremo del catálogo federado.
    • TABLE_NAME: Es el nombre de una tabla en el espacio de nombres.

    Si los Controles del servicio de VPC bloquean una consulta, el mensaje de error incluye un valor vpcServiceControlsUniqueIdentifier. Filtra los registros de auditoría de política denegada en el Explorador de registros haciendo coincidir protoPayload.metadata.vpcServiceControlsUniqueId con ese identificador:

    log_id("cloudaudit.googleapis.com/policy")
    protoPayload.metadata.@type:"type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
    protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_IDENTIFIER"
    

    Reemplaza UNIQUE_IDENTIFIER por el valor de vpcServiceControlsUniqueIdentifier del mensaje de error.

¿Qué sigue?