為服務帳戶建立短期憑證

本頁面說明如何為服務帳戶建立短期憑證,以便模擬服務帳戶。視您建立的權杖類型而定,短期權杖會提供與服務帳戶相關聯的身分 (適用於 ID 權杖) 或權限 (適用於存取權杖)。

如果系統架構需要您使用一系列權杖產生呼叫,可以使用由多個服務帳戶組成的委派鏈。在大多數情況下,直接方法 (如本頁所述) 就已足夠。

事前準備

  • Enable the IAM and Service Account Credentials APIs:

    gcloud services enable iam.googleapis.com iamcredentials.googleapis.com
  • 設定驗證方法。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

      Go

      如要在本機開發環境中使用本頁的 Go 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

      詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

      Java

      如要在本機開發環境中使用本頁的 Java 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

      詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

      Node.js

      如要在本機開發環境中使用本頁的 Node.js 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

      詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

      Python

      如要在本機開發環境中使用本頁的 Python 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

      詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

      REST

      如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

    1. 瞭解 IAM 服務帳戶

    2. 瞭解服務帳戶模擬

    3. 瞭解您需要的權杖類型,然後按照下方各節提供的適當步驟操作:

建立短期存取權杖

大多數 Google API 都接受存取權杖進行驗證。使用服務帳戶模擬產生存取權杖時,該權杖不會附帶更新權杖,因此權杖過期時,您必須重複模擬程序來產生新權杖。

詳情請參閱「存取權杖」。

如要建立短期存取權杖,請完成下列工作:

提供必要權限

直接要求涉及兩個身分:要求憑證的呼叫者,以及要建立憑證的服務帳戶。權限設定方式取決於呼叫端是以服務帳戶還是使用者帳戶進行驗證。

如要在本頁面中,於本機開發環境執行 REST 或 gcloud CLI 指令,呼叫端可由使用者憑證代表。如果是自動化工作負載 (例如在 Compute Engine 上執行的應用程式),呼叫端必須由服務帳戶代表。

服務帳戶

如果呼叫應用程式使用服務帳戶做為身分,則會涉及下列主體:

  • 呼叫端服務帳戶 (CALLER_SA)

    這個服務帳戶代表呼叫應用程式,會發出短期憑證要求。

  • 具備權限的服務帳戶 (PRIV_SA)

    這個服務帳戶會取得短期權杖所需的 IAM 角色。這是要建立短期權杖的服務帳戶。

如要授予 CALLER_SA 權限,為 PRIV_SA 建立短期憑證,請將 PRIV_SA 的服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator) 授予 CALLER_SA

PRIV_SA 上授予必要角色:

控制台

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。
  3. 按一下具有權限的服務帳戶電子郵件地址:PRIV_SA
  4. 按一下「Permissions」(權限) 分頁標籤。
  5. 在「具有這個服務帳戶存取權的主體」下方,按一下 「授予存取權」
  6. 輸入呼叫端服務帳戶的電子郵件地址, CALLER_SA

    例如 demo@my-project.iam.gserviceaccount.com

  7. 選取「服務帳戶憑證建立者」角色 (roles/iam.serviceAccountTokenCreator)。
  8. 按一下「儲存」,將角色授予服務帳戶。

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

  1. 請參閱 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 值。

  2. 修改允許政策,將服務帳戶憑證建立者角色 (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"
            ]
          }
        ]
      }
  3. 編寫更新後的允許政策:

    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_ACCOUNTPRIV_SA 建立短期憑證,請在 PRIV_SA 上授予 CALLER_ACCOUNT 服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator)。

PRIV_SA 上授予必要角色:

控制台

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。
  3. 按一下具有權限的服務帳戶電子郵件地址:PRIV_SA
  4. 按一下「Permissions」(權限) 分頁標籤。
  5. 在「具有這個服務帳戶存取權的主體」下方,按一下 「授予存取權」
  6. 輸入來電者帳戶的主體 ID。 CALLER_ACCOUNT

    例如 my-user@example.com

  7. 選取「服務帳戶憑證建立者」角色 (roles/iam.serviceAccountTokenCreator)。
  8. 按一下「儲存」,將角色授予使用者帳戶。

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

  1. 請參閱 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 值。

  2. 修改允許政策,授予CALLER_ACCOUNT服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator)。

    舉例來說,如要修改上一個步驟中的範例回應,請新增下列內容:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
  3. 編寫更新後的允許政策:

    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

  1. 確認您已使用呼叫端使用者帳戶登入 gcloud CLI

  2. 使用 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 方法和網址:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateAccessToken

