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écutent 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.
Exigence de sécurité : vous devez disposer de l'autorisation ActAs
pour le compte de service afin d'exécuter des charges de travail ou des sessions Serverless pour Apache Spark. Le rôle Service Account User
contient cette autorisation. Pour en savoir plus sur les autorisations des comptes de service, consultez Rôles pour l'authentification des comptes de service.
Rôle Nœud de calcul Dataproc requis
Le compte de service du service de charge de travail ou de session Serverless pour Apache Spark doit disposer du rôle IAM 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 un autre compte de service lorsque vous créez une charge de travail par lot, une session ou un modèle de session, vous devez attribuer le rôle "Nœud de calcul Dataproc" au compte de service.
Des rôles supplémentaires peuvent être nécessaires pour d'autres opérations, comme la lecture et l'écriture de données depuis et vers Cloud Storage ou BigQuery.
Dans certains projets, le rôle Éditeur du projet, qui inclut les autorisations du rôle Nœud de calcul Dataproc ainsi que d'autres autorisations dont Serverless pour Apache Spark n'a pas besoin, peut avoir été automatiquement attribué au compte de service de la charge de travail par lot ou de la session. Pour suivre le principe de sécurité du moindre privilège, remplacez le rôle Éditeur du compte de service par le rôle Nœud de calcul Dataproc.
Résoudre les échecs basés sur les autorisations
Des autorisations incorrectes ou insuffisantes pour le compte de service utilisé par votre charge de travail ou session par lot Serverless pour Apache Spark peuvent entraîner des échecs de création de lot ou de session qui affichent le message d'erreur "Le nœud de calcul du pilote n'a pas pu être initialisé pour le lot en 600 secondes". Cette erreur indique que le pilote Spark n'a pas pu démarrer dans le délai imparti, souvent en raison d'un manque d'accès aux ressources Google Cloud nécessaires.
Pour résoudre ce problème, vérifiez que votre compte de service dispose des rôles ou autorisations minimales suivants :
- Rôle Nœud de calcul Dataproc (
roles/dataproc.worker
) : ce rôle accorde les autorisations nécessaires à Serverless pour Apache Spark afin de gérer et d'exécuter les charges de travail et les sessions Spark. - Lecteur des objets Storage (
roles/storage.objectViewer
), Créateur des objets Storage (roles/storage.objectCreator
) ou Administrateur des objets Storage (roles/storage.admin
) : si votre application Spark lit ou écrit des données dans des buckets Cloud Storage, le compte de service doit disposer des autorisations appropriées pour accéder aux buckets. Par exemple, si vos données d'entrée se trouvent dans un bucket Cloud Storage,Storage Object Viewer
est obligatoire. Si votre application écrit des résultats dans un bucket Cloud Storage,Storage Object Creator
ouStorage Object Admin
est nécessaire. - Éditeur de données BigQuery (
roles/bigquery.dataEditor
) ou Lecteur de données BigQuery (roles/bigquery.dataViewer
) : si votre application Spark interagit avec BigQuery, vérifiez que le compte de service dispose des rôles BigQuery appropriés. - Autorisations Cloud Logging : le compte de service a besoin d'autorisations pour écrire des journaux dans Cloud Logging afin de déboguer efficacement. En général, le rôle
Logging Writer
(roles/logging.logWriter
) est suffisant.
Échecs courants liés aux autorisations ou à l'accès
Rôle
dataproc.worker
manquant : sans ce rôle principal, l'infrastructure Serverless pour Apache Spark ne peut pas provisionner ni gérer correctement le nœud du pilote.Autorisations Cloud Storage insuffisantes : si votre application Spark tente de lire des données d'entrée ou d'écrire des données de sortie dans un bucket Cloud Storage sans les autorisations de compte de service nécessaires, le pilote peut ne pas s'initialiser, car il n'a pas accès aux ressources critiques.
Problèmes de réseau ou de pare-feu : VPC Service Controls ou les règles de pare-feu peuvent bloquer par inadvertance l'accès du compte de service aux API ou aux ressources Google Cloud .
Pour vérifier et modifier les autorisations du compte de service :
- Accédez à la page IAM et administration > IAM de la console Google Cloud .
- Localisez le compte de service utilisé pour vos charges de travail ou sessions par lot Serverless pour Apache Spark.
- Vérifiez que les rôles nécessaires sont attribués. Si ce n'est pas le cas, ajoutez-les.
Pour obtenir la liste des rôles et des autorisations de Serverless pour Apache Spark, consultez Autorisations et rôles IAM de Serverless pour Apache Spark.
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 charge de travail par lot ou de session 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 par lot ou de session. L'image suivante 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 ou de session.Rôle "Nœud de calcul Dataproc" attribué au compte de service Compute Engine par défaut dans la section IAM de la console Google Cloud . 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 de compte de service :
Activer l'association des comptes de service à plusieurs projets
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 theserviceusage.services.enable
permission. Learn how to grant roles.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
.
Attribuez 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 effectué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.