服務帳戶的類型

服務帳戶可分為下列類別:

  • 使用者代管的服務帳戶,由您自行建立及管理
  • 服務代理程式,可 Google Cloud 建立及管理

本頁面說明如何建立及使用各類服務帳戶。

使用者代管的服務帳戶

使用者代管的服務帳戶是指您在專案中建立的服務帳戶。您可以視需要更新、停用、啟用及刪除這些服務帳戶。您也可以管理其他主體對這些服務帳戶的存取權。

您可以使用 IAM API、 Google Cloud 控制台或 Google Cloud CLI,在專案中建立使用者代管的服務帳戶。

根據預設,您可以在專案中建立最多 100 個使用者代管服務帳戶。如果這個配額無法滿足您的需求,您可以使用Google Cloud 主控台申請調整配額。只有使用者建立的服務帳戶會計入這項配額,預設服務帳戶服務代理不會計入配額。

在專案中建立使用者自管服務帳戶時,請選擇服務帳戶的名稱。這個名稱會顯示在服務帳戶的電子郵件地址中,格式如下:

service-account-name@project-id.iam.gserviceaccount.com

如要瞭解如何建立服務帳戶,請參閱「建立服務帳戶」。

預設服務帳戶

啟用或使用特定 Google Cloud 服務時,系統會自動建立預設服務帳戶,這類帳戶屬於使用者代管的服務帳戶。這些服務帳戶可讓服務部署可存取其他Google Cloud 資源的工作。建立預設服務帳戶後,您必須負責管理這些帳戶。

如果應用程式在具有預設服務帳戶的 Google Cloud 環境中執行,應用程式可以使用預設服務帳戶的憑證呼叫 Google Cloud API。或者,您也可以建立自己的使用者管理服務帳戶,並使用該帳戶進行驗證。詳情請參閱「設定應用程式預設憑證」。

視機構政策設定而定,系統可能會自動將專案的編輯者角色授予預設服務帳戶。強烈建議您 強制執行 iam.automaticIamGrantsForDefaultServiceAccounts 機構政策限制,停用自動授予角色功能。如果您是在 2024 年 5 月 3 日後建立機構,系統預設會強制執行這項限制。

如果停用自動角色授予功能,您必須決定要授予預設服務帳戶哪些角色,然後自行授予這些角色

如果預設服務帳戶已具備「編輯者」角色,建議您將「編輯者」角色替換為權限較少的角色。如要安全地修改服務帳戶的角色,請使用 政策模擬器查看變更的影響,然後授予及撤銷適當的角色

下表列出會建立預設服務帳戶的服務:

服務 服務帳戶名稱 電子郵件地址
App Engine,以及使用 App Engine 的任何 Google Cloud 服務 App Engine 預設服務帳戶 project-id@appspot.gserviceaccount.com
Compute Engine,以及任何使用 Compute Engine 的服務 Google Cloud Compute Engine 預設服務帳戶 project-number-compute@developer.gserviceaccount.com

服務代理

部分 Google Cloud 服務需要存取您的資源,才能代表您執行動作。舉例來說,當您使用 Cloud Run 執行容器時,服務需要存取可觸發容器的任何 Pub/Sub 主題。

為滿足這項需求, Google Cloud 會為許多 Google Cloud 服務建立及管理服務帳戶。這些服務帳戶稱為「服務代理程式」。您可能會在專案的允許政策、稽核記錄或 Google Cloud 控制台的 IAM 頁面中看到服務代理程式。如需完整的服務專員清單,請參閱服務專員

服務代理程式不會在專案中建立,因此查看專案的服務帳戶時,不會看到服務代理程式。您無法直接存取這些檔案。

根據預設,即使服務代理程式已獲授予專案角色,也不會列在Google Cloud 控制台的「IAM」IAM頁面中。如要查看服務代理人的角色授權,請選取「包含 Google 提供的角色授權」核取方塊。

Google Cloud 具有下列類型的服務代理程式:

特定服務的服務代理

大多數服務代理程式都是特定服務專用,代表個別服務執行動作。在許多情況下,服務代理程式是服務正常運作的必要條件。舉例來說,服務代理程式可讓 Cloud Logging 接收器將記錄寫入 Cloud Storage bucket。

每個服務代理程式都與一項資源相關聯。這個資源通常是專案、資料夾或機構,但也可能是服務專屬資源,例如 Cloud SQL 執行個體。這項資源定義服務代理程式動作的範圍。舉例來說,如果服務代理與專案建立關聯,就會代表專案及其子代資源的服務執行動作。

