使用服務帳戶模擬功能

如果您使用的主體沒有完成工作所需的權限,或想在開發環境中使用服務帳戶,可以模擬服務帳戶

使用服務帳戶模擬時,您會先以經過驗證的主體 (您的使用者帳戶或服務帳戶) 開始,然後為具有授權的服務帳戶要求短期憑證,以滿足您的用途需求。經過驗證的主體必須具備必要權限,才能模擬服務帳戶。

與使用服務帳戶金鑰相比,服務帳戶模擬功能更安全,因為服務帳戶模擬功能需要事先經過驗證的身分,而且使用模擬功能建立的憑證不會保留。相較之下,使用服務帳戶金鑰驗證不需要事先驗證,而且如果公開,永久金鑰就是高風險憑證。

如要進一步瞭解服務帳戶模擬功能,請參閱服務帳戶模擬功能

事前準備

使用服務帳戶模擬功能前,請先啟用必要 API,並確認您具備所需角色。

啟用 API

如要模擬服務帳戶,您必須在專案中啟用 Service Account Credentials API。

Enable the API

必要的角色

如要取得模擬服務帳戶所需的權限,請要求管理員授予您服務帳戶的「服務帳戶權杖建立者」 (roles/iam.serviceAccountTokenCreator) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色包含 iam.serviceAccounts.getAccessToken權限,這是模擬服務帳戶時的必要權限。

您或許還可透過自訂角色或其他預先定義的角色取得這項權限。

即使您是在自己建立的專案中工作,也必須將這些角色授予帳戶。

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

您可以使用下列方法模擬服務帳戶:

使用 gcloud CLI

gcloud CLI 提供簡單明瞭的方式來模擬服務帳戶。如果您需要使用服務帳戶,透過 gcloud CLI 存取資源或服務,這個方法就非常適合。 Google Cloud

您可以模擬特定 gcloud CLI 指令的服務帳戶,也可以設定 gcloud CLI,讓系統自動為每個指令模擬服務帳戶。

為特定 gcloud CLI 指令啟用模擬功能

如要對特定 gcloud CLI 指令使用模擬功能,請使用 --impersonate-service-account 標記。舉例來說,下列指令會使用指定服務帳戶提供的身分和存取權,列出儲存空間值區:

gcloud storage buckets list --impersonate-service-account=SERVICE_ACCT_EMAIL

使用這個標記時,gcloud CLI 會為指定的服務帳戶要求短期憑證,並使用這些憑證向 API 進行驗證及授權存取。登入 gcloud CLI 的主體 (通常是您的使用者帳戶) 必須具備服務帳戶的必要權限。

預設使用 gcloud CLI 模擬身分

如要設定 gcloud CLI,使其預設使用服務帳戶提供的身分和存取權,請使用 gcloud CLI config 指令

gcloud config set auth/impersonate_service_account SERVICE_ACCT_EMAIL

設定這個屬性後,gcloud CLI 會為指定的服務帳戶要求短期憑證,並使用這些憑證向 API 進行驗證,以及授權存取每個指令的資源。登入 gcloud CLI 的主體必須具備服務帳戶的必要權限。

設定應用程式預設憑證,以便使用用戶端程式庫

您可以使用服務帳戶模擬功能,設定本機應用程式預設憑證 (ADC) 檔案。支援模擬的用戶端程式庫可以自動使用這些憑證。使用模擬功能建立的本機 ADC 檔案支援下列語言:

  • C#
  • Go
  • Java
  • Node.js
  • Python

使用服務帳戶模擬功能建立本機 ADC 檔案:

gcloud auth application-default login --impersonate-service-account SERVICE_ACCT_EMAIL

您現在可以使用支援的語言,以與設定本機 ADC 檔案和使用者憑證後相同的方式,使用用戶端程式庫。驗證程式庫會自動尋找憑證。詳情請參閱「驗證以使用用戶端程式庫」。

並非所有驗證程式庫都支援使用服務帳戶模擬功能產生的本機 ADC 檔案憑證。詳情請參閱「 服務帳戶模擬作業傳回本機憑證的錯誤」。

產生及管理短期憑證

如果上述兩種方法都無法滿足您的用途,您需要產生及管理短期權杖。舉例來說,如果您需要其他類型的短期憑證 (存取權杖以外的憑證),或需要在實際工作環境中使用模擬功能,請使用這個方法。

如要瞭解如何產生短期權杖,請參閱「為服務帳戶建立短期憑證」。

後續步驟