JSON 要求主體:

{
  "scope": [
    "https://www.googleapis.com/auth/cloud-platform"
  ],
  "lifetime": "LIFETIME"
}

如要傳送要求,請展開以下其中一個選項:

如果 generateAccessToken 要求作業成功,回應主體會包含 OAuth 2.0 存取權杖和到期時間。隨後可用於驗證代表服務帳戶的要求,直到到達 expireTimeaccessToken

{
  "accessToken": "eyJ0eXAi...NiJ9",
  "expireTime": "2020-04-07T15:01:23.045123456Z"
}

Go

import (
	"context"
	"fmt"
	"io"
	"time"

	"golang.org/x/oauth2/google"
	"google.golang.org/api/impersonate"
	"google.golang.org/api/option"
)

// getAccessTokenFromImpersonatedCredentials uses a service account (SA1) to impersonate
// another service account (SA2) and obtain OAuth2 token for the impersonated account.
// To obtain a token for SA2, SA1 should have the "roles/iam.serviceAccountTokenCreator" permission on SA2.
func getAccessTokenFromImpersonatedCredentials(w io.Writer, impersonatedServiceAccount, scope string) error {
	// impersonatedServiceAccount := "name@project.service.gserviceaccount.com"
	// scope := "https://www.googleapis.com/auth/cloud-platform"

	ctx := context.Background()

	// Construct the GoogleCredentials object which obtains the default configuration from your
	// working environment.
	credentials, err := google.FindDefaultCredentials(ctx, scope)
	if err != nil {
		fmt.Fprintf(w, "failed to generate default credentials: %v", err)
		return fmt.Errorf("failed to generate default credentials: %w", err)
	}

	ts, err := impersonate.CredentialsTokenSource(ctx, impersonate.CredentialsConfig{
		TargetPrincipal: impersonatedServiceAccount,
		Scopes:          []string{scope},
		Lifetime:        300 * time.Second,
		// delegates: The chained list of delegates required to grant the final accessToken.
		// For more information, see:
		// https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
		// Delegates is NOT USED here.
		Delegates: []string{},
	}, option.WithCredentials(credentials))
	if err != nil {
		fmt.Fprintf(w, "CredentialsTokenSource error: %v", err)
		return fmt.Errorf("CredentialsTokenSource error: %w", err)
	}

	// Get the OAuth2 token.
	// Once you've obtained the OAuth2 token, you can use it to make an authenticated call.
	t, err := ts.Token()
	if err != nil {
		fmt.Fprintf(w, "failed to receive token: %v", err)
		return fmt.Errorf("failed to receive token: %w", err)
	}
	fmt.Fprintf(w, "Generated OAuth2 token with length %d.\n", len(t.AccessToken))

	return nil
}

Java


package com.google.cloud.auth.samples;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.ImpersonatedCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class AccessTokenFromImpersonatedCredentials {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Replace the below variables before running the code.

    // Provide the scopes that you might need to request access to Google APIs,
    // depending on the level of access you need.
    // This example uses the cloud-wide scope and uses IAM to narrow the permissions.
    // https://cloud.google.com/docs/authentication/external/authorization-gcp
    // For more information, see: https://developers.google.com/identity/protocols/oauth2/scopes
    String scope = "https://www.googleapis.com/auth/cloud-platform";

    // The name of the privilege-bearing service account for whom the credential is created.
    String impersonatedServiceAccount = "name@project.service.gserviceaccount.com";

    getAccessToken(impersonatedServiceAccount, scope);
  }

  // Use a service account (SA1) to impersonate another service account (SA2) and obtain an ID token
  // for the impersonated account.
  // To obtain a token for SA2, SA1 should have the "roles/iam.serviceAccountTokenCreator"
  // permission on SA2.
  public static void getAccessToken(
      String impersonatedServiceAccount, String scope) throws IOException {

    // Construct the GoogleCredentials object which obtains the default configuration from your
    // working environment.
    GoogleCredentials googleCredentials = GoogleCredentials.getApplicationDefault();

    // delegates: The chained list of delegates required to grant the final accessToken.
    // For more information, see:
    // https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
    // Delegate is NOT USED here.
    List<String> delegates = null;

    // Create the impersonated credential.
    ImpersonatedCredentials impersonatedCredentials =
        ImpersonatedCredentials.newBuilder()
            .setSourceCredentials(googleCredentials)
            .setTargetPrincipal(impersonatedServiceAccount)
            .setScopes(Arrays.asList(scope))
            .setLifetime(300)
            .setDelegates(delegates)
            .build();

    // Get the OAuth2 token.
    // Once you've obtained the OAuth2 token, you can use it to make an authenticated call.
    impersonatedCredentials.refresh();
    String accessToken = impersonatedCredentials.getAccessToken().getTokenValue();
    System.out.println("Generated access token.");
  }
}

