Ce document explique comment afficher et gérer les rôles des comptes de service Identity and Access Management. Une charge de travail par lot ou une session interactive Serverless pour Apache Spark s'exécute en tant que compte de service Compute Engine par défaut, sauf si vous spécifiez un compte de service personnalisé lorsque vous envoyez une charge de travail par lot, créez une session ou créez un modèle d'exécution de session.
Rôle Nœud de calcul Dataproc requis
Le compte de service de la charge de travail Serverless pour Apache Spark doit disposer du rôle Identity and Access Management Nœud de calcul Dataproc. Le compte de service Compute Engine par défaut (project_number-compute@developer.gserviceaccount.com
) utilisé par Serverless pour Apache Spark dispose de ce rôle par défaut. Si vous spécifiez votre propre compte de service pour votre charge de travail par lot, votre session ou votre modèle de session, vous devez lui attribuer le rôle "Nœud de calcul Dataproc".
Des rôles supplémentaires peuvent être nécessaires pour d'autres opérations, comme la lecture et l'écriture de données dans BigQuery.
Afficher et gérer les rôles des comptes de service IAM
Pour afficher et gérer les rôles attribués au compte de service de la charge de travail Serverless pour Apache Spark, procédez comme suit :
Dans la console Google Cloud , accédez à la page IAM.
Cliquez sur Inclure les attributions de rôles fournies par Google.
Affichez les rôles listés pour le compte de service de charge de travail. L'image ci-dessous montre le rôle Nœud de calcul Dataproc requis pour le compte de service Compute Engine par défaut (
project_number-compute@developer.gserviceaccount.com
) que Serverless pour Apache Spark utilise par défaut comme compte de service de charge de travail.Vous pouvez cliquer sur l'icône en forme de crayon affichée sur la ligne du compte de service pour attribuer ou supprimer des rôles de compte de service.
Compte de service multiprojet
Vous pouvez envoyer une charge de travail par lot Serverless pour Apache Spark qui utilise un compte de service provenant d'un projet différent de celui de la charge de travail par lot (le projet dans lequel le lot est envoyé). Dans cette section, le projet dans lequel se trouve le compte de service est appelé service account project
, et le projet dans lequel le lot est envoyé est appelé batch project
.
Pourquoi utiliser un compte de service multiprojet pour exécuter une charge de travail par lot ? Il est possible que le compte de service de l'autre projet se soit vu attribuer des rôles IAM qui offrent un accès précis aux ressources de ce projet.
Procédure de configuration
Dans le projet du compte de service :
Activer l'association des comptes de service à plusieurs projets
Enable the Dataproc API.
Attribuez à votre compte de messagerie (l'utilisateur qui crée le cluster) le rôle Utilisateur du compte de service sur le projet de compte de service ou, pour un contrôle plus précis, sur le compte de service dans le projet de compte de service.
Pour en savoir plus, consultez Gérer l'accès aux projets, aux dossiers et aux organisations pour attribuer des rôles au niveau du projet et Gérer l'accès aux comptes de service pour attribuer des rôles au niveau du compte de service.
Exemples de gcloud CLI :
L'exemple de commande suivant attribue le rôle Utilisateur de compte de service à l'utilisateur au niveau du projet :
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Remarques :
USER_EMAIL
: indiquez l'adresse e-mail de votre compte utilisateur, au formatuser:user-name@example.com
.
L'exemple de commande suivant attribue le rôle Utilisateur du compte de service à l'utilisateur au niveau du compte de service :
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Remarques :
USER_EMAIL
: indiquez l'adresse e-mail de votre compte utilisateur, au formatuser:user-name@example.com
.
Accordez au compte de service le rôle Worker Dataproc sur le projet par lot.
Exemple de 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"
Dans le projet par lots :
Attribuez au compte de service de l'agent de service Dataproc les rôles Utilisateur du compte de service et Créateur de jetons du compte de service au niveau du projet du compte de service ou, pour un contrôle plus précis, au niveau du compte de service dans le projet du compte de service. Vous autorisez ainsi le compte de service de l'agent de service Dataproc dans le projet par lot à créer des jetons pour le compte de service dans le projet de compte de service.
Pour en savoir plus, consultez Gérer l'accès aux projets, aux dossiers et aux organisations pour attribuer des rôles au niveau du projet et Gérer l'accès aux comptes de service pour attribuer des rôles au niveau du compte de service.
Exemples de gcloud CLI :
Les commandes suivantes attribuent au compte de service de l'agent de service Dataproc dans le projet par lot les rôles Utilisateur du compte de service et Créateur de jetons du compte de service au niveau du projet :
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"
Les exemples de commandes suivants attribuent au compte de service de l'agent de service Dataproc dans le projet par lot les rôles Utilisateur du compte de service et Créateur de jetons du compte de service au niveau du compte de service :
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"
Dans le projet par lot, accordez au compte de service de l'agent de service Compute Engine le rôle Créateur de jetons du compte de service sur le projet de compte de service ou, pour un contrôle plus précis, sur le compte de service dans le projet de compte de service. Vous accordez ainsi au compte de service de l'agent de service Compute dans le projet par lot la possibilité de créer des jetons pour le compte de service dans le projet de compte de service.
Pour en savoir plus, consultez Gérer l'accès aux projets, aux dossiers et aux organisations pour attribuer des rôles au niveau du projet et Gérer l'accès aux comptes de service pour attribuer des rôles au niveau du compte de service.
Exemples de gcloud CLI :
L'exemple de commande suivant attribue le rôle de créateur de jetons de compte de service au compte de service de l'agent de service Compute Engine dans le projet par lot au niveau du projet :
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"
L'exemple de commande suivant attribue le rôle de créateur de jetons du compte de service au compte de service de l'agent de service Compute Engine dans le projet de cluster, au niveau du compte de service :
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"
Envoyer la charge de travail par lot
Une fois les étapes de configuration terminées, vous pouvez envoyer une charge de travail par lot. Veillez à spécifier le compte de service dans le projet de compte de service comme compte de service à utiliser pour la charge de travail par lot.