Service account di Google Cloud Serverless per Apache Spark

I workload batch e le sessioni interattive di Serverless per Apache Spark vengono eseguiti con le credenziali dell'utente finale o del service account. Quando vengono utilizzate le credenziali del service account, il service account utilizzato per eseguire i workload batch o le sessioni interattive dipende dalla versione del runtime batch o della sessione.

Service account di runtime pre-3.0

Le versioni del runtime Spark precedenti alla versione 3.0 con le credenziali del service account utilizzano il service account predefinito di Compute Engine o un service account personalizzato specificato dall'utente per inviare un workload batch o creare una sessione interattiva.

Service account di runtime 3.0 e versioni successive

Le versioni del runtime Spark 3.0 e successive con le credenziali del service account utilizzano un service account personalizzato specificato dall'utente per inviare un workload batch o creare una sessione interattiva.

I runtime di Serverless per Apache Spark 3.0 e versioni successive creano il service account **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 Dataproc Google Cloud . Questo service account esegue le seguenti operazioni di sistema sulle risorse di Serverless per Apache Spark che si trovano nel progetto in cui viene creato un workload:

  • Cloud Logging e Cloud Monitoring
  • Operazioni di base del nodo di Dataproc Resource Manager, come get, heartbeat e mintOAuthToken

Visualizzare e gestire i ruoli del service account IAM

Per visualizzare e gestire i ruoli concessi al service account del workload batch o della sessione:

  1. Nella Google Cloud console vai alla pagina IAM.

    Vai a IAM'

  2. Fai clic su Includi concessioni di ruoli fornite da Google.

  3. Visualizza i ruoli elencati per il workload batch o il service account predefinito o personalizzato della sessione predefinito o personalizzato.

    L'immagine seguente mostra il ruolo Dataproc Worker richiesto elencato per il service account predefinito di Compute Engine, project_number-compute@developer.gserviceaccount.com, che Serverless per Apache Spark utilizza per impostazione predefinita come service account del workload o della sessione.

    Ruolo Dataproc Worker per il service account predefinito di Compute Engine nella console IAM
    Il ruolo Dataproc Worker assegnato al service account predefinito di Compute Engine nella sezione IAM della Google Cloud console.
  4. Puoi fare clic sull'icona a forma di matita visualizzata nella riga del service account per concedere o rimuovere i ruoli del service account.

Come utilizzare un service account tra progetti

Puoi inviare un workload batch che utilizza un service account di un progetto diverso dal progetto del workload batch (il progetto in cui viene inviato il batch). In questa sezione, il progetto in cui si trova il service account è chiamato service account project, mentre il progetto in cui viene inviato il batch è chiamato batch project.

Perché utilizzare un service account tra progetti per eseguire un workload batch? Un motivo possibile è che al service account dell'altro progetto sono stati assegnati ruoli IAM che forniscono un accesso granulare a le risorse di quel progetto.

Procedura di configurazione

Gli esempi in questa sezione si applicano all'invio di un workload batch eseguito con una versione del runtime precedente alla versione 3.0.

  1. Nel progetto del service account:

    1. Consenti l'allegato dei service account tra progetti.

    2. Enable the Dataproc API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    3. Concedi al tuo account email (l'utente che sta creando il cluster) il ruolo Utente account di servizio nel progetto del service account o, per un controllo più granulare, nel service account del 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 service account.

      Esempi dell'interfaccia a riga di comando gcloud:

      Il seguente comando di esempio concede all'utente il ruolo Utente account di servizio 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 formato: user:user-name@example.com.

      Il seguente comando di esempio concede all'utente il ruolo Utente account di servizio a livello di service account:

      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.
    4. Concedi al service account il ruolo Dataproc Worker nel progetto batch.

      Esempio dell'interfaccia a riga di comando gcloud:

      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"
      
  2. Nel progetto batch:

    1. Concedi al service account dell'agente di servizio Dataproc 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 del progetto del service account. In questo modo, consenti al service account dell'agente di servizio Dataproc in il progetto batch di creare token per il service account 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 service account.

      Esempi dell'interfaccia a riga di comando gcloud:

      I seguenti comandi concedono al service account dell'agente di servizio Dataproc nel progetto batch i ruoli Utente account di servizio e Creatore token account di servizio 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 Dataproc nel progetto batch i ruoli Utente account di servizio e Creatore token account di servizio a livello di service account:

      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"
      
    2. Concedi al service account dell'agente di servizio Compute Engine nel progetto batch il ruolo Creatore token account di servizio nel progetto del service account o, per un controllo più granulare, nel service account del progetto del service account. In questo modo, concedi al service account dell'agente di servizio Compute Engine nel progetto batch la possibilità di creare token per il service account 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 service account.

      Esempi dell'interfaccia a riga di comando gcloud:

      Il seguente comando di esempio concede al service account dell'agente di servizio Compute Engine nel progetto batch il ruolo Creatore token account di servizio 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 service account dell'agente di servizio Compute Engine nel progetto cluster il ruolo Creatore token account di servizio a livello di service account:

      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 service account nel progetto del service account come service account da utilizzare per il workload batch.

Risolvere i problemi relativi agli errori basati sulle autorizzazioni

Autorizzazioni errate o insufficienti per il service account utilizzato dal tuo workload batch o dalla sessione possono causare errori di creazione del batch o della sessione che segnalano un messaggio di errore "Driver compute node failed to initialize for batch in 600 seconds". Questo errore indica che il driver Spark non è riuscito ad avviarsi entro il periodo di timeout consentito, spesso a causa della mancanza dell'accesso necessario alle Google Cloud risorse.

Per risolvere il problema, verifica che il service account disponga dei seguenti ruoli o autorizzazioni minimi:

  • Ruolo Dataproc Worker (roles/dataproc.worker): questo ruolo concede le autorizzazioni necessarie a Serverless per 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 l'applicazione Spark legge o scrive nei bucket Cloud Storage, il service account 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 è necessario. Se la tua applicazione scrive l'output in un bucket Cloud Storage, Storage Object Creator o Storage Object Admin è necessario.
  • Editor dati BigQuery (roles/bigquery.dataEditor) o Visualizzatore dati BigQuery (roles/bigquery.dataViewer): se l'applicazione Spark interagisce con BigQuery, verifica che il service account disponga dei ruoli BigQuery appropriati.
  • Autorizzazioni Cloud Logging: il service account deve disporre delle autorizzazioni per scrivere i log in Cloud Logging per un debug efficace. In genere, il Logging Writer ruolo (roles/logging.logWriter) è sufficiente.
  • Ruolo dataproc.worker mancante: senza questo ruolo principale, l' infrastruttura di Serverless per 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 da o scrivere l'output in un bucket Cloud Storage senza le autorizzazioni del service account necessarie, il driver potrebbe non riuscire a inizializzarsi perché non ha accesso alle risorse critiche.

  • Problemi di rete o firewall: i Controlli di servizio VPC o le regole firewall possono bloccare inavvertitamente l'accesso del service account alle Google Cloud API o alle risorse.

Per verificare e aggiornare le autorizzazioni del service account:

  1. Vai alla pagina IAM e amministrazione > IAM nella Google Cloud console.
  2. Individua il service account utilizzato per i workload batch o le sessioni.
  3. Verifica che siano assegnati i ruoli necessari. In caso contrario, aggiungili.

Per un elenco dei ruoli e delle autorizzazioni di Serverless per Apache Spark, consulta Autorizzazioni e ruoli IAM di Serverless per Apache Spark.