首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GKE的GCS,403写入GCS桶的权限不足

使用GKE的GCS,403写入GCS桶的权限不足
EN

Stack Overflow用户
提问于 2017-11-03 05:06:47
回答 1查看 5K关注 0票数 7

目前,我正在尝试将文件写入GoogleCloudStorage桶中。为此,我使用了django-仓库包。

我已经部署了代码,并通过kubernetes kubectl实用程序进入正在运行的容器,以检查GCS桶的工作情况。

代码语言:javascript
复制
$ kubectl exec -it foo-pod -c foo-container --namespace=testing python manage.py shell

我能读懂桶,但是如果我试图写进桶中,它会显示下面的回溯。

代码语言:javascript
复制
>>> from django.core.files.storage import default_storage
>>> f = default_storage.open('storage_test', 'w')
>>> f.write('hi')
2
>>> f.close()
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/google/cloud/storage/blob.py", line 946, in upload_from_file
    client, file_obj, content_type, size, num_retries)
  File "/usr/local/lib/python3.6/site-packages/google/cloud/storage/blob.py", line 867, in _do_upload
    client, stream, content_type, size, num_retries)
  File "/usr/local/lib/python3.6/site-packages/google/cloud/storage/blob.py", line 700, in _do_multipart_upload
    transport, data, object_metadata, content_type)
  File "/usr/local/lib/python3.6/site-packages/google/resumable_media/requests/upload.py", line 98, in transmit
    self._process_response(result)
  File "/usr/local/lib/python3.6/site-packages/google/resumable_media/_upload.py", line 110, in _process_response
    response, (http_client.OK,), self._get_status_code)
  File "/usr/local/lib/python3.6/site-packages/google/resumable_media/_helpers.py", line 93, in require_status_code
    status_code, u'Expected one of', *status_codes)
google.resumable_media.common.InvalidResponse: ('Request failed with status code', 403, 'Expected one of', <HTTPStatus.OK: 200>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.6/site-packages/storages/backends/gcloud.py", line 75, in close
    self.blob.upload_from_file(self.file, content_type=self.mime_type)
  File "/usr/local/lib/python3.6/site-packages/google/cloud/storage/blob.py", line 949, in upload_from_file
    _raise_from_invalid_response(exc)
  File "/usr/local/lib/python3.6/site-packages/google/cloud/storage/blob.py", line 1735, in _raise_from_invalid_response
    raise exceptions.from_http_response(error.response)
google.api_core.exceptions.Forbidden: 403 POST https://www.googleapis.com/upload/storage/v1/b/foo.com/o?uploadType=multipart: Insufficient Permission
>>> default_storage.url('new docker')
'https://storage.googleapis.com/foo.appspot.com/new%20docker'
>>>

似乎它与桶权限完全相关。因此,我已经将Storage、Storage创建者角色分配给帐户(通过桶->管理权限),但仍然显示了相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-06 08:54:21

如果没有为集群分配正确的作用域,可能会对此做出解释。如果是这样的话,集群中的节点将不具备写入Google所需的授权/权限,这可以解释您正在看到的403个错误。

如果在创建群集时没有设置范围,则会分配默认作用域,这只会为云存储提供读取权限。

为了使用Cloud检查集群当前的作用域,您可以尝试从clusters运行一个“describe”命令,例如:

代码语言:javascript
复制
gcloud container clusters describe CLUSTER-NAME --zone ZONE

输出的oauthScopes部分包含分配给集群/节点的当前作用域。

默认的只读云存储范围将显示:

代码语言:javascript
复制
https://www.googleapis.com/auth/devstorage.read_only

如果设置了云存储读写范围,则输出将显示:

代码语言:javascript
复制
https://www.googleapis.com/auth/devstorage.read_write

在集群创建期间,可以使用--范围开关设置范围,后面跟着所需的范围标识符。在您的情况下,这将是“存储-rw”。例如,您可以运行如下内容:

gcloud容器集群创建集群-名称-区域-区域-范围存储-rw

然后,结合服务帐户的storage-rw作用域应该允许集群中的节点写入云存储。

或者,如果您不想重新创建集群,您可以创建一个具有新需要范围的新节点池,然后删除旧的节点池。有关如何实现这一目标的信息,请参见是否需要重新创建集群来修改API权限?的公认答案。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47088830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档