服務帳戶模擬

當經過驗證的主體 (例如使用者或其他服務帳戶) 驗證為服務帳戶,以取得服務帳戶的權限時,即為模擬服務帳戶。模擬服務帳戶可讓經過驗證的主體存取服務帳戶可存取的任何項目。只有經過驗證且具備適當權限的主體,才能模擬服務帳戶。

如果您想變更使用者的權限,但不想變更身分與存取權管理 (IAM) 政策,模擬功能就相當實用。舉例來說,您可以透過模擬功能暫時授予使用者更高的存取權,或是測試特定權限組合是否足以執行工作。您也可以使用模擬功能,在本機開發只能以服務帳戶執行的應用程式,或驗證在 Google Cloud外部執行的應用程式。

Google Cloud 服務帳戶模擬功能與 Amazon Web Services (AWS) Security Token Service API 方法類似,例如 AssumeRole

服務帳戶模擬功能的運作方式

服務帳戶模擬一律涉及兩個身分:經過驗證的主體,以及主體模擬的服務帳戶。如要模擬服務帳戶,經過驗證的主體會取得服務帳戶的權杖,然後使用該權杖以服務帳戶的身分進行驗證。

模擬服務帳戶的方法有很多種:

  • 執行 Google Cloud CLI 指令時,請設定 --impersonate-service-account 旗標impersonate-service-account 屬性。使用這項設定執行 gcloud CLI 指令時,gcloud CLI 會為服務帳戶建立短期憑證,然後使用這些憑證執行指令。

    設定應用程式預設憑證檔案時,您也可以使用 --impersonate-service-account 旗標。完成這項設定後,支援模擬的用戶端程式庫就能自動模擬服務帳戶。

  • 使用服務帳戶憑證 API 建立短期憑證,然後使用這些憑證驗證 API 要求。

    短期憑證的生命週期有限,持續時間只有幾個小時或更短,且不會自動重新整理。相較於長期憑證 (例如服務帳戶金鑰),短期憑證的風險較小。

  • 使用憑證設定檔設定外部應用程式,模擬服務帳戶。這個選項僅適用於使用 Workload Identity Federation 的應用程式。

    應用程式使用憑證設定檔存取Google Cloud時,會先使用環境專屬憑證,取得指定服務帳戶的短期憑證。然後,使用該短期憑證向 Google Cloud進行驗證。

如果主體模擬服務帳戶存取資源,大部分稽核記錄都會同時包含主體的身分,以及主體模擬的服務帳戶身分。詳情請參閱解讀稽核記錄

使用 Google Cloud 控制台時,您一律會透過使用者憑證進行驗證,無法模擬服務帳戶來存取Google Cloud 控制台中的資源。

驗證 (不冒用身分)

工作負載或使用者可以透過多種方式,以服務帳戶的身分進行驗證,不必模擬服務帳戶:

  • 工作負載會使用附加的服務帳戶向 Google API 進行驗證。在這種情況下,附加的服務帳戶會做為工作負載的身分,也是要求中唯一經過驗證的身分。

    如要瞭解工作負載如何向 Google Cloud進行驗證,請參閱工作負載的身分

  • 主體會使用服務帳戶金鑰,以服務帳戶的身分進行驗證。 使用服務帳戶金鑰以服務帳戶身分進行驗證時,只會涉及一個經過驗證的身分:服務帳戶。因為只涉及一個身分,使用金鑰並非服務帳戶模擬。

在這些情況下,稽核記錄只會記錄服務帳戶的身分。 這些記錄不會記錄任何其他身分,例如在工作負載上執行程式碼的使用者身分,或是使用服務帳戶金鑰進行驗證的人員身分。因此,使用服務帳戶金鑰或授權開發人員在具備特殊權限的資源上執行程式碼 (例如 VM 執行個體的 SSH 工作階段),可能會造成權限提升和不可否認性風險。

所需權限

如要模擬服務帳戶,您需要 iam.serviceAccounts.getAccessToken 權限。這項權限位於「服務帳戶憑證建立者角色」(roles/iam.serviceAccountTokenCreator) 等角色中。

如要進一步瞭解模擬作業所需的角色,請參閱服務帳戶驗證的角色

服務帳戶模擬的用途

需要執行下列工作時,服務帳戶模擬功能就派得上用場:

  • 授予使用者暫時的提升權限
  • 測試特定權限組合是否足以執行工作
  • 在本機開發只能以服務帳戶身分執行的應用程式
  • 驗證外部應用程式

授予暫時提升的存取權

在某些情況下,您可能想讓使用者暫時存取特定資源。舉例來說,您可能想授予使用者額外存取權,以便解決事件;或是允許使用者在記錄正當理由後,於有限時間內存取敏感資料。

模擬服務帳戶是授予使用者這類暫時性提升權限的方法之一。如要使用服務帳戶取得暫時提升的存取權,請先授予服務帳戶您想暫時授予使用者的 IAM 角色。接著,您可以授予使用者模擬服務帳戶的權限,或使用權杖代理程式為服務帳戶核發短期憑證,讓使用者模擬服務帳戶。

如要進一步瞭解如何授予使用者臨時提升的存取權,請參閱臨時提升的存取權總覽

測試權限

在某些情況下,您可能會想確認特定權限組合是否足以執行工作。舉例來說,您可能會想確認移除某些多餘權限後,服務帳戶是否仍可執行應用程式。或者,您可能正在協助使用者排解工作問題,並想確認他們是否能使用目前的 IAM 角色執行特定指令。

您可以使用服務帳戶模擬功能,測試特定權限組合。首先,請建立服務帳戶,並授予一或多個 IAM 角色,這些角色應具備您要測試的權限。接著模擬服務帳戶並嘗試執行工作。您可以使用這個方法測試權限,不必建立測試使用者帳戶或修改自己的 IAM 權限。

如要瞭解如何模擬服務帳戶,請參閱「使用服務帳戶模擬」。

在本機開發應用程式

在本機開發應用程式時,通常可以使用使用者憑證進行驗證。不過,在某些情況下,這可能無法實現,例如您想向需要自訂目標對象權杖的服務進行驗證,但使用者通常無法設定這類權杖。在這些情況下,您需要以服務帳戶身分進行驗證,而不是使用使用者憑證驗證。

在這些情況下,建議您使用服務帳戶模擬功能。使用服務帳戶模擬功能可避免使用服務帳戶金鑰,進而降低安全風險。

如要瞭解如何模擬服務帳戶開發應用程式,請參閱服務帳戶模擬

驗證外部應用程式

如要存取 Google Cloud 資源,在Google Cloud 外部執行的應用程式必須向 Google Cloud進行驗證。驗證這些應用程式的方法之一是使用服務帳戶模擬功能。

如要讓應用程式模擬服務帳戶,您必須先設定工作負載身分聯合,為應用程式提供經過驗證的身分。接著,您可以使用憑證設定檔,設定應用程式模擬服務帳戶。

雖然可以使用服務帳戶金鑰驗證外部應用程式,但我們強烈建議不要這麼做。服務帳戶金鑰會造成額外的安全性風險,因此請盡量避免使用。

後續步驟