Crea un cluster multi-tenant utilizzando i service account

La protezione multi-tenancy basata su service account Dataproc consente di condividere un cluster con più utenti, con un insieme di account utente mappati ai service account al momento della creazione del cluster. Gli utenti possono inviare carichi di lavoro interattivi, come i notebook Jupyter, ai kernel in esecuzione sul cluster multi-tenant con ambienti utente isolati.

Quando un utente invia un job al cluster multi-tenant:

  • Il job viene eseguito come utente del sistema operativo specifico con un'entità Kerberos specifica.

  • Il job accede alle Google Cloud risorse utilizzando un service account mappato.

Questo documento mostra come creare un cluster multi-tenant Dataproc, quindi avviare e connettere un notebook Jupyter a un kernel PySpark in esecuzione sul cluster.

Considerazioni e limitazioni

Quando crei un cluster multi-tenant:

  • Il cluster è disponibile solo per gli utenti con Account Google con service account mappati. I Gruppi Google non possono essere mappati. Gli utenti non mappati non possono eseguire job sul cluster.

  • Kerberos è abilitato e configurato sul cluster per la comunicazione sicura all'interno del cluster. L'autenticazione dell'utente finale tramite Kerberos non è supportata.

  • L'accesso SSH diretto al cluster e alle funzionalità di Compute Engine, come la possibilità di eseguire script di avvio sulle VM del cluster, è bloccato. Inoltre, i job non possono essere eseguiti con sudo privilegi.

  • I workflow Dataproc non sono supportati.

Creare un cluster multi-tenant

Abiliti la funzionalità multi-tenant quando crei un cluster Dataproc.

Console

Crea un cluster Dataproc utilizzando la Google Cloud console, come segue:

  1. Nella Google Cloud console, vai alla pagina Dataproc Crea un cluster Dataproc su Compute Engine: Crea un cluster Dataproc su Compute Engine

  2. Nel riquadro Configura cluster:

    1. In Componenti:
      1. In Gateway dei componenti, seleziona Attiva gateway dei componenti.
      2. In Componenti facoltativi, seleziona Jupyter Kernel Gateway per consentire a più utenti di connettere i propri notebook Jupyter a l cluster multi-tenant.
  3. Nel riquadro Personalizza cluster:

    1. In Proprietà cluster:

      1. Per consentire l'aggiunta o la rimozione di utenti multi-tenant senza ricreare il cluster (vedi Aggiornare gli utenti del cluster multi-tenant), fai clic su Aggiungi proprietà, quindi aggiungi il prefisso dataproc, la proprietà dataproc.dynamic.multi.tenancy.enabled, e imposta il relativo valore su true.

        Consiglio: poiché YARN consuma risorse di cluster significative per ogni kernel del notebook in esecuzione su un cluster multi-tenant, aggiungi le proprietà Spark e YARN per aumentare l'allocazione delle risorse.

        Esempio:

        Prefisso Chiave Valore
        spark spark.driver.memory 5g
        spark spark.executor.memory 5g
        spark spark.executor.cores 2
        capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5

  4. Nel riquadro Gestisci sicurezza:

    1. In Accesso al progetto, seleziona Abilita l'ambito cloud-platform per questo cluster.
    2. In Protezione multi-tenancy:
      1. Seleziona Attiva.
      2. In Mappatura multi-tenancy:
        1. Fai clic su Aggiungi mappatura multi-tenancy per aggiungere le mappature degli account utente ai service account.
  5. Conferma o inserisci altre impostazioni del cluster (vedi Creare un cluster Dataproc utilizzando la Google Cloud console).

  6. Fai clic su Crea.

gcloud

Utilizza il gcloud dataproc clusters create command con il --secure-multi-tenancy-user-mapping flag per specificare un elenco di mappature tra account utente e service account.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \
    --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \
    --service-account=CLUSTER_SERVICE_ACCOUNT@iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/iam \
    --optional-components=JUPYTER_KERNEL_GATEWAY \
    --enable-component-gateway \
    other args ...

Note:

  • USER_MAPPINGS: specifica un elenco separato da virgole che mappa gli account utente ai service account.

    --secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
    
    Utilizza un file di mappatura YAML: anziché utilizzare il --secure-multi-tenancy-user-mapping flag per specificare le mappature tra account utente e service account, puoi utilizzare il --identity-config-file flag per specificare un file YAML locale o Cloud Storage contenente le mappature.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Ogni riga del file di mappatura mappa un account utente a un service account. La prima riga contiene l'intestazione user_service_account_mapping:.
    user_service_account_mapping:
    UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com
    UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com
    UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
    

  • --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true": Questa proprietà consente di aggiungere o rimuovere utenti del cluster multi-tenant senza ricreare il cluster (vedi Aggiornare gli utenti del cluster multi-tenant).

    Consiglio: poiché YARN consuma risorse di cluster significative per ogni kernel del notebook in esecuzione su un cluster multi-tenant, aggiungi le proprietà Spark e YARN per aumentare l'allocazione delle risorse.

    Esempio:

    --properties=" \
    spark:spark.driver.memory=5g,\
    spark:spark.executor.memory=5g,\
    spark:spark.executor.cores=200, \
    capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
    
  • CLUSTER_SERVICE_ACCOUNT (facoltativo): puoi utilizzare --service-account flag per specificare un service account VM personalizzato per il cluster. Se ometti questo flag, viene utilizzato il service account VM del cluster predefinito, PROJECT_NUMBER-compute@developer.gserviceaccount.com, .

    Consiglio: utilizza service account del cluster diversi per cluster diversi per consentire a ogni service account VM del cluster di impersonare solo un gruppo limitato di service account utente mappati.

  • --scopes=https://www.googleapis.com/auth/iam è necessario affinché il service account del cluster possa eseguire l'impersonificazione.

  • --enable-component-gateway e --optional-components=JUPYTER_KERNEL_GATEWAY: l'abilitazione di Dataproc Component Gateway e Jupyter Kernel Gateway consente a più utenti di connettere i propri notebook Jupyter al cluster multi-tenant.

