Utilizza i Controlli di servizio VPC con gli endpoint del catalogo federato

Nel catalogo di runtime Lakehouse, le regole del perimetro dei Controlli di servizio VPC per gli endpoint del catalogo federato ti consentono di eseguire query su tabelle Apache Iceberg esterne in BigQuery, contribuendo al contempo a prevenire l'esfiltrazione di dati. Quando i tuoi progetti o bucket Cloud StorageGoogle Cloud si trovano all'interno di un perimetro di servizio, puoi configurare regole in uscita per Amazon S3 e Microsoft Azure Data Lake Storage (ADLS) Gen2 o regole in entrata per Cloud Storage. Queste regole autorizzano la sincronizzazione dei metadati e le query per le tabelle registrate in AWS Glue Data Catalog, Databricks Unity Catalog, Snowflake Horizon Catalog e Workday Data Lake.

Se i tuoi progetti non si trovano all'interno di un perimetro di servizio, gli endpoint del catalogo federato funzionano senza alcuna configurazione dei Controlli di servizio VPC. Per le connessioni cross-cloud a SAP Business Data Cloud (SAP BDC), consulta Configurazione dei Controlli di servizio VPC per SAP BDC. Per proteggere i bucket a cui si accede tramite l'endpoint del catalogo REST Apache Iceberg in modalità di distribuzione delle credenziali, consulta Utilizza i Controlli di servizio VPC con la distribuzione delle credenziali.

Prima di iniziare

  1. Configura un endpoint del catalogo federato per AWS Glue Data Catalog, Databricks Unity Catalog, Snowflake Horizon Catalog o Workday Data Lake.
  2. Crea uno o più perimetri di servizio per i tuoi progetti, a seconda di dove sono archiviati i file delle tabelle:

  3. Se utenti o service account esterni al perimetro eseguono query sull'endpoint del catalogo federato, aggiungi una regola in entrata che li ammetta al perimetro del progetto dell'endpoint del catalogo.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare i perimetri di servizio, chiedi all'amministratore di concederti i seguenti ruoli IAM nella tua organizzazione:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Casi d'uso e regole perimetrali obbligatorie

Le regole del perimetro che configuri dipendono dalla posizione dei file delle tabelle e da dove vengono eseguiti i chiamanti delle query:

Caso d'uso Regola del perimetro obbligatoria Passaggi di configurazione
Esegui query su tabelle cross-cloud in Amazon S3 o ADLS Gen2: esegui query su tabelle Apache Iceberg in bucket s3:// o container abfss:// tramite un endpoint del catalogo federato in un progetto BigQuery protetto, bloccando al contempo il traffico in uscita esterno non autorizzato. Aggiungi una regola in uscita nel perimetro del progetto dell'endpoint del catalogo che consenta sia al account di servizio blirc-... dell'endpoint del catalogo sia alle entità di query di leggere i bucket o i container esterni approvati. Trova l'account di servizio dell'endpoint del catalogo, quindi aggiungi una regola in uscita per lo spazio di archiviazione sul cloud esterno.
Accedi alle tabelle del catalogo esterno nei bucket Cloud Storage protetti: esegui query sulle tabelle Databricks Unity Catalog o Snowflake Horizon Catalog archiviate in un bucket gs:// all'interno di un perimetro che limita storage.googleapis.com (anche nello stesso progetto e perimetro dell'endpoint del catalogo federato). Aggiungi una regola in entrata sul perimetro del progetto del bucket Cloud Storage che consenta al service account Google Cloud del catalogo remoto di accedere a storage.googleapis.com. Aggiungi una regola in entrata per i bucket Cloud Storage in un perimetro di servizio.
Consenti query da chiamanti esterni al perimetro dell'endpoint del catalogo: esegui job BigQuery nel progetto dell'endpoint del catalogo da account di analisti, strumenti di BI o service account dei workload situati all'esterno del perimetro. Aggiungi una regola in entrata nel perimetro del progetto dell'endpoint del catalogo che ammette i chiamanti esterni a bigquery.googleapis.com e biglake.googleapis.com, oltre alla regola di archiviazione per la posizione della tabella. Configura l'accesso del chiamante utilizzando il riferimento alle regole di accesso, quindi segui la procedura di archiviazione per la posizione della tabella.

In che modo i Controlli di servizio VPC valutano il traffico degli endpoint del catalogo federato

Un endpoint del catalogo federato esegue due operazioni distinte che leggono dallo spazio di archiviazione sottostante: la sincronizzazione dei metadati e le query BigQuery. Il modo in cui i Controlli di servizio VPC valutano queste operazioni dipende dalla posizione in cui sono archiviati i file delle tabelle:

  • Cloud spazio di archiviazione sul cloud (Amazon S3 o Azure Data Lake Storage Gen2): i Controlli di servizio VPC valutano il traffico in uscita dal perimetro di servizio del progetto dell'endpoint del catalogo rispetto all'identità del chiamante suGoogle Cloud e al bucket o container esterno di destinazione:

    Operazione Identità valutata Risorsa valutata
    Sincronizzazione dei metadati Il account di servizio Lakehouse con provisioning automatico dell'endpoint del catalogo (blirc-PROJECT_NUMBER-ID@gcp-sa-biglakerestcatalog.iam.gserviceaccount.com) Il bucket o container esterno che contiene i metadati Apache Iceberg della tabella
    Query L'account utente o di servizio che esegue il job BigQuery I bucket o i container esterni che contengono i file di metadati e di dati della tabella

    Per le tabelle archiviate in Amazon S3 o ADLS Gen2, la regola in uscita del perimetro deve includere quanto segue:

    • Identità: sia il account di servizio dell'endpoint del catalogo sia le entità della query.
    • Risorse esterne: ogni bucket o container utilizzato dalle tabelle per i file di metadati e di dati.
    • Operazioni: sia bigquery.googleapis.com (con l'autorizzazione externalResource.read) sia biglake.googleapis.com (con tutti i metodi, '*').
  • Cloud Storage (Databricks Unity Catalog o Snowflake Horizon Catalog, posizioni esterne su Google Cloud): sia durante la sincronizzazione dei metadati sia durante le query BigQuery, BigQuery e Lakehouse leggono da Cloud Storage utilizzando le credenziali con ambito ridotto fornite dal catalogo remoto anziché dal account di servizio account blirc-... dell'endpoint del catalogo. Quando il progetto del bucket Cloud Storage si trova all'interno di un perimetro di servizio che limita storage.googleapis.com, storage.googleapis.com valuta il service account del catalogo remoto Google Cloud come un'identità esterna che tenta l'ingresso nel perimetro. Questa valutazione si applica anche quando il bucket si trova nello stesso progetto e nello stesso perimetro di servizio dell'endpoint del catalogo federato. Devi aggiungere una regola in entrata al perimetro di servizio del progetto del bucket che consenta al service accountGoogle Cloud del catalogo remoto di accedere a storage.googleapis.com.

I Controlli di servizio VPC valutano solo le letture dello spazio di archiviazione eseguite da BigQuery e Lakehouse (biglake.googleapis.com). Non valutano le chiamate effettuate da Lakehouse all'endpoint API del catalogo remoto (ad esempio l'elenco di spazi dei nomi e tabelle) e non regolano i motori di query esterni che leggono direttamente lo spazio di archiviazione.

Formati delle risorse esterne

