I service account in Managed Service for Apache Spark ti consentono di autenticare i workload batch e le sessioni interattive per accedere in modo sicuro alle risorse Google Cloud . I workload vengono eseguiti con le credenziali dell'utente finale o del account di servizio. Quando vengono utilizzate le credenziali del account di servizio, il account di servizio specifico assegnato per eseguire il workload dipende dalla versione di runtime del batch o della sessione.
Service account di runtime precedenti alla versione 3.0
Le versioni di runtime di Spark precedenti alla 3.0 con credenziali dell'account di servizio utilizzano l'account di servizio predefinito di Compute Engine o un account di servizio personalizzato specificato dall'utente per inviare un workload batch o creare una sessione interattiva.
Service account di runtime 3.0+
Le versioni di runtime di Spark 3.0 e successive con credenziali dell'account di servizio utilizzano un service account personalizzato specificato dall'utente per inviare un workload batch o creare una sessione interattiva.
I runtime di Managed Service for Apache Spark 3.0 e versioni successive creano il account di servizio Dataproc Resource Manager Node Service Agent, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, con il ruolo Dataproc Resource Manager Node Service Agent in un progetto utente Google Cloud di Managed Service for Apache Spark. Questo service account esegue le seguenti operazioni di sistema sulle risorse Managed Service for Apache Spark situate nel progetto in cui viene creato un workload:
- Cloud Logging e Cloud Monitoring
- Operazioni di base del nodo Resource Manager di Managed Service for Apache Spark come
get,heartbeatemintOAuthToken
Visualizza e gestisci i ruoli dei account di servizio IAM
Per visualizzare e gestire i ruoli concessi al service account del workload o della sessione batch, segui questi passaggi:
Nella console Google Cloud vai alla pagina IAM.
Fai clic su Includi concessioni di ruoli fornite da Google.
Visualizza i ruoli elencati per il account di servizio predefinito o personalizzato del workload o della sessione batch.
L'immagine seguente mostra il ruolo Managed Service for Apache Spark Worker richiesto elencato per il account di servizio predefinito di Compute Engine,
project_number-compute@developer.gserviceaccount.com, utilizzato da Managed Service for Apache Spark per impostazione predefinita come account di servizio del workload o della sessione.
Il ruolo Managed Service for Apache Spark Worker assegnato al account di servizio predefinito di Compute Engine nella sezione IAM della console Google Cloud . Puoi fare clic sull'icona a forma di matita visualizzata nella riga del account di servizio per concedere o rimuovere account di servizio account.
Come utilizzare un account di servizio tra progetti
Puoi inviare un workload batch che utilizza un account di servizio di un progetto diverso da quello del workload batch (il progetto in cui viene inviato il batch). In questa sezione, il progetto in cui si trova il account di servizio è chiamato service account project, mentre il progetto in cui viene inviato il batch è chiamato batch project.
Perché utilizzare un account di servizio tra progetti per eseguire un workload Batch? Un motivo possibile è che al account di servizio nell'altro progetto siano stati assegnati ruoli IAM che forniscono un accesso granulare alle risorse di quel progetto.
Procedura di configurazione
Gli esempi in questa sezione si applicano all'invio di un workload batch eseguito con una versione di runtime precedente alla 3.0.
Nel progetto del account di servizio:
Abilita l'API Managed Service for Apache Spark, se non è già abilitata.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.Concedi al tuo account email (l'utente che sta creando il cluster) il ruolo Service Account User nel progetto del account di servizio o, per un controllo più granulare, nel account di servizio nel progetto del account di servizio.
Per saperne di più, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni per concedere i ruoli a livello di progetto e Gestisci l'accesso ai service account per concedere i ruoli a livello di account di servizio.
Esempi di gcloud CLI:
Il seguente comando di esempio concede all'utente il ruolo Utente service account a livello di progetto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Note:
USER_EMAIL: fornisci l'indirizzo email del tuo account utente nel formatouser:user-name@example.com.
Il seguente comando di esempio concede all'utente il ruolo Service Account User a livello di account di servizio:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Note:
USER_EMAIL: fornisci l'indirizzo email del tuo account utente nel formato:user:user-name@example.com.
Concedi al account di servizio il ruolo Managed Service for Apache Spark Worker nel progetto batch.
Esempio di gcloud CLI:
gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --role="roles/dataproc.worker"
Nel progetto batch:
Concedi al service account dell'agente di servizio Managed Service for Apache Spark i ruoli Utente account di servizio e Creatore token account di servizio nel progetto del service account o, per un controllo più granulare, nel service account nel progetto del service account. In questo modo, consenti al account di servizio dell'agente di servizio Managed Service for Apache Spark nel progetto batch di creare token per il account di servizio nel progetto del account di servizio.
Per saperne di più, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni per concedere i ruoli a livello di progetto e Gestisci l'accesso ai service account per concedere i ruoli a livello di account di servizio.
Esempi di gcloud CLI:
I seguenti comandi concedono al service account dell'agente di servizio Managed Service for Apache Spark nel progetto batch i ruoli Utente service account e Creatore token service account a livello di progetto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
I seguenti comandi di esempio concedono al service account dell'agente di servizio Managed Service for Apache Spark nel progetto batch i ruoli Utente service account e Creatore token service account a livello di account di servizio:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Concedi al service account Compute Engine Service Agent nel progetto batch il ruolo Creatore token account di servizio nel progetto del service account o, per un controllo più granulare, nel service account nel progetto del service account. In questo modo, concedi al account di servizio Compute Engine Service Agent nel progetto batch la possibilità di creare token per il account di servizio nel progetto del service account.
Per saperne di più, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni per concedere i ruoli a livello di progetto e Gestisci l'accesso ai service account per concedere i ruoli a livello di account di servizio.
Esempi di gcloud CLI:
Il seguente comando di esempio concede al service account dell'agente di servizio Compute Engine nel progetto batch il ruolo Creatore token service account a livello di progetto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Il seguente comando di esempio concede al account di servizio dell'agente di servizio Compute Engine nel progetto del cluster il ruolo Creatore token service account a livello di account di servizio:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Invia il workload batch
Dopo aver completato i passaggi di configurazione, puoi inviare un workload batch. Assicurati di specificare il account di servizio nel progetto del account di servizio come account di servizio da utilizzare per il workload batch.
Risolvi i problemi relativi agli errori basati sulle autorizzazioni
Autorizzazioni errate o insufficienti per il account di servizio utilizzato dal workload o dalla sessione batch possono causare errori di creazione del batch o della sessione che segnalano il messaggio di errore "Inizializzazione del nodo di computing del driver non riuscita per il batch in 600 secondi". Questo errore indica che il driver Spark non è riuscito ad avviarsi entro il periodo di timeout assegnato, spesso a causa della mancanza dell'accesso necessario alle risorse Google Cloud .
Per risolvere il problema, verifica che il tuo account di servizio disponga dei seguenti ruoli o autorizzazioni minimi:
- Ruolo Managed Service for Apache Spark Worker (
roles/dataproc.worker): questo ruolo concede le autorizzazioni necessarie a Managed Service for Apache Spark per gestire ed eseguire workload e sessioni Spark. - Storage Object Viewer (
roles/storage.objectViewer), Storage Object Creator (roles/storage.objectCreator) o Storage Object Admin (roles/storage.admin): se la tua applicazione Spark legge o scrive nei bucket Cloud Storage, il account di servizio deve disporre delle autorizzazioni appropriate per accedere ai bucket. Ad esempio, se i dati di input si trovano in un bucket Cloud Storage,Storage Object Viewerè obbligatorio. Se la tua applicazione scrive l'output in un bucket Cloud Storage, è necessarioStorage Object CreatoroStorage Object Admin. - BigQuery Data Editor (
roles/bigquery.dataEditor) o BigQuery Data Viewer (roles/bigquery.dataViewer): se la tua applicazione Spark interagisce con BigQuery, verifica che l'account di servizio disponga dei ruoli BigQuery appropriati. - Autorizzazioni di Cloud Logging: il account di servizio deve disporre delle autorizzazioni per scrivere i log in Logging per un debug efficace. In genere, il ruolo
Logging Writer(roles/logging.logWriter) è sufficiente.
Errori comuni relativi alle autorizzazioni o all'accesso
Ruolo
dataproc.workermancante: senza questo ruolo principale, l'infrastruttura di Managed Service for Apache Spark non può eseguire il provisioning e gestire correttamente il nodo driver.Autorizzazioni Cloud Storage insufficienti: se l'applicazione Spark tenta di leggere i dati di input o di scrivere l'output in un bucket Cloud Storage senza le autorizzazioni necessarie per il account di servizio, l'inizializzazione del driver potrebbe non riuscire perché non dispone dell'accesso alle risorse critiche.
Problemi di rete o firewall: i Controlli di servizio VPC o le regole firewall possono bloccare inavvertitamente l'accesso dei account di servizio alle API o alle risorse Google Cloud .
Per verificare e aggiornare le autorizzazioni del account di servizio:
- Vai alla pagina IAM e amministrazione > IAM nella console Google Cloud .
- Individua il account di servizio utilizzato per i workload o le sessioni batch.
- Verifica che siano assegnati i ruoli necessari. In caso contrario, aggiungili.
Per un elenco dei ruoli e delle autorizzazioni di Managed Service for Apache Spark, consulta Autorizzazioni e ruoli IAM di Managed Service for Apache Spark.