Je suis connecté à une instance GCE via SSH. De là, j'aimerais accéder au stockage à l'aide d'un compte de service:
GCE> gcloud auth list
Credentialed accounts:
- [email protected] (active)
Je me suis d'abord assuré que ce compte de service est marqué "Peut modifier" dans les autorisations du projet sur lequel je travaille. Je me suis également assuré de lui donner la liste de contrôle d'accès Write (Écriture) sur le compartiment pour que je copie un fichier:
local> gsutil acl ch -u [email protected]:W gs://mybucket
Mais alors la commande suivante échoue:
GCE> gsutil cp test.txt gs://mybucket/logs
(Je me suis également assuré que "les journaux" sont créés sous "mybucket").
Le message d'erreur que je reçois est le suivant:
Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission 0 B
Qu'est-ce que je rate?
Une autre chose à rechercher est de vous assurer de configurer les étendues appropriées lors de la création de la machine virtuelle GCE. Même si un VM a un compte de service connecté, des étendues de devstorage doivent lui être attribuées pour pouvoir accéder à GCS.
Par exemple, si vous aviez créé votre VM avec devstorage.read_only
Portée, en essayant d'écrire dans un seau échouerait, même si votre compte de service est autorisé à écrire dans le seau. Vous auriez besoin de devstorage.full_control
ou devstorage.read_write
.
Voir la section sur Préparation d’une instance pour l’utilisation de comptes de service pour plus de détails.
Remarque: le compte de service de calcul par défaut a des portées très limitées (notamment le fait de lire en lecture seule vers GCS). Cette opération est effectuée car le compte de service par défaut dispose des autorisations IAM de l'éditeur de projet. Si vous utilisez un compte de service utilisateur, le problème ne se pose généralement pas, car les comptes de service créés par l'utilisateur obtiennent tous les accès à l'étendue par défaut.
gsutil config -b
Ensuite, surfez sur l'URL fournie, [CLICK Allow]
Copiez ensuite le code de vérification et collez-le dans le terminal.
Vous devez vous connecter avec un compte disposant des autorisations nécessaires pour ce projet:
gcloud auth login
J'ai écrit une réponse à cette question car je ne peux pas poster de commentaires:
Cette erreur peut également se produire si vous exécutez la commande gsutil
avec un préfixe Sudo
dans certains cas.
gcloud auth login
et suivez les étapes.Réf.: https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ
À partir de la documentation: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes
Vous devez d'abord arrêter l'instance -> aller à la page d'édition -> aller à "Étendues d'accès au Cloud API" et choisir "accès total au stockage ou lecture/écriture ou tout ce dont vous avez besoin"
Modification du compte de service et des étendues d’accès pour une instance Si vous souhaitez exécuter le VM sous une identité différente, ou si vous déterminez que l’instance nécessite un autre ensemble d’étendues pour appeler les API requises, vous devez Vous pouvez modifier le compte de service et les étendues d’accès d’une instance existante, par exemple, pour accorder l’accès à une nouvelle API ou modifier une instance afin qu’elle s’exécute en tant que compte de service que vous avez créé, au lieu de Compute. Compte de service par défaut du moteur.
Pour modifier le compte de service d'une instance et les étendues d'accès, l'instance doit être temporairement arrêtée. Pour arrêter votre instance, lisez la documentation relative à l'arrêt d'une instance. Après avoir modifié le compte de service ou les étendues d'accès, n'oubliez pas de redémarrer l'instance. Utilisez l'une des méthodes suivantes pour modifier le compte de service ou les étendues d'accès de l'instance arrêtée.