web-dev-qa-db-ja.com

サービスアカウントにはバケットへのstorage.buckets.getアクセス権がありません

次のようにpythonを使用して、プロジェクトのバケットのリストを取得しようとしています:

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)

しかし、私はエラーが発生します:

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

とにかく、(同じサービスアカウントを使用して)gsutilを使用してみます。

gsutil ls gs://[bucket-name]

バケット内のオブジェクトのリストを取得できます...それで、何が起こっているのか理解できません。何をすべきかについての手がかりはありますか?

4
Dimitri

GCPには、rolesおよびpermissionsの概念があります。 roleはStorage Admin(roles/storage.admin)とpermissionstorage.buckets.getのようなものです。ロールは1つ以上の権限で構成されます。権限は常に、プリンシパル(ユーザー、サービスアカウント、またはグループ)にロールを適用することによって付与されます。つまり、権限をプリンシパルに直接割り当てることはできません。

表示されているエラーは、サービスアカウントに権限storage.buckets.getがないためです。つまり、サービスアカウントに適用されているどの役割もstorage.buckets.get権限を付与していません。バケットを一覧表示する機能(storage.buckets.get権限)がなくても、バケットのオブジェクトを一覧表示できます(storage.objects.list権限)。

したがって、storage.buckets.get権限を持つroles/storage.adminなどの役割を割り当てる必要があります。最小特権モデルで操作したい場合は、その権限のみで カスタムロール を作成することもできます。

1
Garrett