您可以查看服務代理的電子郵件地址,判斷服務代理與哪種資源相關聯:

  • 如果服務代理程式與專案、資料夾或機構組織相關聯,其電子郵件地址會包含該專案、資料夾或機構組織的數字 ID。
  • 如果服務代理與服務專屬資源相關聯,其電子郵件地址會包含數字專案 ID 和專屬 ID。服務代理程式所屬資源的專案 ID (數字),專屬 ID 可將服務代理與同一專案中的其他類似服務代理區分開來。

Google API 服務代理

專案的允許政策可能參照名為「Google APIs Service Agent」的服務帳戶,其電子郵件地址格式如下:project-number@cloudservices.gserviceaccount.com

這個服務帳戶會代您執行內部 Google Cloud 程序。 並自動獲得專案的「編輯者」角色 (roles/editor)。

服務代理的角色管理員

IAM 的稽核記錄可能會參照服務帳戶 service-agent-manager@system.gserviceaccount.com

這個服務帳戶會管理授予其他服務代理程式的角色。這項資訊只會顯示在稽核記錄中。

舉例來說,如果您使用新的 API, Google Cloud 可能會自動建立新的服務代理,並授予專案角色。授予這些角色會產生稽核記錄項目,顯示 service-agent-manager@system.gserviceaccount.com 為專案設定了允許政策。

建立服務代理

服務代理程式的確切建立時間取決於關聯的資源類型。

建立與服務專屬資源相關聯的服務代理程式時,系統會建立該資源。如要進一步瞭解如何識別及設定這些服務代理程式,請參閱相關資源的說明文件。

與專案、資料夾和機構相關聯的服務代理程式,通常會在您首次使用服務時建立。如有需要,您也可以在服務啟用前,要求 Google Cloud 為服務建立服務代理程式。詳情請參閱建立角色並授予服務代理人

服務代理的 IAM 角色

在 Google Cloud 中執行部分動作時,服務專員需要代您建立及存取資源。舉例來說,當您建立 Dataproc 叢集時,Dataproc 服務代理程式需要有權在專案中建立 Compute Engine 執行個體,才能建立叢集。

如要取得這項存取權,服務專員必須具備特定 IAM 角色。許多專案層級服務代理會自動獲派所需角色。系統自動授予的角色名稱通常會以 serviceAgentServiceAgent 結尾。如為其他服務代理,您必須授予角色,服務才能正常運作。如要瞭解哪些服務代理會自動獲得角色,請參閱服務代理參考資料

如果需要拒絕授予特定權限給包含服務代理程式的主體集 (例如主體集 principalSet://goog/public:all),建議在拒絕規則中將服務代理程式新增為例外狀況。確保服務持續正常運作。將服務代理程式新增為例外狀況時,請使用專案、資料夾或機構的服務代理程式主體集

如果您在服務啟用前要求建立服務代理程式,則必須授予服務代理程式通常會自動獲得的角色。 Google Cloud 這是因為應使用者要求建立的服務代理程式不會自動獲得角色。如果未授予服務代理人這些角色,部分服務可能無法正常運作。如要瞭解如何將這些角色授予服務代理程式,請參閱「建立服務代理程式並授予角色」。

主要服務代理

服務代理程式參照中,部分服務代理程式會識別為主要服務代理程式。主要服務代理是服務代理,當您觸發服務代理建立作業時,系統會傳回這類服務代理的電子郵件地址。

服務代理稽核記錄

有時,當主體啟動作業時,服務代理程式會代表主體執行動作。不過,在查看服務代理人的稽核記錄時,可能難以判斷服務代理人是代表誰執行動作,以及原因。

為協助您瞭解服務代理程式動作的背景資訊,部分服務代理程式會在稽核記錄中加入其他詳細資料,例如與動作相關聯的工作,以及建立該工作的主體。

下列服務代理程式會在稽核記錄中加入這些額外詳細資料:

這些額外詳細資料位於稽核記錄的 serviceDelegationHistory 欄位中,該欄位會巢狀內嵌在 authenticationInfo 欄位中。這個欄位包含下列資訊:

  • 建立工作的原始主體
  • 執行動作的服務代理
  • 服務代理所屬的服務
  • 工作 ID

舉例來說,假設 example-user@example.com 使用 BigQuery Connection API 建立工作。這項作業需要 BigQuery Connection API 的其中一個服務代理程式執行動作。在本例中,服務代理程式動作的稽核記錄會包含類似下列內容的 serviceDelegationHistory 欄位:

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com",
      "serviceDelegationHistory": {
        "originalPrincipal": "user:my-user@example.com",
        "serviceMetadata": [
          {
            "principalSubject": "serviceAccount:bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com",
            "serviceDomain": "bigquery.googleapis.com",
          }
        ]
      }
    }
  }
}

後續步驟

歡迎試用

如果您未曾使用過 Google Cloud,歡迎建立帳戶來評估我們的產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。

免費試用