dee*_*bug 5 python google-cloud-storage google-cloud-platform
我创建了一个服务帐户并分配了以下角色:
Owner
Storage Admin
Storage Object Admin
Tester
Run Code Online (Sandbox Code Playgroud)
Tester 是我为学习目的创建的具有以下权限的角色:
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
...
Run Code Online (Sandbox Code Playgroud)
我知道我不必要地过度使用这些角色的权限;但是,这仅用于测试目的。
考虑到bucket只包含一个文件并且账户有相应的权限,下面的Python代码应该可以工作(在我的本地计算机上运行):
Owner
Storage Admin
Storage Object Admin
Tester
Run Code Online (Sandbox Code Playgroud)
但它没有:
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.
Run Code Online (Sandbox Code Playgroud)
存储桶使用统一的存储桶级访问控制。我使用的服务帐户是此存储桶的成员,它继承了以下成员资格:
Storage Admin
Storage Object Admin
Tester
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这种行为背后的原因吗?
谢谢
小智 5
我在创建存储桶之前尝试检查项目中是否已存在存储桶时遇到了这个问题,就我而言,这并不是角色问题,因为我的服务帐户有存储管理员、存储对象管理员和创建者角色,但事实证明我试图检查存在/创建的存储桶名称(从我的 python 代码内部)不是全局唯一的。当我将存储桶的名称更改为全局唯一的名称时,错误消失了。
| 归档时间: |
|
| 查看次数: |
15483 次 |
| 最近记录: |