GCS从GKE pod内部写入访问权限

时间:2017-09-29 21:16:12

标签: google-cloud-storage google-kubernetes-engine

我无法从GKE pod中获得对GCS存储桶的写入权限。

我有一个GKE pod正在运行。我没有更改任何有关服务帐户的k8s配置。我有docker exec进入pod并安装了gcloud / gsutil。 gcloud auth list显示1234-compute@developer.gserviceaccount.com条目。在GCS中,我添加了与存储管理员,存储旧版存储桶所有者,存储对象创建者相同的帐户(即,我只是尝试了一堆东西)。我可以运行gsutil ls gs://bucket。但是,当运行gsutil cp file gs://bucket时,它会打印:

AccessDeniedException: 403 Insufficient OAuth2 scope to perform this operation. 
Acceptable scopes: https://www.googleapis.com/auth/cloud-platform

gsutil acl get gs://bucket打印:

AccessDeniedException: Access denied. Please ensure you have OWNER permission on gs://bucket

我尝试过的其他事情是添加allUsers和allAuthenticatedUsers作为存储桶的创建者和所有者,没有任何变化。我能够从我的开发机器上写入桶就好了。

当我从另一台机器运行gsutil acl get gs://bucket时,它会打印与OWNER相同的地址,作为来自pod中gcloud auth list的输出。

我需要什么特殊酱才能让豆荚写入水桶?

3 个答案:

答案 0 :(得分:1)

GKE集群是使用默认权限创建的,该权限仅具有GCS的读取范围。解决方案:

  1. 应用Changing Permissions of Google Container Engine Cluster
  2. 的建议
  3. 按照https://developers.google.com/identity/protocols/application-default-credentials
  4. 中的说明设置GOOGLE_APPLICATION_CREDENTIALS

答案 1 :(得分:0)

您需要为集群设置权限(或者在Terraform的情况下为特定节点设置更好的权限):

    oauth_scopes = [
      "https://www.googleapis.com/auth/devstorage.read_write", // 'ere we go!
      "https://www.googleapis.com/auth/logging.write",
      "https://www.googleapis.com/auth/monitoring",
      "https://www.googleapis.com/auth/service.management.readonly",
      "https://www.googleapis.com/auth/servicecontrol",
      "https://www.googleapis.com/auth/trace.append",
      "https://www.googleapis.com/auth/compute",
    ]

答案 2 :(得分:0)

遇到了同样的问题,我必须重新创建一个具有自定义安全配置的节点池才能获得该访问权限。 另外,在我的 pod 中,我安装了一个秘密提供的 SA (default-token-XXXXX) 然后,一旦 gcloud 安装在 pod 中(通过 docker 文件),它就像一个魅力。 关键是节点池配置和 SA 挂载。

相关问题