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
sudoprivilegi.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:
Nella Google Cloud console, vai alla pagina Dataproc Crea un cluster Dataproc su Compute Engine: Crea un cluster Dataproc su Compute Engine
Nel riquadro Configura cluster:
- In Componenti:
- In Gateway dei componenti, seleziona Attiva gateway dei componenti.
- In Componenti facoltativi, seleziona Jupyter Kernel Gateway per consentire a più utenti di connettere i propri notebook Jupyter a l cluster multi-tenant.
- In Componenti:
Nel riquadro Personalizza cluster:
In Proprietà cluster:
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 sutrue.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
Nel riquadro Gestisci sicurezza:
- In Accesso al progetto, seleziona Abilita l'ambito cloud-platform per questo cluster.
- In Protezione multi-tenancy:
- Seleziona Attiva.
- In Mappatura multi-tenancy:
- Fai clic su Aggiungi mappatura multi-tenancy per aggiungere le mappature degli account utente ai service account.
Conferma o inserisci altre impostazioni del cluster (vedi Creare un cluster Dataproc utilizzando la Google Cloud console).
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.
Utilizza un file di mappatura YAML: anziché utilizzare il--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
--secure-multi-tenancy-user-mappingflag per specificare le mappature tra account utente e service account, puoi utilizzare il--identity-config-fileflag per specificare un file YAML locale o Cloud Storage contenente le mappature. Ogni riga del file di mappatura mappa un account utente a un service account. La prima riga contiene l'intestazione--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
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 flagper 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-gatewaye--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:
- Crea un'istanza di Vertex AI Workbench.
- Nella scheda Istan0}Workbenchze di Workbench, fai clic sul link Apri JupyterLab per la tua istanza.
- In Notebook cluster Dataproc, fai clic sulla
scheda PySpark (cluster YARN) su
MULTI_TENANCY_CLUSTER_NAMEper 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. Ogni riga del file di mappatura mappa un account utente a un service account. La prima riga contiene l'intestazione--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
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