使用服務帳戶模擬功能時,您會先從經過驗證的主體 (您的使用者帳戶或服務帳戶) 開始,然後為具有授權的服務帳戶要求短期憑證,以滿足您的用途需求。經過驗證的主體必須具備必要權限,才能模擬服務帳戶。
服務帳戶模擬功能比使用服務帳戶金鑰更安全,因為服務帳戶模擬功能需要事先經過驗證的身分,而且使用模擬功能建立的憑證不會保留。相較之下,使用服務帳戶金鑰驗證不需要事先驗證,而且如果公開,永久金鑰就是高風險的憑證。
如要進一步瞭解服務帳戶模擬功能,請參閱「服務帳戶模擬功能」。
事前準備
使用服務帳戶模擬功能前,請先啟用必要 API,並確認您具備所需角色。
啟用 API
如要模擬服務帳戶,您必須在專案中啟用 Service Account Credentials API。
啟用 API 時所需的角色
如要啟用 API,您需要服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色。
必要的角色
如要取得模擬服務帳戶所需的權限,請要求管理員在服務帳戶中授予您「服務帳戶權杖建立者」 (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 檔案憑證。詳情請參閱這篇文章。
產生及管理短期憑證
如果上述兩種方法都無法滿足您的用途,您需要產生及管理短期權杖。舉例來說,如果您需要其他類型的短期憑證 (存取權杖以外的憑證),或需要在實際工作環境中使用模擬功能,請使用這個方法。
如要瞭解如何產生短期權杖,請參閱「為服務帳戶建立短期憑證」。
後續步驟
- 進一步瞭解 ADC 如何尋找憑證。
- 瞭解驗證方式。