簡體   English   中英

從 GKE pod 內部進行 GCS 寫訪問

[英]GCS write access from inside a GKE pod

我無法從 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的輸出。

我需要什么特殊的醬汁才能讓 pod 寫入存儲桶?

GKE 集群是使用默認權限創建的,它只有 GCS 的讀取范圍。 解決方案:

  1. 應用來自更改 Google 容器引擎集群權限的建議
  2. 按照https://developers.google.com/identity/protocols/application-default-credentials 中的說明設置GOOGLE_APPLICATION_CREDENTIALS

您需要為集群設置權限(或者在 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",
    ]

遇到了同樣的問題,我必須重新創建一個帶有自定義安全配置的節點池才能獲得該訪問權限。 此外,在我的 pod 中,我安裝了一個秘密(default-token-XXXXX)中提供的 SA 然后,一旦在 pod 中安裝了 gcloud(通過 docker 文件),它就像一個魅力。 關鍵是節點池配置和安裝 SA。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM