服務帳戶可分為下列類別:
- 使用者代管的服務帳戶,由您自行建立及管理
- 服務代理程式,可 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 角色。許多專案層級服務代理會自動獲派所需角色。系統自動授予的角色名稱通常會以 serviceAgent
或 ServiceAgent
結尾。如為其他服務代理,您必須授予角色,服務才能正常運作。如要瞭解哪些服務代理會自動獲得角色,請參閱服務代理參考資料。
如果需要拒絕授予特定權限給包含服務代理程式的主體集 (例如主體集 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", } ] } } } }
後續步驟
- 瞭解如何建立及管理服務帳戶。
- 瞭解如何建立及管理服務帳戶金鑰。
- 瞭解使用服務帳戶的最佳做法。
- 詳閱管理服務帳戶金鑰的最佳做法。