Node.js

/**
 * TODO(developer):
 *  Uncomment and replace these variables before running the sample.
 */
// const impersonatedServiceAccount = 'name@project.service.gserviceaccount.com';
// const scope = 'https://www.googleapis.com/auth/cloud-platform';

const {GoogleAuth, Impersonated} = require('google-auth-library');

async function getAccessTokenFromImpersonatedCredentials() {
  const googleAuth = new GoogleAuth({
    scopes: scope,
  });
  // Construct the GoogleCredentials object which obtains the default configuration from your
  // working environment.
  const {credential} = await googleAuth.getApplicationDefault();

  // delegates: The chained list of delegates required to grant the final accessToken.
  // For more information, see:
  // https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
  // Delegate is NOT USED here.
  const delegates = [];

  // Create the impersonated credential.
  const impersonatedCredentials = new Impersonated({
    sourceClient: credential,
    delegates,
    targetPrincipal: impersonatedServiceAccount,
    targetScopes: [scope],
    lifetime: 300,
  });

  // Get the OAuth2 token.
  // Once you've obtained the OAuth2 token, you can use it to make an authenticated call
  // to the target audience.
  const resp = await impersonatedCredentials.getAccessToken();
  // Token is in resp.token.
  console.log('Generated OAuth2 token with length %s', resp.token.length);
}

getAccessTokenFromImpersonatedCredentials();

Python

def accesstoken_from_impersonated_credentials(
    impersonated_service_account: str, scope: str
):
    from google.auth import impersonated_credentials
    import google.auth.transport.requests

    """
      Use a service account (SA1) to impersonate another service account (SA2)
      and obtain an ID token for the impersonated account.
      To obtain a token for SA2, SA1 should have the
      "roles/iam.serviceAccountTokenCreator" permission on SA2.

    Args:
        impersonated_service_account: The name of the privilege-bearing service account for whom the credential is created.
            Examples: name@project.service.gserviceaccount.com

        scope: Provide the scopes that you might need to request to access Google APIs,
            depending on the level of access you need.
            For this example, we use the cloud-wide scope and use IAM to narrow the permissions.
            https://cloud.google.com/docs/authentication#authorization_for_services
            For more information, see: https://developers.google.com/identity/protocols/oauth2/scopes
    """

    # Construct the GoogleCredentials object which obtains the default configuration from your
    # working environment.
    credentials, project_id = google.auth.default()

    # Create the impersonated credential.
    target_credentials = impersonated_credentials.Credentials(
        source_credentials=credentials,
        target_principal=impersonated_service_account,
        # delegates: The chained list of delegates required to grant the final accessToken.
        # For more information, see:
        # https://cloud.google.com/iam/docs/create-short-lived-credentials-direct#sa-credentials-permissions
        # Delegate is NOT USED here.
        delegates=[],
        target_scopes=[scope],
        lifetime=300,
    )

    # Get the OAuth2 token.
    # Once you've obtained the OAuth2 token, use it to make an authenticated call
    # to the target audience.
    request = google.auth.transport.requests.Request()
    target_credentials.refresh(request)
    # The token field is target_credentials.token.
    print("Generated OAuth2 token.")

建立 OpenID Connect (OIDC) ID 權杖

ID 權杖遵循 OpenID Connect (OIDC) 規格。只有少數服務和應用程式會接受 ID 權杖。

詳情請參閱「ID 權杖」和「在 Cloud Run 或 Cloud Run 函式上代管的應用程式驗證」。

