服務帳戶

本頁面說明了服務帳戶、服務帳戶類型,以及服務帳戶可用的 IAM 角色。

事前準備

什麼是服務帳戶?

服務帳戶是一種特殊的 Google 帳戶,屬於您的應用程式或虛擬機器 (VM),而不屬於個別使用者。應用程式透過服務帳戶呼叫服務的 Google API,因此不會直接牽涉到使用者。

例如,Compute Engine VM 可以做為服務帳戶執行,而且您可為這個帳戶授予存取必要資源的權限。如此一來,服務帳戶即為服務的身分,而服務帳戶的權限控制了服務能存取的資源。

每個服務帳戶均使用不重複的電子郵件地址做為識別。

服務帳戶金鑰

每個服務帳戶都與一組由 Google Cloud Platform (GCP) 代管的金鑰相關聯。金鑰組的用途為 GCP 內部的服務對服務驗證,由 Google 自動輪替,用於簽署最多兩個星期。

您可以選擇建立一或多個外部金鑰組,以供 GCP 外部使用 (例如用於應用程式預設憑證)。當您建立新的金鑰組時,會下載私密金鑰 (Google 不會予以保留)。使用外部金鑰時,您必須負責維護私密金鑰及其他管理作業 (例如金鑰輪替) 的安全性。外部金鑰可透過 IAM API、gcloud 指令列工具,或 Google Cloud Platform 主控台中的「服務帳戶」頁面加以管理。您可為每個服務帳戶建立最多 10 個服務帳戶金鑰,以利進行金鑰輪替。

服務帳戶的類型

使用者代管的服務帳戶

使用 GCP 主控台建立新的 Cloud 專案時,如果您為專案啟用了 Compute Engine API,則系統會根據預設為您建立 Compute Engine 服務帳戶。這可以透過電子郵件識別:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

如果專案包含 App Engine 應用程式,在預設情況下系統會在專案中建立 App Engine 服務帳戶。這可以透過電子郵件識別:

PROJECT_ID@appspot.gserviceaccount.com

如果您在專案中建立服務帳戶,則需為服務帳戶命名,系統將指派以下格式的電子郵件給帳戶:

SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

您可以使用 IAM API、GCP 主控台或 gcloud 指令列工具,為每個專案建立最多 100 個服務帳戶 (包括預設 Compute Engine 服務帳戶和 App Engine 服務帳戶)。這些預設服務帳戶及您明確建立的服務帳戶皆為使用者代管的服務帳戶。

Google 代管服務帳戶

除了使用者代管的服務帳戶,專案 IAM 政策或 GCP 主控台中可能會顯示其他的服務帳戶。這些服務帳戶是由 Google 建立並擁有,代表不同的 Google 服務。系統會自動向各個帳戶授予 IAM 角色,以存取您的 GCP 專案。

Google API 服務帳戶

舉例來說,透過電子郵件識別的 Google API 服務帳戶即為 Google 代管的服務帳戶。

PROJECT_NUMBER@cloudservices.gserviceaccount.com

這個服務帳戶專門用於代表您執行內部 Google 程序,且未列在 GCP 主控台的「服務帳戶」區段中。根據預設,系統會自動將專案編輯者角色授予這個帳戶,並且會在 GCP 主控台的「IAM」區段中列出。只有刪除專案時,才能刪除這類服務帳戶。Google 服務依賴擁有您專案存取權的帳戶運作,因此您不應移除或變更服務帳戶在專案中的角色。

服務帳戶權限

除了做為身分外,服務帳戶也可做為附加 IAM 政策的資源。上述政策能決定哪些使用者能夠操作服務帳戶。

例如,Alice 可擁有服務帳戶的編輯者角色,而 Bob 則能具備服務帳戶的檢視者角色,如同將角色授予其他 GCP 資源一樣。

預設的 Compute Engine 和 App Engine 服務帳戶建立時,系統會授予專案的編輯者角色,在應用程式或 VM 執行個體中執行的程式碼就可藉此取得必要權限。在這種情況下,服務帳戶即為獲得資源 (專案) 編輯者角色的身分。

如要讓自動化作業存取 Cloud Storage 值區,請將 Cloud Storage 值區的讀取權限授予自動化作業所使用的服務帳戶。在此情況中,服務帳戶則為您授予其他資源 (Cloud Storage 值區) 權限的身分。

