次のように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]
バケット内のオブジェクトのリストを取得できます...それで、何が起こっているのか理解できません。何をすべきかについての手がかりはありますか?
GCPには、rolesおよびpermissionsの概念があります。 roleはStorage Admin(roles/storage.admin
)とpermissionはstorage.buckets.get
のようなものです。ロールは1つ以上の権限で構成されます。権限は常に、プリンシパル(ユーザー、サービスアカウント、またはグループ)にロールを適用することによって付与されます。つまり、権限をプリンシパルに直接割り当てることはできません。
表示されているエラーは、サービスアカウントに権限storage.buckets.get
がないためです。つまり、サービスアカウントに適用されているどの役割もstorage.buckets.get権限を付与していません。バケットを一覧表示する機能(storage.buckets.get権限)がなくても、バケットのオブジェクトを一覧表示できます(storage.objects.list権限)。
したがって、storage.buckets.get権限を持つroles/storage.admin
などの役割を割り当てる必要があります。最小特権モデルで操作したい場合は、その権限のみで カスタムロール を作成することもできます。