如要建立 ID 權杖,請完成下列工作:

  • 為呼叫者提供必要權限

    使用「服務帳戶 OpenID Connect 身分識別權杖建立者」角色 (roles/iam.serviceAccountOpenIdTokenCreator) 建立 ID 權杖。這個角色與您用於其他權杖類型的角色不同。

  • 產生 ID 權杖

提供必要權限

直接要求涉及兩個身分:要求憑證的呼叫者,以及要建立憑證的服務帳戶。權限設定方式取決於呼叫端是以服務帳戶還是使用者帳戶進行驗證。

如要在本頁面中,於本機開發環境執行 REST 或 gcloud CLI 指令,呼叫端可由使用者憑證代表。如果是自動化工作負載 (例如在 Compute Engine 上執行的應用程式),呼叫端必須由服務帳戶代表。

服務帳戶

如果呼叫應用程式使用服務帳戶做為身分,則會涉及下列主體:

  • 呼叫端服務帳戶 (CALLER_SA)

    這個服務帳戶代表呼叫應用程式,會發出短期憑證要求。

  • 具備權限的服務帳戶 (PRIV_SA)

    這個服務帳戶會取得短期權杖所需的 IAM 角色。這是要建立短期權杖的服務帳戶。

如要授予 CALLER_SA 權限,為 PRIV_SA 建立短期憑證,請將服務帳戶 OpenID Connect 身分識別權杖建立者角色 (roles/iam.serviceAccountOpenIdTokenCreator) 授予 CALLER_SAPRIV_SA

PRIV_SA 上授予必要角色:

控制台

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。
  3. 按一下具有權限的服務帳戶電子郵件地址:PRIV_SA
  4. 按一下「Permissions」(權限) 分頁標籤。
  5. 在「具有這個服務帳戶存取權的主體」下方,按一下 「授予存取權」
  6. 輸入呼叫端服務帳戶的電子郵件地址, CALLER_SA

    例如 demo@my-project.iam.gserviceaccount.com

  7. 選取「服務帳戶 OpenID Connect 身分識別權杖建立者」角色 (roles/iam.serviceAccountOpenIdTokenCreator)。
  8. 按一下「儲存」,將角色授予服務帳戶。

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.serviceAccountOpenIdTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

您應該會收到類似以下的回應:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. 請參閱 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 值。

  2. 修改允許政策,將服務帳戶 OpenID Connect 身分識別權杖建立者角色 (roles/iam.serviceAccountOpenIdTokenCreator) 授予 CALLER_SA

    舉例來說,如要修改上一個步驟中的範例回應,請新增下列內容:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:my-user@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. 編寫更新後的允許政策:

    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.serviceAccountOpenIdTokenCreator",
            "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_ACCOUNTPRIV_SA 建立短期憑證,請向 CALLER_ACCOUNT 授予 PRIV_SA 的服務帳戶 OpenID Connect 身分識別權杖建立者角色 (roles/iam.serviceAccountOpenIdTokenCreator)。

PRIV_SA 上授予必要角色:

控制台

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。
  3. 按一下具有權限的服務帳戶電子郵件地址:PRIV_SA
  4. 按一下「Permissions」(權限) 分頁標籤。
  5. 在「具有這個服務帳戶存取權的主體」下方,按一下 「授予存取權」
  6. 輸入來電者帳戶的主體 ID。 CALLER_ACCOUNT

    例如 my-user@example.com

  7. 選取「服務帳戶 OpenID Connect 身分識別權杖建立者」角色 (roles/iam.serviceAccountOpenIdTokenCreator)。
  8. 按一下「儲存」,將角色授予使用者帳戶。

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.serviceAccountOpenIdTokenCreator --format=json

Windows (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

您應該會收到類似以下的回應:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. 請參閱 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 值。

  2. 修改允許政策,授予CALLER_ACCOUNT服務帳戶 OpenID Connect 身分識別權杖建立者角色 (roles/iam.serviceAccountOpenIdTokenCreator)。

    舉例來說,如要修改上一個步驟中的範例回應,請新增下列內容:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountOpenIdTokenCreator",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
  3. 編寫更新後的允許政策:

    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.serviceAccountOpenIdTokenCreator",
            "members": [
              "CALLER_ACCOUNT"
            ]
          }
        ]
      }

    HTTP 方法和網址:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:setIamPolicy

    JSON 要求主體:

    {
      "policy": POLICY
    }
    

    如要傳送要求,請展開以下其中一個選項:

    回應會包含更新後的允許政策。

