La protezione multi-tenancy basata su service account Dataproc ti consente di condividere un cluster con più utenti, con un insieme di account utente mappati a 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 risorse Google Cloud utilizzando un account di servizio mappato.
Questo documento mostra come creare un cluster Dataproc multi-tenant, quindi avviare e connettere un blocco note 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 di Account Google con account di servizio 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 una comunicazione sicura all'interno del cluster. L'autenticazione degli utenti finali tramite Kerberos non è supportata.
L'accesso SSH diretto al cluster e alle funzionalità di Compute Engine, ad esempio la possibilità di eseguire script di avvio sulle VM del cluster, è bloccato. Inoltre, i job non possono essere eseguiti con privilegi
sudo
.I flussi di lavoro di Dataproc non sono supportati.
Crea un cluster multi-tenant
Puoi abilitare la funzionalità multi-tenant quando crei un cluster Dataproc.
Console
Crea un cluster Dataproc utilizzando la console Google Cloud , nel seguente modo:
Nella console Google Cloud , vai alla pagina Dataproc Crea un cluster Dataproc su Compute Engine: Crea un cluster Dataproc su Compute Engine
Nel riquadro Configura cluster:
- In Componenti:
- Nella sezione 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 al cluster multi-tenant.
- In Componenti:
Nel riquadro Personalizza cluster:
Nella sezione 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àdynamic.multi.tenancy.enabled
e imposta il relativo valore sutrue
.Consiglio: poiché YARN consuma risorse del cluster significative per ogni kernel del notebook in esecuzione su un cluster multi-tenant, aggiungi 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 200 capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5
Nel pannello Gestisci sicurezza:
- Nella sezione Accesso al progetto, seleziona Abilita l'ambito cloud-platform per questo cluster.
- In Secure Multi Tenancy:
- Seleziona Attiva.
- In Mappatura multi-tenancy:
- Fai clic su Aggiungi mappatura multi-tenant per aggiungere mappature di account utente a 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 gcloud dataproc clusters create command
con il
flag --secure-multi-tenancy-user-mapping
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 agli service account.
Utilizza un file di mappatura YAML:anziché utilizzare il flag--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-mapping
per specificare le mappature tra account utente e account di servizio, puoi utilizzare il flag--identity-config-file
per specificare un file YAML locale o Cloud Storage contenente le mappature. Ogni riga del file di mappatura mappa un account utente a un account di servizio. 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 del cluster significative per ogni kernel del notebook in esecuzione su un cluster multi-tenant, aggiungi 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 cluster diversi per cluster diversi per consentire a ogni account di servizio VM del cluster di impersonare solo un gruppo limitato di service account utente mappati.
--scopes=https://www.googleapis.com/auth/iam
è necessario per consentire al account di servizio del cluster di eseguire la rappresentazione.--enable-component-gateway
e--optional-components=JUPYTER_KERNEL_GATEWAY
: l'attivazione del gateway dei componenti di Dataproc e del gateway del kernel Jupyter consente a più utenti di connettere i propri notebook Jupyter al cluster multi-tenant.
API
Utilizza SecurityConfig.IdentityConfig.userServiceAccountMapping field
per specificare un elenco di mappature tra account utente e account di servizio.
Concedere le autorizzazioni Identity and Access Management
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 delle autorizzazionidataproc.clusters.get
e dataproc.clusters.use
, necessarie per accedere ai kernel dei notebook in esecuzione sul cluster multi-tenant e connettersi a questi. 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 account di servizio mappate
Ogni account di servizio mappato deve disporre delle autorizzazioni necessarie per l'applicazione 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 del account di servizio VM
Il service account VM del cluster multi-tenant deve disporre dell'autorizzazione iam.serviceAccounts.getAccessToken
su ogni account di servizio mappato. Puoi concedere il ruolo
Creatore token account di servizio (roles/iam.serviceAccountTokenCreator
), che contiene questa autorizzazione (vedi Gestire l'accesso agli account di servizio),
oppure creare un ruolo personalizzato con questa autorizzazione.
Per informazioni su altri ruoli del account di servizio VM, consulta Service account VM Dataproc.
Connettere i notebook Jupyter a un kernel del cluster multi-tenant
Gli utenti del cluster multi-tenant mappati 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, procedi nel seguente modo:
- Crea un'istanza di Vertex AI Workbench.
- Nella scheda Workbench Instances (Istanze Workbench), fai clic sul link Apri JupyterLab per la tua istanza.
- In Notebook del 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 multitenant Dataproc, segui i passaggi per installare l'estensione JupyterLab sulla VM gestita dall'utente.
Aggiorna 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.
Aggiungi utenti
Il seguente comando di aggiornamento utilizza il flag --add-user-mappings
per aggiungere due nuove mappature
dell'account utente alaccount di serviziot al cluster multitenant 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
Rimuovi 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
Sostituisci utenti
Puoi utilizzare il comando di aggiornamento con il flag --identity-config-file
per sostituire l'insieme esistente di utenti con un nuovo insieme. Questo flag è utile per
aggiungere e rimuovere utenti con un unico 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 che contiene i nuovi mapping da account utente a account di servizio. Ogni riga del file di mappatura mappa un account utente a un account di servizio. 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