I created a service account and assigned these roles:
Owner
Storage Admin
Storage Object Admin
Tester
Tester
is a role I created for learning purposes with these permissions:
storage.buckets.create
storage.buckets.delete
storage.buckets.get
storage.buckets.getIamPolicy
storage.buckets.list
storage.buckets.setIamPolicy
storage.buckets.update
storage.objects.create
storage.objects.delete
storage.objects.get
storage.objects.getIamPolicy
storage.objects.list
storage.objects.setIamPolicy
storage.objects.update
...
I know I'm unnecessarily overdoing permissions with these roles; but, this is just for testing purposes.
Considering the bucket only contains a single file and the account has the corresponding permissions, the Python code below should work (Running on my local computer):
from google.cloud import storage
if __name__ == '__main__':
storage_client = storage.Client()
bucket = storage_client.bucket('my-bucket-name')
blobs = bucket.list_blobs()
for blob in blobs:
print(blob.name)
But it doesn't:
Traceback (most recent call last):
File "gcloud/test.py", line 8, in <module>
for blob in blobs:
File "/home/user/.local/lib/python3.6/site-packages/google/api_core/page_iterator.py", line 212, in _items_iter
for page in self._page_iter(increment=False):
File "/home/berkay/.local/lib/python3.6/site-packages/google/api_core/page_iterator.py", line 243, in _page_iter
page = self._next_page()
File "/home/user/.local/lib/python3.6/site-packages/google/api_core/page_iterator.py", line 369, in _next_page
response = self._get_next_page_response()
File "/home/user/.local/lib/python3.6/site-packages/google/api_core/page_iterator.py", line 419, in _get_next_page_response
method=self._HTTP_METHOD, path=self.path, query_params=params
File "/home/user/.local/lib/python3.6/site-packages/google/cloud/_http.py", line 421, in api_request
raise exceptions.from_http_response(response)
google.api_core.exceptions.Forbidden: 403 GET LINK: USER does not have storage.objects.list access to BUCKET.
The bucket uses uniform bucket-level access control. The service account I'm using is a member of this bucket and it inherits this membership from:
Storage Admin
Storage Object Admin
Tester
Can someone explain me the reason behind this behavior?
Thanks