產生 ID 權杖

您可以使用 gcloud CLI、REST API、Cloud 用戶端程式庫和 Google API 用戶端程式庫,產生 OpenID Connect (OIDC) ID 權杖。

以下範例適用於本機開發環境;呼叫端必須由使用者帳戶代表,而非服務帳戶。

OIDC ID 權杖的有效期間為 1 小時 (3,600 秒)。

為服務帳戶產生 Google 簽署的 OIDC ID 憑證:

gcloud

  1. 確認您已使用呼叫端使用者帳戶登入 gcloud CLI

  2. 使用 gcloud auth print-identity-token 指令為服務帳戶產生權杖。

    使用下方的任何指令資料之前,請先替換以下項目:

    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • AUDIENCE_NAME:權杖的對象,通常是權杖將用於存取的應用程式或服務網址。
      • 執行下列指令:

        Linux、macOS 或 Cloud Shell

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        Windows (PowerShell)

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        Windows (cmd.exe)

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"

        您應該會收到類似以下的回應:

        WARNING: This command is using service account impersonation. All API calls will be executed as
        [my-sa@my-project.iam.gserviceaccount.com].
        eyJhbGciOiJSUzI1NiIsImtpZDNhMDg4ZDRmZmMjJkYTVmZTM5MDZjY2MiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJ3d3cuZXhhbXBsJhenAiOiIxMTYzwNDYyMDk0ODIiLCJleHAiOjE2NTQ4ODU0MzEsImlhdCI6MTY1NDg4MTgzMSwiaXN6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIMDQ2MjA5NDgyIn0.F7mu8IHj5VQdu7ItFrnYAKyGd7YqXuOP_rFLc98q8BaFBycAF1zAQnSnwqnSUXba0UK9PDT_-IOry68qLwBObz4XlX9lk0ehpN0O0W9FcFToKLB6wefXXPd4h7xtuPe5KzmpSOqj2Qqv34HriGw00Nqd-oGSgNY_lZ4wGEf4rT4oQa_kEcrY57Q2G6pwd769BhgeFwoLi5aK_Cv2kvf_zfMszC-xlkP9zwWQ8XinJBwe-qcQBa4NTgrbueNtXsEjccBS366zmw
        

REST

服務帳戶憑證 API 的 serviceAccounts.generateIdToken 方法會為服務帳戶產生 OIDC ID 憑證。

使用任何要求資料之前,請先替換以下項目:

  • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
  • AUDIENCE_NAME:權杖的對象,通常是權杖將用於存取的應用程式或服務網址。

HTTP 方法和網址:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateIdToken

JSON 要求主體:

{
  "audience": "AUDIENCE_NAME",
  "includeEmail": "true"
}

如要傳送要求,請展開以下其中一個選項:

如果 generateId 要求作業成功,回應主體會包含有效期間為 1 小時的 ID 權杖。隨後可用於驗證代表服務帳戶的要求:token

{
  "token": "eyJ0eXAi...NiJ9"
}

建立自行簽署的 JSON Web Token (JWT)

自行簽署的 JSON Web Token (JWT) 在各種情境中都很有用:

  • 在您自己的應用程式之間安全地通訊。在本情境中,應用程式可簽署憑證,以讓其他應用程式驗證憑證。
  • 請依據不使用 OAuth 進行服務帳戶授權說明,驗證對 Google API 的呼叫。
  • 通過 API Gateway 部署的 API 驗證。
  • 透過簽署包含有關使用者、帳戶或裝置之任意憑證附加資訊的 JWT,將服務帳戶視為識別資訊提供者。

如要建立 JWT,請完成下列工作:

提供必要權限

直接要求涉及兩個身分:要求憑證的呼叫者,以及要建立憑證的服務帳戶。權限設定方式取決於呼叫端是以服務帳戶還是使用者帳戶進行驗證。

如要在本頁面中,於本機開發環境執行 REST 或 gcloud CLI 指令,呼叫端可由使用者憑證代表。如果是自動化工作負載 (例如在 Compute Engine 上執行的應用程式),呼叫端必須由服務帳戶代表。

服務帳戶

如果呼叫應用程式使用服務帳戶做為身分,則會涉及下列主體:

  • 呼叫端服務帳戶 (CALLER_SA)

    這個服務帳戶代表呼叫應用程式,會發出短期憑證要求。

  • 具備權限的服務帳戶 (PRIV_SA)

    這個服務帳戶會取得短期權杖所需的 IAM 角色。這是要建立短期權杖的服務帳戶。

如要授予 CALLER_SA 權限,為 PRIV_SA 建立短期憑證,請將 PRIV_SA 的服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator) 授予 CALLER_SA

PRIV_SA 上授予必要角色:

控制台

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。
  3. 按一下具有權限的服務帳戶電子郵件地址:PRIV_SA
  4. 按一下「Permissions」(權限) 分頁標籤。
  5. 在「具有這個服務帳戶存取權的主體」下方,按一下 「授予存取權」
  6. 輸入呼叫端服務帳戶的電子郵件地址, CALLER_SA

    例如 demo@my-project.iam.gserviceaccount.com

  7. 選取「服務帳戶憑證建立者」角色 (roles/iam.serviceAccountTokenCreator)。
  8. 按一下「儲存」,將角色授予服務帳戶。

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

  1. 請參閱 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 值。

  2. 修改允許政策,將服務帳戶憑證建立者角色 (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"
            ]
          }
        ]
      }
  3. 編寫更新後的允許政策:

    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_ACCOUNTPRIV_SA 建立短期憑證,請在 PRIV_SA 上授予 CALLER_ACCOUNT 服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator)。

PRIV_SA 上授予必要角色:

控制台

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。
  3. 按一下具有權限的服務帳戶電子郵件地址:PRIV_SA
  4. 按一下「Permissions」(權限) 分頁標籤。
  5. 在「具有這個服務帳戶存取權的主體」下方,按一下 「授予存取權」
  6. 輸入來電者帳戶的主體 ID。 CALLER_ACCOUNT

    例如 my-user@example.com

  7. 選取「服務帳戶憑證建立者」角色 (roles/iam.serviceAccountTokenCreator)。
  8. 按一下「儲存」,將角色授予使用者帳戶。

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

  1. 請參閱 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 值。

  2. 修改允許政策,授予CALLER_ACCOUNT服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator)。

    舉例來說,如要修改上一個步驟中的範例回應,請新增下列內容:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
  3. 編寫更新後的允許政策:

    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
    }
    

    如要傳送要求,請展開以下其中一個選項:

    回應會包含更新後的允許政策。

產生 JWT

產生自行簽署的 JWT:

REST

Service Account Credentials API 的 serviceAccounts.signJwt 方法會使用服務帳戶的系統管理私密金鑰簽署 JWT。

使用任何要求資料之前,請先替換以下項目:

  • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
  • JWT_PAYLOAD:要簽署的 JWT 酬載;這是包含 JWT 憑證附加資訊組合的 JSON 物件,其中有您需要用途的必要憑證附加資訊,並符合您呼叫服務的驗證要求。如要呼叫 Google API,請參閱 Google 驗證指南,瞭解憑證附加資訊要求。

    exp (到期時間) 憑證附加資訊必須設定為不超過未來 12 小時。如要呼叫 Google API,exp 憑證附加資訊不得設為超過 1 小時。

    以下範例酬載包含呼叫 Google API 的憑證,其中 EXP 是代表到期時間的整數時間戳記:

    { \"iss\": \"PRIV_SA\", \"sub\": \"PRIV_SA\", \"aud\": \"https://firestore.googleapis.com/\", \"iat\": 1529350000, \"exp\": EXP }

HTTP 方法和網址:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signJwt

JSON 要求主體:

{
  "payload": "JWT_PAYLOAD"
}

如要傳送要求,請展開以下其中一個選項:

如果 signJwt 要求作業成功,回應主體會包含已簽署的 JWT 及用於簽署 JWT 的簽署金鑰 ID。您可以將 signedJwt 值做為不記名符記,直接代表服務帳戶驗證要求。在要求中指定的到期時間之前,憑證都會維持有效:

{
  "keyId": "42ba1e...fc0a",
  "signedJwt": "eyJ0eXAi...NiJ9"
}

建立自行簽署的二進位物件 (blob)

自行簽署的二進位物件 (或 blob) 用於傳輸二進位資料,且資料來源已知 (因為 blob 是自行簽署)。Blob 可用於建立簽章,這是各種驗證流程 (包括已簽署的網址) 所需的 Cloud Storage 物件。如要瞭解簽章,請參閱 Cloud Storage 說明文件

如要建立自行簽署的二進位物件,請完成下列工作:

提供必要權限

直接要求涉及兩個身分:要求憑證的呼叫者,以及要建立憑證的服務帳戶。權限設定方式取決於呼叫端是以服務帳戶還是使用者帳戶進行驗證。

如要在本頁面中,於本機開發環境執行 REST 或 gcloud CLI 指令,呼叫端可由使用者憑證代表。如果是自動化工作負載 (例如在 Compute Engine 上執行的應用程式),呼叫端必須由服務帳戶代表。

服務帳戶

如果呼叫應用程式使用服務帳戶做為身分,則會涉及下列主體:

  • 呼叫端服務帳戶 (CALLER_SA)

    這個服務帳戶代表呼叫應用程式,會發出短期憑證要求。

  • 具備權限的服務帳戶 (PRIV_SA)

    這個服務帳戶會取得短期權杖所需的 IAM 角色。這是要建立短期權杖的服務帳戶。

如要授予 CALLER_SA 權限,為 PRIV_SA 建立短期憑證,請將 PRIV_SA 的服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator) 授予 CALLER_SA

