Google-Cloud-Platform

GCP 服務帳號權限

  • July 9, 2021

GCP新手在這裡,希望有一個我想念的快速答案。

我有一個執行 GCE VM 的項目。我想不時將數據集備份到 GCP 的對象儲存中。我的計劃是從 cron 作業中執行“gsutil rsync …”。

我創建了一個儲存桶供作業使用。我沒有編輯儲存桶上的權限、角色或任何內容。

我執行“sudo su -”以便我以 root 身份執行,正如我期望的 cron 作業那樣,然後鍵入

gsutil rsync -r -d <要備份的目錄> gs://<bucket>/

我得到

AccessDeniedException: 403 權限不足

在這種狀態下,我輸入了“gcloud config list”並得到

帳戶 = <xyz>-compute@developer.gserviceaccount.com

disable_usage_reporting = 真

項目 = <項目 ID>

您的活動配置是:

$$ default $$

這是我創建 VM 時創建的預設服務帳戶。我沒有對其進行任何編輯。

在控制台中,我進入IAM->service accounts,點擊這個service account,點擊permissions選項卡,我看到這個service account是<project id>上的一個Editor

在控制台中,我轉到 Cloud Storage,瀏覽,點擊我的儲存桶,轉到權限選項卡,我看到 Editor 的角色具有角色“Storage Legacy Bucket Owner”和“Storage Legacy Object Owner”查看這些角色,我被告知第一個是對具有創建/列出/刪除對象權限的現有儲存桶的讀/寫訪問權限。第二個使我可以對現有對象進行讀/寫訪問。

我已經確認桶目前是空的。

我需要做什麼才能使我的 gsutil 命令以足夠的權限執行?

您的問題很可能是 Compute Engine VM 實例 Cloud API 訪問範圍不足。

gsutil rsync命令需要以下權限:

  • storage.objects.create
  • storage.objects.delete
  • storage.objects.list
  • storage.objects.get # 桶到桶副本需要

該角色roles/editor沒有這些權限。

Google Cloud Compute Engine VM 實例使用兩種方法進行授權:

  • 預設服務帳號
  • 雲 API 訪問範圍

服務帳戶必須具有授予上述權限的角色,或者必須授予服務帳戶身份訪問儲存桶及其內容的權限。Google Cloud Storage 支持兩種不同的授權方法。為簡單起見,我建議您向服務帳戶添加所需的角色。對於您的案例gsutil rsync,我建議添加角色roles/storage.legacyBucketOwner

但是,即使服務帳戶通過角色擁有所需的權限,Compute Engine Cloud API 訪問範圍也可以取消這些權限。轉到 Google Cloud Console,選擇您的 VM 實例。檢查啟用了哪些範圍。您應該啟用“儲存:完全”或“允許完全訪問所有云 API”。否則,服務帳戶將受限於 gsutil 授權所需的 OAuth 訪問令牌獲得的權限。

Compute Engine 虛擬機實例 Cloud API 訪問範圍

引用自:https://serverfault.com/questions/1069066