API

Utilizza il SecurityConfig.IdentityConfig.userServiceAccountMapping field per specificare un elenco di mappature tra account utente e service account.

Concedere le autorizzazioni IAM (Gestione di identità e accessi)

Per connettere i notebook utente ai kernel dei notebook in esecuzione su un cluster multi-tenant , gli utenti mappati, i service account mappati e il service account VM del cluster devono disporre delle autorizzazioni IAM necessarie per accedere alle risorse.

Autorizzazioni utente mappate

Ogni utente mappato deve disporre delledataproc.clusters.get e dataproc.clusters.use autorizzazioni, necessarie per accedere e connettersi ai notebook kernel in esecuzione sul cluster multi-tenant. Puoi concedere il ruolo Editor Dataproc (roles/dataproc.editor), che contiene queste autorizzazioni (vedi Concedere un singolo ruolo IAM), oppure creare un ruolo personalizzato con queste autorizzazioni.

Autorizzazioni service account mappate

Ogni service account mappato deve disporre delle autorizzazioni richieste dall'applicazione del notebook dell'utente mappato, ad esempio l'accesso a un bucket Cloud Storage o a una tabella BigQuery (vedi Gestire l'accesso ai service account).

Autorizzazioni service account VM

Il service account VM del cluster multi-tenant deve disporre dell'autorizzazione iam.serviceAccounts.getAccessToken su ogni service account mappato. Puoi concedere il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator), che contiene questa autorizzazione (vedi Gestire l'accesso ai service account), oppure creare un ruolo personalizzato con questa autorizzazione. Per informazioni su altri ruoli del service account VM, vedi Service account VM Dataproc.

Connettere i notebook Jupyter a un kernel del cluster multi-tenant

Gli utenti mappati del cluster multi-tenant possono connettere il proprio notebook Jupyter gestito dall'utente o Vertex AI Workbench ai kernel installati sul cluster multi-tenant.

Notebook Vertex AI

Per creare e connettere un notebook Jupyter al cluster multi-tenant:

  1. Crea un'istanza di Vertex AI Workbench.
  2. Nella scheda Istan0}Workbenchze di Workbench, fai clic sul link Apri JupyterLab per la tua istanza.
  3. In Notebook cluster Dataproc, fai clic sulla scheda PySpark (cluster YARN) su MULTI_TENANCY_CLUSTER_NAME per connetterti e avviare un nuovo notebook Jupyter PySpark.

Blocco note gestito dall'utente

Per creare e connettere un notebook Jupyter gestito dall'utente al cluster multi-tenant Dataproc, segui i passaggi per installare l'estensione JupyterLab sulla VM gestita dall'utente.

Aggiornare gli utenti del cluster multi-tenant (anteprima)

Se imposti la proprietà del cluster dataproc:dataproc.dynamic.multi.tenancy.enabled su true quando hai creato un cluster multi-tenant, puoi aggiungere, rimuovere o sostituire gli utenti del cluster multi-tenant dopo la creazione del cluster.

Aggiungere utenti

Il seguente comando di aggiornamento utilizza il flag --add-user-mappings per aggiungere due nuove mappature tra account utente e service account al cluster multi-tenant sicuro.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com

Rimuovere utenti

Il seguente comando di aggiornamento utilizza il flag --remove-user-mappings per rimuovere due utenti dal cluster multi-tenant. Il flag accetta gli account utente degli utenti da rimuovere.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --remove-user-mappings=UserB@my-company.com,UserC@my-company.com

Sostituire gli utenti

Puoi utilizzare il comando di aggiornamento con il flag --identity-config-file per sostituire l'insieme di utenti esistente con un nuovo insieme. Questo flag è utile sia per aggiungere che per rimuovere utenti con un solo comando di aggiornamento.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --identity-config-file=identity-config.yaml

Note:

  • --identity-config-file: specifica un file YAML locale o Cloud Storage contenente le nuove mappature tra account utente e service account.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Ogni riga del file di mappatura mappa un account utente a un service account. La prima riga contiene l'intestazione user_service_account_mapping:.
    user_service_account_mapping:
    new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com
    new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com