PRIV_SA 上授予必要角色:

控制台

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。
  3. 按一下具有權限的服務帳戶電子郵件地址:PRIV_SA
  4. 按一下「Permissions」(權限) 分頁標籤。
  5. 在「具有這個服務帳戶存取權的主體」下方,按一下 「授予存取權」
  6. 輸入呼叫端服務帳戶的電子郵件地址, CALLER_SA

    例如 demo@my-project.iam.gserviceaccount.com

  7. 選取「服務帳戶憑證建立者」角色 (roles/iam.serviceAccountTokenCreator)。
  8. 按一下「儲存」,將角色授予服務帳戶。

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

  1. 請參閱 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 值。

  2. 修改允許政策,將服務帳戶憑證建立者角色 (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"
            ]
          }
        ]
      }
  3. 編寫更新後的允許政策:

    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_ACCOUNTPRIV_SA 建立短期憑證,請在 PRIV_SA 上授予 CALLER_ACCOUNT 服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator)。

PRIV_SA 上授予必要角色:

控制台

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

    前往「Service Accounts」(服務帳戶)

  2. 選取專案。
  3. 按一下具有權限的服務帳戶電子郵件地址:PRIV_SA
  4. 按一下「Permissions」(權限) 分頁標籤。
  5. 在「具有這個服務帳戶存取權的主體」下方,按一下 「授予存取權」
  6. 輸入來電者帳戶的主體 ID。 CALLER_ACCOUNT

    例如 my-user@example.com

  7. 選取「服務帳戶憑證建立者」角色 (roles/iam.serviceAccountTokenCreator)。
  8. 按一下「儲存」,將角色授予使用者帳戶。

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

  1. 請參閱 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 值。

  2. 修改允許政策,授予CALLER_ACCOUNT服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator)。

    舉例來說,如要修改上一個步驟中的範例回應,請新增下列內容:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
  3. 編寫更新後的允許政策:

    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
    }
    

    如要傳送要求,請展開以下其中一個選項:

    回應會包含更新後的允許政策。

產生自行簽署的 blob

為服務帳戶產生自行簽署的 blob:

REST

Service Account Credentials API 的 serviceAccounts.signBlob 方法會使用服務帳戶系統管理的私密金鑰簽署 Blob。

使用任何要求資料之前,請先替換以下項目:

  • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
  • BLOB_PAYLOAD:採用 Base64 編碼的位元組字串。例如:VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu

HTTP 方法和網址:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signBlob

JSON 要求主體:

{
  "payload": "BLOB_PAYLOAD"
}

如要傳送要求,請展開以下其中一個選項:

如果 signBlob 要求作業成功,回應主體會包含已簽署的 blob 及用於簽署 blob 的簽署金鑰 ID。您可以將 signedBlob 值做為不記名符記,直接代表服務帳戶驗證要求。在服務帳戶的系統管理私密金鑰到期前,權杖都有效。這個金鑰的 ID 是回應中 keyId 欄位的值。

{
  "keyId": "42ba1e...fc0a",
  "signedBlob": "eyJ0eXAi...NiJ9"
}