4 votes

Comment accéder aux objets de seaux GCS à travers des projets en utilisant un compte de service ?

J'ai créé une application Google App Engine qui écoute les notifications de stockage Google Cloud et chaque fois qu'un nouvel objet est créé sur GCS, l'application doit ouvrir le nouvel objet et effectuer des opérations en fonction de son contenu. Je ne peux pas accéder au contenu de l'objet lorsque l'application et le bucket gcs sont dans des projets différents.

Configuration:

J'ai créé un compte de service dans le projet A avec les autorisations Admin d'objet de stockage, associé l'application GAE avec lui, activé le compte de service en utilisant :

gcloud auth activate-service-account \[COMPTE\] --key-file=KEY\_FILE

J'ai ensuite créé un bucket gs://some_bucket dans le projet B dans la même région que mon application GAE, et j'ai ajouté mon compte de service en tant que propriétaire du bucket.

J'ai ajouté mon compte de service en tant que membre du projet B avec des autorisations "Admin d'objet de stockage".

J'ai créé un canal watchbucket entre mon application et le bucket en utilisant

gsutil notification watchbucket -i \[ChannelId\] -t \[Token\] https://\[nom-de-l'application\].appspot.com/ gs://some\_bucket

Maintenant, mon application reçoit des requêtes post, je peux les analyser, trouver le bucket source, la taille, le nom de l'objet, etc. mais je ne peux pas lire les objets eux-mêmes. Je reçois l'erreur suivante.

{Localisation : ""; Message : "Accès refusé : Fichier gs://some\_bucket/some\_object : Accès refusé"; Raison : "accessDenied"}

J'ai testé la configuration ci-dessus dans le même projet (projet A), et je peux lire les objets et opérer dessus. Il s'agit d'un problème de permissions que je n'arrive pas à résoudre.

3voto

ioverzero Points 51

Les autorisations du bucket GCS sont différentes des autorisations des objets GCS, être propriétaire d'un bucket ne se traduit pas par être propriétaire de l'objet ou avoir accès à l'objet. Vous pouvez accorder des autorisations de lecture à tous les objets GCS existants dans votre bucket de manière récursive en utilisant la commande suivante :

gsutil -m acl ch -u name@project.iam.gserviceaccount.com:R -r gs://example-bucket

ce qui accordera de manière récursive des autorisations de lecture au compte de service pour tous les objets du bucket.

On peut également vouloir modifier les autorisations par défaut des objets du bucket afin que tous les futurs objets arrivant dans votre bucket GCS aient les autorisations souhaitées

gsutil defacl ch -u name@project.iam.gserviceaccount.com:READ gs://example-bucket

Modification des ACL d'objet : https://cloud.google.com/storage/docs/gsutil/commands/acl

Modification des ACL d'objet par défaut : https://cloud.google.com/storage/docs/gsutil/commands/defacl

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X