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 dell'account di servizio. Quando vengono utilizzate le credenziali del account di servizio, il account di servizio utilizzato per eseguire carichi di lavoro batch o sessioni interattive dipende dalla versione di runtime del batch o della sessione.

Service account di runtime precedenti alla versione 3.0

Le versioni del runtime Spark precedenti a 3.0 con le credenziali del service account utilizzano l'account di servizio predefinito di Compute Engine o un service account personalizzato specificato dall'utente per inviare un carico di lavoro batch o creare una sessione interattiva.

Service account di runtime 3.0+

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

I runtime serverless per Apache Spark 3.0 e versioni successive creano l'account di servizio Service agent del nodo di Dataproc Resource Manager, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, con il ruolo Service agent del nodo di Dataproc Resource Manager in un progetto utente Dataproc Google Cloud . Questo account di servizio esegue le seguenti operazioni di sistema sulle risorse 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 Dataproc Resource Manager, ad esempio get, heartbeat e mintOAuthToken

Visualizzare e gestire i ruoli degli account di servizio IAM

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

  1. Nella console Google Cloud , 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 carico di lavoro batch o il servizio predefinito o personalizzato della sessione o ilaccount di serviziot predefinito o personalizzato.

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

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

Come utilizzare un account di servizio tra progetti

Puoi inviare un carico di lavoro batch che utilizza un account di servizio di un progetto diverso da quello del carico di lavoro 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 batch? Un possibile motivo è se alaccount di serviziot nell'altro progetto sono stati assegnati ruoli IAM che forniscono un accesso granulare alle risorse in quel progetto.

Procedura di configurazione

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

  1. Nel progetto del account di servizio:

    1. Consenti l'allegato di 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 service account nel progetto del account di servizio o, per un controllo più granulare, nel account di servizio del 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 formato: user:user-name@example.com.

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

      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 account di servizio il ruolo Dataproc 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"
      
  2. Nel progetto batch:

    1. Concedi all'account di servizio dell'agente di servizio Dataproc i ruoli Utente service account e Creatore token service account nel progetto del service account o, per un controllo più granulare, nel service account del progetto del service account. In questo modo, consenti alaccount di serviziot dell'agente di servizio Dataproc nel progetto batch di creare token per iaccount di serviziont nel progetaccount di serviziount.

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

      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 all'account di servizio agente di servizio Compute Engine nel progetto batch il ruolo Creatore token service account nel progetto service account o, per un controllo più granulare, nel service account nel progetto service account. In questo modo, concedi alaccount di serviziot dell'agente di servizio Compute nel progetto batch la possibilità di creare token per iaccount di serviziont 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 all'account di servizio 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 service account dell'agente di servizio Compute Engine nel progetto 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 carico di lavoro batch. Assicurati di specificare il account di servizio nel progetto del account di servizio come account di serviziot da utilizzare per il batch.

Risolvere i problemi relativi agli errori basati sulle autorizzazioni

Autorizzazioni errate o insufficienti per l'account di servizio utilizzato dal tuo batch o dalla tua sessione possono causare errori di creazione di batch o sessioni che segnalano il messaggio di errore "Driver compute node failed to initialize for batch in 600 seconds". Questo errore indica che il driver Spark non è stato avviato entro il periodo di timeout assegnato, spesso a causa della mancanza di accesso necessario alle risorse Google Cloud .

Per risolvere il problema, verifica che il account di servizio 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 sessioni e workload 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, è necessario Storage Object Viewer. Se la tua applicazione scrive l'output in un bucket Cloud Storage, è necessario Storage Object Creator o Storage Object Admin.
  • Editor dati BigQuery (roles/bigquery.dataEditor) o Visualizzatore dati BigQuery (roles/bigquery.dataViewer): se la tua applicazione Spark interagisce con BigQuery, verifica che l'account di servizio disponga dei ruoli BigQuery appropriati.
  • Autorizzazioni Cloud Logging:il account di servizio ha bisogno delle autorizzazioni per scrivere i log in Cloud Logging per un debug efficace. In genere, il ruolo Logging Writer (roles/logging.logWriter) è sufficiente.
  • Ruolo dataproc.worker mancante: senza questo ruolo di base, l'infrastruttura 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 o scrivere l'output in un bucket Cloud Storage senza le autorizzazioni del account di servizio necessarie, l'inizializzazione del driver potrebbe non riuscire 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 account di servizio alle API o alle risorse. Google Cloud

Per verificare e aggiornare le autorizzazioni del account di servizio:

  1. Vai alla pagina IAM e amministrazione > IAM nella console Google Cloud .
  2. Individua il account di servizio utilizzato per i tuoi carichi di lavoro o sessioni batch.
  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.