web-dev-qa-db-fra.com

Compte de service n'a pas de stockage.buckets.get Accès au godet

J'essaie d'obtenir une liste de godets dans un projet, en utilisant python comme ceci:

from google.cloud import storage

storage_client = storage.Client(project='[project-id]')
bucket = storage_client.get_bucket([bucket-name])

blobs = bucket.list_blobs()

for blob in blobs:
    print(blob.name)

Mais je reçois une erreur:

[service-account-ID][email protected] does not have storage.buckets.get access to [bucket-name]

Quoi qu'il en soit, si j'essaie d'utiliser Gsutil (en utilisant le même compte de service):

gsutil ls gs://[bucket-name]

Je peux obtenir la liste des objets dans le seau ... Je ne comprends donc pas ce qui se passe, aucune idée de ce que je devrais faire?

5
Dimitri

GCP a le concept de rôles et autorisations . Un rôle est quelque chose comme l'administrateur de stockage (roles/storage.admin) et une autorisation est quelque chose comme storage.buckets.get. Les rôles sont constitués d'une ou de plusieurs autorisations. Les autorisations sont toujours accordées en appliquant un rôle à un capital (utilisateur, compte de service ou groupe) - c'est-à-dire que vous ne pouvez pas attribuer une autorisation directement à un directeur.

L'erreur que vous voyez est parce que la permission storage.buckets.get est absent du compte de service - c'est-à-dire que, aucun des rôles appliqués au compte de service accorder au stockage.buckets.get la permission. Vous pouvez répertorier les objets d'un godet (stockage.Object.List Permission) sans la possibilité de répertorier les godets (stockage.buckets.get).

Par conséquent, vous devez attribuer un rôle tel que roles/storage.admin cela a la permission de stockage.buckets.get. Vous pouvez également créer un rôle personnalisé avec juste cette autorisation si vous souhaitez utiliser un modèle de moindre privilège.

4
Garrett