本頁說明如何為服務帳戶建立短期憑證,以便模擬服務帳戶。視您建立的權杖類型而定,短期權杖會提供與服務帳戶相關聯的身分 (適用於 ID 權杖) 或權限 (適用於存取權杖)。
如果系統架構需要您使用一系列權杖產生呼叫,可以使用由多個服務帳戶組成的委派鏈。在大多數情況下,直接方法 (如本頁所述) 就已足夠。
事前準備
-
如果尚未啟用 IAM 和服務帳戶憑證 API,請啟用:
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。gcloud services enable iam.googleapis.com
iamcredentials.googleapis.com 設定驗證方法。
選取這個頁面上您打算如何使用範例的分頁:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,無須設定驗證。
gcloud
在 Google Cloud 控制台中啟用 Cloud Shell。
控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。
Go
如要在本機開發環境中使用本頁的 Go 範例,請安裝並初始化 gcloud CLI,然後使用您的使用者憑證設定應用程式預設憑證。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
如果您使用 Cloud Shell,則不需要執行這項操作。
如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。
Java
如要在本機開發環境中使用本頁面的 Java 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
如果您使用 Cloud Shell,則不需要執行這項操作。
如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。
Node.js
如要在本機開發環境中使用本頁的 Node.js 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
如果您使用 Cloud Shell,則不需要執行這項操作。
如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。
Python
如要在本機開發環境中使用本頁的 Python 範例,請安裝並初始化 gcloud CLI,然後使用您的使用者憑證設定應用程式預設憑證。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
如果您使用 Cloud Shell,則不需要執行這項操作。
如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
-
瞭解 IAM 服務帳戶。
瞭解服務帳戶模擬。
瞭解您需要的權杖類型,並按照下方各節提供的適當步驟操作:
建立短期存取權杖
大多數 Google API 都接受存取權杖進行驗證。使用服務帳戶模擬產生存取權杖時,存取權杖不會附帶更新權杖,因此權杖過期時,您必須重複模擬程序來產生新權杖。
詳情請參閱「存取權杖」。
如要建立短期存取權杖,請完成下列工作:
提供必要權限
直接請求涉及兩個身分:要求憑證的呼叫者,以及要建立憑證的服務帳戶。權限設定方式取決於呼叫端是以服務帳戶還是使用者帳戶進行驗證。
如要在本頁的本機開發環境中執行 REST 或 gcloud CLI 指令,呼叫端可以由使用者憑證代表。如果是自動化工作負載 (例如在 Compute Engine 上執行的應用程式),呼叫者必須由服務帳戶代表。
服務帳戶
當呼叫應用程式使用服務帳戶做為身分時,會涉及下列主體:
呼叫端服務帳戶 (
CALLER_SA)這個服務帳戶代表呼叫應用程式,該應用程式會發出短期憑證要求。
-
具備權限的服務帳戶 (
PRIV_SA)這個服務帳戶會取得短期權杖所需的 IAM 角色。這是要建立短期權杖的服務帳戶。
如要授予 CALLER_SA 權限,為 PRIV_SA 建立短期憑證,請在 PRIV_SA 上授予 CALLER_SA 服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator)。
在 PRIV_SA 上授予必要角色:
控制台
-
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。
- 選取專案。
-
按一下具有權限的服務帳戶電子郵件地址,
PRIV_SA。 - 按一下「Permissions」(權限) 分頁標籤。
- 在「具備存取權的主體」下方,按一下「授予存取權」。
-
輸入呼叫端服務帳戶的電子郵件地址,
CALLER_SA。例如
demo@my-project.iam.gserviceaccount.com。 -
選取「服務帳戶權杖建立者」角色 (
roles/iam.serviceAccountTokenCreator)。 - 按一下「儲存」,將角色授予服務帳戶。
gcloud
這項
gcloud iam service-accounts add-iam-policy-binding
指令會將角色授予服務帳戶。
使用下方的任何指令資料之前,請先替換以下項目:
-
PRIV_SA:產生權杖的服務帳戶電子郵件地址。 -
CALLER_SA:代表要求短期權杖的應用程式的服務帳戶電子郵件地址。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
Windows (PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
Windows (cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
您應該會收到類似以下的回應:
Updated IAM policy for serviceAccount [PRIV_SA].
{
"bindings": [
{
"members": [
"serviceAccount:CALLER_SA"
],
"role": "roles/iam.serviceAccountTokenCreator"
}
],
"etag": "BwXhCB4eyjY=",
"version": 1
}
REST
-
請參閱
PRIV_SA的允許政策:serviceAccounts.getIamPolicy方法會取得服務帳戶的允許政策。使用任何要求資料之前,請先修改下列項目的值:
PROJECT_ID:您的 Google Cloud 專案 ID。專案 ID 是英數字元字串,例如my-project。-
PRIV_SA:具備權限的服務帳戶電子郵件地址,系統會為該帳戶建立短期權杖。 POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,也就是政策版本 3。詳情請參閱「在取得政策時指定政策版本」。
HTTP 方法和網址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
JSON 要求主體:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] } ] }如果尚未授予服務帳戶任何角色,回應只會包含
etag值。在下一個步驟中加入該etag值。 -
修改允許政策,將服務帳戶權杖建立者角色 (
roles/iam.serviceAccountTokenCreator) 授予CALLER_SA。舉例來說,如要修改上一個步驟中的範例回應,請新增下列內容:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
撰寫更新後的允許政策:
serviceAccounts.setIamPolicy方法會為服務帳戶設定更新後的允許政策。使用任何要求資料之前,請先修改下列項目的值:
PROJECT_ID:您的 Google Cloud 專案 ID。專案 ID 是英數字元字串,例如my-project。-
PRIV_SA:具有權限的服務帳戶電子郵件地址,系統會為該帳戶建立短期權杖。 POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,也就是政策版本 3。詳情請參閱「在取得政策時指定政策版本」。-
POLICY:您要設定的政策的 JSON 表示法。如要進一步瞭解政策格式,請參閱「政策參考資料」。舉例來說,如要設定上一步驟中顯示的允許政策,請將
POLICY替換為下列內容,其中CALLER_SA是建立短期權杖的服務帳戶:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
HTTP 方法和網址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:setIamPolicy
JSON 要求主體:
{ "policy": POLICY }請展開以下其中一個選項,以傳送要求:
回應包含更新後的允許政策。
使用者憑證
如要使用 Google Cloud CLI 產生短期權杖,或從本機開發環境產生短期權杖,可以使用使用者帳戶產生權杖。通常可以使用自己的使用者帳戶。
使用使用者帳戶產生短期權杖時,會涉及下列身分:
來電者帳戶 (
CALLER_ACCOUNT)這個使用者帳戶可用來為具有權限的服務帳戶產生短期憑證。
具備權限的服務帳戶 (
PRIV_SA)這個服務帳戶會取得短期權杖所需的 IAM 角色。這是要建立短期權杖的服務帳戶。
如要讓 CALLER_ACCOUNT 為 PRIV_SA 建立短期憑證,請在 PRIV_SA 上授予 CALLER_ACCOUNT 服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator)。
在 PRIV_SA 上授予必要角色:
控制台
-
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面。
- 選取專案。
-
按一下具有權限的服務帳戶電子郵件地址,
PRIV_SA。 - 按一下「Permissions」(權限) 分頁標籤。
- 在「具備存取權的主體」下方,按一下「授予存取權」。
-
輸入呼叫端帳戶的主體 ID。
CALLER_ACCOUNT。例如
my-user@example.com。 -
選取「服務帳戶權杖建立者」角色 (
roles/iam.serviceAccountTokenCreator)。 - 按一下「儲存」,將角色授予使用者帳戶。
gcloud
gcloud iam service-accounts add-iam-policy-binding
指令會將角色授予服務帳戶。
使用下方的任何指令資料之前,請先替換以下項目:
-
PRIV_SA:產生權杖的服務帳戶電子郵件地址。 -
CALLER_ACCOUNT:用於要求短期權杖的使用者帳戶電子郵件地址。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
Windows (PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
Windows (cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
您應該會收到類似以下的回應:
Updated IAM policy for serviceAccount [PRIV_SA].
{
"bindings": [
{
"members": [
"user:my-user@example.com"
],
"role": "roles/iam.serviceAccountTokenCreator"
}
],
"etag": "BwX1ZbefjXU=",
"version": 1
}
REST
-
請參閱
PRIV_SA的允許政策:serviceAccounts.getIamPolicy方法會取得服務帳戶的允許政策。使用任何要求資料之前,請先修改下列項目的值:
PROJECT_ID:您的 Google Cloud 專案 ID。專案 ID 是英數字元字串,例如my-project。-
PRIV_SA:具備權限的服務帳戶電子郵件地址,系統會為該帳戶建立短期權杖。 POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,也就是政策版本 3。詳情請參閱「在取得政策時指定政策版本」。
HTTP 方法和網址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
JSON 要求主體:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }請展開以下其中一個選項,以傳送要求:
您應該會收到如下的 JSON 回覆:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] } ] }如果尚未授予服務帳戶任何角色,回應只會包含
etag值。在下一個步驟中加入該etag值。 -
修改允許政策,將服務帳戶權杖建立者角色 (
roles/iam.serviceAccountTokenCreator) 授予CALLER_ACCOUNT。舉例來說,如要修改上一個步驟中的範例回應,請新增下列內容:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:my-user@example.com" ] } ] }
-
撰寫更新後的允許政策:
serviceAccounts.setIamPolicy方法會為服務帳戶設定更新後的允許政策。使用任何要求資料之前,請先修改下列項目的值:
PROJECT_ID:您的 Google Cloud 專案 ID。專案 ID 是英數字元字串,例如my-project。-
PRIV_SA:具有權限的服務帳戶電子郵件地址,系統會為該帳戶建立短期權杖。 POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,也就是政策版本 3。詳情請參閱「在取得政策時指定政策版本」。-
POLICY:您要設定的政策的 JSON 表示法。如要進一步瞭解政策格式,請參閱「政策參考資料」。舉例來說,如要設定上一步驟中顯示的允許政策,請將
POLICY替換為下列內容,其中CALLER_ACCOUNT是建立短期權杖的使用者帳戶:{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "CALLER_ACCOUNT" ] } ] }
HTTP 方法和網址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:setIamPolicy
JSON 要求主體:
{ "policy": POLICY }請展開以下其中一個選項,以傳送要求:
回應包含更新後的允許政策。
產生存取權杖
您可以使用 gcloud CLI、REST API,或 Cloud 用戶端程式庫和 Google API 用戶端程式庫,產生 OAuth 2.0 存取權杖。
如果您使用 REST API,且系統已設定為允許延長權杖生命週期,您可以建立生命週期長於預設值的權杖。Google Cloud CLI 不支援設定權杖的生命週期。如要進一步瞭解權杖生命週期,請參閱「存取權杖」。
下列範例適用於本機開發環境,呼叫端必須以使用者帳戶表示,而非服務帳戶。
為服務帳戶產生 OAuth 2.0 存取權杖:
gcloud
確認您已登入 gcloud CLI,並使用呼叫端使用者帳戶。
使用
gcloud auth print-access-token指令為服務帳戶產生權杖。使用下方的任何指令資料之前,請先替換以下項目:
-
PRIV_SA:具備權限的服務帳戶電子郵件地址,系統會為該帳戶建立短期權杖。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud auth print-access-token --impersonate-service-account=PRIV_SA
Windows (PowerShell)
gcloud auth print-access-token --impersonate-service-account=PRIV_SA
Windows (cmd.exe)
gcloud auth print-access-token --impersonate-service-account=PRIV_SA
您應該會收到類似以下的回應:
WARNING: This command is using service account impersonation. All API calls will be executed as [my-sa@my-project.iam.gserviceaccount.com]. ya29.c.b0AXv0zTPnzTnDV8F8Aj5Fgy46Yf2v_v8eZIoKq7xGpfbpXuy23aQ1693m3gAuE8AZga7w6kdagN7a9bfdDYbdeoGY0CMHOClsCwIdutL7k_RFC672lOCbUgF5hS8Iu2nCA8hle-11LJXBLmaxFmH08ZTBJLuDrWSNd8cYqGYFunSC1K1qLIPBF18tsa0hxVgKPucI8b1A9L8_MK1JGLGcr0n7-zY77_lmbcdODG3NmIbLOGWOutjJgqSO_YoeCKK2QTUZIp5PG7RkKlXWnmYJA9pEahzNoQrs5sWZctc2bia9af_ITzqqlXC9h1Kj5-me6e8rd734MJvpagqYazRk0gGWpMb03XmMGpgPc_FBp4pnX9rGOzW83SNpcDz8zeFO1Q0Bo3N7CuZougjRce0y8I2_4rtw5ME_nV3wrCWa..................................................................................................................................................................................................................................................................................................
-
REST
Service Account Credentials API 的 serviceAccounts.generateAccessToken 方法會為服務帳戶產生 OAuth 2.0 存取權杖。
使用任何要求資料之前,請先修改下列項目的值:
-
PRIV_SA:具備權限的服務帳戶電子郵件地址,系統會為該帳戶建立短期權杖。 -
LIFETIME:存取權杖到期前的時間長度,以秒為單位。例如:300s。根據預設,權杖生命週期長度上限為 1 小時 (3,600 秒)。如要將這些權杖的最長生命週期延長至 12 小時 (43,200 秒), 請將服務帳戶新增至包含
constraints/iam.allowServiceAccountCredentialLifetimeExtension清單限制的機構政策。
HTTP 方法和網址: