J'essaie d'exécuter un pipeline à partir de Cloud Data Fusion, mais je reçois l'erreur suivante:
io.cdap.cdap.runtime.spi.provisioner.dataproc.DataprocRuntimeException: Dataproc operation failure: INVALID_ARGUMENT: User not authorized to act as service account 'XXXXXXXX-compute@developer.gserviceaccount.com'. To act as a service account, user must have one of [Owner, Editor, Service Account Actor] roles. See https://cloud.google.com/iam/docs/understanding-service-accounts for additional details.
Quelqu'un a déjà rencontré cette erreur?
4 Réponses :
Cette erreur est liée à l'absence de rôle d'utilisateur de compte de service ( roles/iam.serviceAccountUser
) associé au compte d'utilisateur / de service utilisé pour exécuter le travail DataProc.
Pour surmonter cette erreur, vous devez accéder à la console de stratégie IAM et attribuer le rôle d'utilisateur du compte de service , comme décrit ici , au compte utilisateur / service actuel que vous utilisez pour exécuter la tâche. Comme illustré ci-dessous:
Soulignant certains sujets importants, les comptes de service sont utilisés pour effectuer des appels d'API autorisés, via le compte de service lui-même ou via des utilisateurs délégués en son sein. De plus, à propos des comptes de service d'emprunt d'identité, un utilisateur disposant d'autorisations particulières peut agir comme un autre compte de service avec l'autorisation nécessaire pour exécuter une tâche spécifique.
Remarque : à l'étape 3, vous pouvez également donner à un utilisateur particulier (email) les roles/iam.serviceAccountUser
en cliquant sur + AJOUTER (en haut de la console). Ensuite, rédigez l'e-mail et sélectionnez l'autorisation. Cependant, je dois souligner que cette autorisation serait donnée au niveau du projet. Ainsi, cet utilisateur pourra se faire passer pour l'un des comptes de service existants.
Je voudrais ajouter que le rôle d'utilisateur du compte de service doit être ajouté au compte de service Cloud Data Fusion qui a été automatiquement généré par Data Fusion lorsque l'API a été activée.
Dans mon cas, le membre s'appelle quelque chose comme:
service-############@gcp-sa-datafusion.iam.gserviceaccount.com
Et son nom est: Compte de service Cloud Data Fusion
Dans mon cas, l'erreur était trompeuse. Même si l'erreur indiquait que le problème était lié aux privilèges manquants pour l'utilisateur ' XXXXXXXX-compute@developer.gserviceaccount.com ', le problème réel n'a été résolu qu'après avoir accordé le rôle au service - ########## Utilisateur ##@gcp-sa-datafusion.iam.gserviceaccount.com . J'ai suivi les étapes fournies par @Alexandre Moraes pour accorder le niveau d'accès correct au compte de service Cloud Data Fusion.
Oui, le message d'erreur indique un compte de service incorrect (c'est-à-dire 5086XXXX8XXX-compute@developer.gserviceaccount.com '). En fait, le compte de service qui exécutait le processus était différent. Il peut être trouvé à partir des journaux ou de l'attribut authorisationInfo de la demande dans les journaux (comme indiqué dans l'image ci-jointe):
CreateCluster us-west1:cdap-getmember-xxxxxxx-2fff-11eb-98ba-6a77bxxxx9dc service-5086XXXX8XXX@gcp-sa-datafusion.iam.gserviceaccount.com
Vous devez ajouter un rôle (n'importe lequel parmi PROPRIÉTAIRE, ÉDITEUR, COMPTE DE SERVICE) à ce compte (c'est-à-dire service-5086XXXX8XXX@gcp-sa-datafusion.iam.gserviceaccount.com).
Pour l'emprunt d'identité, il s'agit d'une erreur courante. La clé est l'
Service Account Actor
autorisation. Par exemple, une instance Compute Engine peut avoir un compte de service attribué à l'instance. Cela signifie que l'utilisateur qui accède à l'instance doit disposer de cette autorisation, car il peut utiliser le compte de service tout en étant connecté à l'instance. Ceci est une fonction de sécurité.