Specifica le risorse esterne nelle regole in uscita come URI esatto del bucket o del container. I percorsi degli oggetti e i caratteri jolly non sono supportati. I nomi dei bucket, dei container e degli account di archiviazione devono essere in minuscolo. Le regole che contengono caratteri maiuscoli in questi nomi vengono rifiutate quando le salvi. Gli URI di Azure Data Lake Storage Gen2 (abfss://) e Azure Blob Storage (azure://) non sono intercambiabili nelle regole in uscita dei Controlli di servizio VPC. Per gli endpoint del catalogo federato, devi specificare il formato abfss://.

La tabella seguente mostra i formati URI delle risorse esterne supportati per gli endpoint del catalogo federato:

Servizio di archiviazione Formato Esempio
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

Trova il account di servizio dell'endpoint del catalogo

Lakehouse esegue il provisioning di un account di servizio dedicato per ogni endpoint del catalogo federato quando crei l'endpoint del catalogo. Per le tabelle in Cloud Storage, vai a Aggiungi una regola in entrata per i bucket Cloud Storage in un perimetro di servizio. Se le tabelle sono archiviate in Amazon S3 o ADLS Gen2, recupera questo indirizzo email del account di servizio per la regola in uscita:

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

Sostituisci quanto segue:

  • CATALOG_ID: l'ID dell'endpoint del catalogo federato.
  • PROJECT_ID: l'ID del progetto Google Cloudche contiene l'endpoint del catalogo federato.

Il comando restituisce un indirizzo email nel seguente formato:

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

Aggiungi una regola in uscita per lo spazio di archiviazione sul cloud esterno

Se le tabelle a cui accedi tramite l'endpoint del catalogo federato sono archiviate in Amazon S3 o ADLS Gen2, aggiungi una regola in uscita al perimetro di servizio che protegge il progetto dell'endpoint del catalogo.

Console

  1. Nella console Google Cloud , vai alla pagina Controlli di servizio VPC.

    Vai a Controlli di servizio VPC

  2. Seleziona la tua organizzazione e la policy di accesso, quindi fai clic sul nome del perimetro di servizio che contiene il progetto dell'endpoint del catalogo.

  3. Fai clic su Modifica e poi, nella sezione Policy in uscita, fai clic su Aggiungi una regola in uscita.

  4. Nella sezione Da, in Identità, seleziona Seleziona identità e gruppi, fai clic su Aggiungi identità e aggiungi il account di servizio dell'endpoint del catalogo e gli utenti o i service account che eseguono query.

  5. Nella sezione A:

    1. Seleziona Risorse esterne, fai clic su Aggiungi risorse, inserisci ogni bucket s3:// o container abfss:// utilizzato dalle tabelle e fai clic su Aggiungi risorse esterne.
    2. In Operazioni o ruoli IAM, configura i seguenti servizi nella tabella Operazioni API:
      • API BigQuery (bigquery.googleapis.com): per limitare la voce predefinita di tutti i metodi (*) all'accesso di sola lettura, apri il menu Azioni per bigquery.googleapis.com e fai clic su Modifica, seleziona Seleziona metodi, seleziona l'autorizzazione externalResource.read e fai clic su Aggiungi metodi selezionati.
      • API BigLake (biglake.googleapis.com): fai clic su Aggiungi operazioni, seleziona API BigLake (biglake.googleapis.com), seleziona Tutti i metodi e fai clic su Aggiungi tutti i metodi.
  6. Fai clic su Salva.

gcloud CLI

  1. Crea un file denominato egress.yaml che specifichi il account di servizio dell'endpoint del catalogo, le entità della query e ogni bucket o container esterno utilizzato dalle tabelle. Per lo schema completo, consulta il riferimento per le regole in uscita.

    - 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: '*'
    

    Sostituisci quanto segue:

    • CATALOG_ENDPOINT_SERVICE_ACCOUNT: l'indirizzo email del account di servizio dell'endpoint del catalogo che hai recuperato in precedenza.
    • QUERY_USER_EMAIL: l'indirizzo email di un utente o di un account di servizio che esegue query tramite l'endpoint del catalogo federato. Per un account di servizio, utilizza il prefisso serviceAccount: anziché user:. In alternativa, sostituisci identities con identityType: ANY_IDENTITY per consentire l'accesso a qualsiasi entità nel perimetro.
    • S3_BUCKET_NAME, ADLS_CONTAINER e STORAGE_ACCOUNT: le posizioni di archiviazione esterne che contengono i metadati e i file di dati della tabella. Includi solo le voci applicabili al tuo provider di spazio di archiviazione.
  2. Trova l'ID numerico della policy di accesso della tua organizzazione:

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

    Sostituisci ORGANIZATION_ID con l'ID numerico dell'organizzazione.

  3. Applica la regola in uscita al perimetro di servizio:

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

    Sostituisci quanto segue:

    • PERIMETER_NAME: il nome del perimetro di servizio.
    • POLICY_ID: l'ID numerico della policy di accesso.

    Per testare la regola prima di applicarla, applicala a una configurazione dry run utilizzando gcloud access-context-manager perimeters dry-run update e applicala dopo la convalida utilizzando gcloud access-context-manager perimeters dry-run enforce.

  4. Verifica che la regola sia attiva:

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

Aggiungi una regola in entrata per i bucket Cloud Storage in un perimetro di servizio

Se le tabelle di un catalogo remoto (come Databricks Unity Catalog o Snowflake Horizon Catalog) sono archiviate in un bucket Cloud Storage protetto da un perimetro che limita storage.googleapis.com, aggiungi una regola in entrata al perimetro di servizio del progetto del bucket. Poiché BigQuery e Lakehouse si autenticano in Cloud Storage utilizzando il service account Google Cloud del catalogo remoto (non il service account blirc-...), questa regola è obbligatoria anche quando il bucket si trova nello stesso progetto e nello stesso perimetro dell'endpoint del catalogo federato.

Console

  1. Nella console Google Cloud , vai alla pagina Controlli di servizio VPC.

    Vai a Controlli di servizio VPC

  2. Seleziona l'organizzazione e la policy di accesso, quindi fai clic sul nome del perimetro di servizio che protegge il progetto contenente il bucket Cloud Storage.

  3. Fai clic su Modifica e poi, nella sezione Policy in entrata, fai clic su Aggiungi una regola in entrata.

  4. Nella sezione Da:

    1. In Identità, seleziona Seleziona identità e gruppi, fai clic su Aggiungi identità e aggiungi il service account Google Cloud di cui il catalogo remoto ha eseguito il provisioning per il tuo bucket Cloud Storage.
    2. In Origini, seleziona Tutte le origini (o seleziona Seleziona origini per specificare un livello di accesso).
  5. Nella sezione A:

    1. In Risorse, seleziona Seleziona risorse. Nella scheda Progetti, fai clic su Aggiungi progetti, seleziona il progetto che contiene il bucket Cloud Storage e fai clic su Aggiungi progetti selezionati.
    2. In Operazioni o ruoli IAM, seleziona Seleziona operazioni, fai clic su Aggiungi operazioni, seleziona API Cloud Storage (storage.googleapis.com), seleziona Tutti i metodi e fai clic su Aggiungi tutti i metodi. In alternativa, seleziona Seleziona metodi per scegliere metodi di servizio supportati specifici (ad esempio google.storage.objects.get, google.storage.objects.list e google.storage.buckets.get) e fai clic su Aggiungi metodi selezionati.
  6. Fai clic su Salva.

gcloud CLI

  1. Crea un file denominato ingress.yaml che consenta al service accountGoogle Cloud del catalogo remoto di accedere a storage.googleapis.com nel progetto del bucket. Per lo schema completo, consulta il riferimento per le regole in entrata.

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

    Sostituisci quanto segue:

    • REMOTE_CATALOG_GCS_SERVICE_ACCOUNT: l'indirizzo email del service accountGoogle Cloud di cui il catalogo remoto ha eseguito il provisioning per accedere al bucket Cloud Storage (ad esempio, da DESCRIBE STORAGE CREDENTIAL in Databricks Unity Catalog o DESC EXTERNAL VOLUME in Snowflake Horizon Catalog).
    • BUCKET_PROJECT_NUMBER: il numero di progetto numerico del progetto che contiene il bucket Cloud Storage.
  2. Trova l'ID numerico della policy di accesso della tua organizzazione:

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

    Sostituisci ORGANIZATION_ID con l'ID numerico dell'organizzazione.

  3. Applica la regola di ingresso al perimetro di servizio che protegge il progetto del bucket:

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

    Sostituisci quanto segue:

    • BUCKET_PERIMETER_NAME: il nome del perimetro di servizio che protegge il progetto del bucket.
    • POLICY_ID: l'ID numerico della policy di accesso.

    Per testare la regola prima di applicarla, applicala a una configurazione dry run utilizzando gcloud access-context-manager perimeters dry-run update e applicala dopo la convalida utilizzando gcloud access-context-manager perimeters dry-run enforce.

  4. Verifica che la regola sia attiva:

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

Verificare la configurazione

La propagazione degli aggiornamenti delle policy del perimetro di servizio può richiedere fino a 30 minuti. Dopo l'applicazione della regola, verifica che la sincronizzazione dei metadati e le query BigQuery vengano completate senza rifiuti dei Controlli di servizio VPC:

  1. Attendi il completamento del ciclo di sincronizzazione dei metadati pianificato successivo, quindi controlla gli audit log con negazione delle policy in Cloud Audit Logs per verificare che non si verifichino violazioni dei Controlli di servizio VPC. La sincronizzazione viene eseguita automaticamente in base alla pianificazione di aggiornamento e non può essere attivata manualmente.

    In Esplora log, seleziona il progetto protetto: il progetto dell'endpoint del catalogo per lo spazio di spazio di archiviazione sul cloud esterno o il progetto del bucket Cloud Storage per le tabelle Cloud Storage. Per saperne di più, consulta Recupera gli errori dei Controlli di servizio VPC dagli audit log. Esegui questa query:

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

    Se le voci di violazione vengono visualizzate dopo la propagazione della regola, controlla i campi egressViolations.targetResource, ingressViolations.targetResource e authenticationInfo.principalEmail nella voce di log per verificare che corrispondano alle risorse e alle identità nella regola. Se la sincronizzazione delle nuove tabelle non riesce e non vengono visualizzate voci VpcServiceControlAuditMetadata, controlla le autorizzazioni e le credenziali del catalogo remoto. Consulta Risolvi i problemi di accesso ai dati cross-cloud.

  2. Esegui una query di test su una tabella in BigQuery utilizzando la convenzione di denominazione P.C.N.T (Project.Catalog.Namespace.Table) in quattro parti:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto Google Cloudche contiene l'endpoint del catalogo federato.
    • CATALOG_ID: l'ID dell'endpoint del catalogo federato.
    • NAMESPACE: lo spazio dei nomi nell'endpoint del catalogo federato.
    • TABLE_NAME: il nome di una tabella nello spazio dei nomi.

    Se una query è bloccata dai Controlli di servizio VPC, il messaggio di errore include un valore vpcServiceControlsUniqueIdentifier. Filtra gli audit log di policy rifiutate in Esplora log facendo corrispondere protoPayload.metadata.vpcServiceControlsUniqueId a questo identificatore:

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

    Sostituisci UNIQUE_IDENTIFIER con il valore vpcServiceControlsUniqueIdentifier del messaggio di errore.

Passaggi successivi