服務帳戶使用者角色

您可以向專案中的所有服務帳戶授予專案層級的 iam.serviceAccountUser 角色,或者授予服務帳戶層級的相同角色。

  • 向使用者授予專案的 iam.serviceAccountUser 角色,可讓使用者存取專案中的所有服務帳戶 (包括日後建立的服務帳戶)。

  • 向使用者授予特定服務帳戶的 iam.serviceAccountUser 角色,則可讓使用者存取這個服務帳戶。

如果您將 compute.instanceAdmin 角色與 iam.serviceAccountUser 角色授予使用者,他們就能建立及管理使用服務帳戶的 Compute Engine 執行個體。

向服務帳戶授予 IAM 角色後,您就能將服務帳戶指派給一或多個新的虛擬機器執行個體。如需詳細操作說明,請參閱設定新的執行個體以服務帳戶身分執行一節。

具有 serviceAccountUsers 的使用者能夠透過服務帳戶,間接存取服務帳戶能存取的所有資源。例如,具備 serviceAccountUser 角色的使用者,就可使用服務帳戶啟動執行個體,然後利用執行個體來存取服務帳戶身分有權存取的任何內容。但是,serviceAccountUser 角色不會允許使用者直接使用服務帳戶的角色,因此,將 iam.serviceAccountUser 角色授予使用者時,請務必小心謹慎。

服務帳戶代表了您的服務層級安全性。服務安全性的取決因素為:擁有能管理及使用服務帳戶之 IAM 角色的使用者,以及具有這些服務帳戶之私密外部金鑰的使用者。確保安全的最佳做法如下所示:

  • 使用 IAM API 來稽核服務帳戶、金鑰和這些服務帳戶的政策。
  • 如果您的服務帳戶不需要外部金鑰,請予以刪除。
  • 如果使用者不需要管理或使用服務帳戶的權限,請將這些權限從 IAM 政策中移除。

如需進一步瞭解最佳做法,請參閱瞭解服務帳戶一文。

服務帳戶憑證建立者角色

這個角色可以模擬服務帳戶,以建立 OAuth2 存取憑證、簽署 blob 或簽署 JWT。

服務帳戶執行者角色

本角色已經淘汰。如果您需要以服務帳戶進行作業,請使用服務帳戶使用者角色。為了有效提供與服務帳戶執行者相同的權限,您應該另行授予服務帳戶憑證建立者

存取權範圍

存取權範圍是為虛擬機器指定權限的傳統方法。在我們推出 IAM 角色之前,只能透過存取權範圍這種機制將權限授予服務帳戶。雖然這種作法不是目前授予權限的主要方式,但當您將執行個體設為以服務帳戶執行時,仍須設定存取權範圍。如需進一步瞭解存取權範圍,請參閱 Google Compute Engine 說明文件

短期服務帳戶憑證

建立短期憑證可讓您取得 GCP 服務帳戶的身分。這些憑證能夠用於驗證對 Google Cloud Platform API 或其他非 Google API 的呼叫。

這類憑證最常見的用途為暫時指派橫跨不同專案、機構或帳戶的 GCP 資源存取權。例如,不向外部呼叫者提供高權限服務帳戶的永久憑證,而是授予暫時的緊急存取權。或者,外部呼叫者也可以模擬權限受限的指定服務帳戶,而無需高權限的服務帳戶憑證。

如需詳細資訊,請參閱建立短期服務帳戶憑證一文。

應用程式預設憑證

應用程式預設憑證是一種機制,可讓使用者在 GCP 內部、外部以及橫跨多個 GCP 專案作業時,更輕鬆地使用服務帳戶。最常見的使用案例是在本機電腦上的測試代碼,然後轉移到 GCP 中的開發專案,再轉移到 GCP 中的生產專案。使用應用程式預設憑證可確保服務帳戶運作順暢;在本機電腦上進行測試時,它將使用本機儲存的服務帳戶金鑰,但在 Compute Engine 上執行時,它會使用專案的預設 Compute Engine 服務帳戶。請參閱應用程式預設憑證以取得更多資訊。

後續步驟

如需使用服務帳戶的最佳做法,請參閱瞭解服務帳戶一文。

建議您閱讀以下指南,瞭解相關作業方法:

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud IAM Documentation