為服務帳戶建立短期憑證

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

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

事前準備

建立短期存取權杖

大多數 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. 前往 Trusted Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

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

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

    例如 demo@my-project.s3ns-system.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:您的 Trusted 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": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    如果尚未授予服務帳戶任何角色,回應只會包含 etag 值。在下一個步驟中加入該 etag 值。

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

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

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

    serviceAccounts.setIamPolicy 方法會為服務帳戶設定更新後的允許政策。

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

    • PROJECT_ID:您的 Trusted Cloud 專案 ID。專案 ID 為英數字串,例如 my-project
    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

      舉例來說,如要設定上一步驟中顯示的允許政策,請將 POLICY 替換為下列內容,其中 CALLER_SA 是建立短期權杖的服務帳戶:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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. 前往 Trusted Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

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

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

    例如 //iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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": [
        "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. 請參閱 PRIV_SA 的允許政策:

    serviceAccounts.getIamPolicy 」方法會取得服務帳戶的允許政策。

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

    • PROJECT_ID:您的 Trusted 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": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    如果尚未授予服務帳戶任何角色,回應只會包含 etag 值。在下一個步驟中加入該 etag 值。

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

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

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

    serviceAccounts.setIamPolicy 方法會為服務帳戶設定更新後的允許政策。

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

    • PROJECT_ID:您的 Trusted Cloud 專案 ID。專案 ID 為英數字串,例如 my-project
    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

      舉例來說,如要設定上一步驟中顯示的允許政策,請將 POLICY 替換為下列內容,其中 CALLER_ACCOUNT 是建立短期權杖的使用者帳戶:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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.s3ns-system.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 權杖」。

如要建立 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. 前往 Trusted Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

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

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

    例如 demo@my-project.s3ns-system.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:您的 Trusted 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": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    如果尚未授予服務帳戶任何角色,回應只會包含 etag 值。在下一個步驟中加入該 etag 值。

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

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

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

    serviceAccounts.setIamPolicy 方法會為服務帳戶設定更新後的允許政策。

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

    • PROJECT_ID:您的 Trusted Cloud 專案 ID。專案 ID 為英數字串,例如 my-project
    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

      舉例來說,如要設定上一步驟中顯示的允許政策,請將 POLICY 替換為下列內容,其中 CALLER_SA 是建立短期權杖的服務帳戶:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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. 前往 Trusted Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

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

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

    例如 //iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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": [
        "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. 請參閱 PRIV_SA 的允許政策:

    serviceAccounts.getIamPolicy 」方法會取得服務帳戶的允許政策。

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

    • PROJECT_ID:您的 Trusted 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": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    如果尚未授予服務帳戶任何角色,回應只會包含 etag 值。在下一個步驟中加入該 etag 值。

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

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

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

    serviceAccounts.setIamPolicy 方法會為服務帳戶設定更新後的允許政策。

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

    • PROJECT_ID:您的 Trusted Cloud 專案 ID。專案 ID 為英數字串,例如 my-project
    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

      舉例來說,如要設定上一步驟中顯示的允許政策,請將 POLICY 替換為下列內容,其中 CALLER_ACCOUNT 是建立短期權杖的使用者帳戶:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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.s3ns-system.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) 在各種情境中都很有用:

  • 在您自己的應用程式之間安全地通訊。在本情境中,應用程式可簽署憑證,以讓其他應用程式驗證憑證。
  • 透過簽署包含有關使用者、帳戶或裝置之任意憑證附加資訊的 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. 前往 Trusted Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

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

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

    例如 demo@my-project.s3ns-system.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:您的 Trusted 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": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    如果尚未授予服務帳戶任何角色,回應只會包含 etag 值。在下一個步驟中加入該 etag 值。

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

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

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

    serviceAccounts.setIamPolicy 方法會為服務帳戶設定更新後的允許政策。

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

    • PROJECT_ID:您的 Trusted Cloud 專案 ID。專案 ID 為英數字串,例如 my-project
    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

      舉例來說,如要設定上一步驟中顯示的允許政策,請將 POLICY 替換為下列內容,其中 CALLER_SA 是建立短期權杖的服務帳戶:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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. 前往 Trusted Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

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

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

    例如 //iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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": [
        "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. 請參閱 PRIV_SA 的允許政策:

    serviceAccounts.getIamPolicy 」方法會取得服務帳戶的允許政策。

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

    • PROJECT_ID:您的 Trusted 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": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    如果尚未授予服務帳戶任何角色,回應只會包含 etag 值。在下一個步驟中加入該 etag 值。

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

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

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

    serviceAccounts.setIamPolicy 方法會為服務帳戶設定更新後的允許政策。

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

    • PROJECT_ID:您的 Trusted Cloud 專案 ID。專案 ID 為英數字串,例如 my-project
    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

      舉例來說,如要設定上一步驟中顯示的允許政策,請將 POLICY 替換為下列內容,其中 CALLER_ACCOUNT 是建立短期權杖的使用者帳戶:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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. 前往 Trusted Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

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

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

    例如 demo@my-project.s3ns-system.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:您的 Trusted 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": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    如果尚未授予服務帳戶任何角色,回應只會包含 etag 值。在下一個步驟中加入該 etag 值。

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

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

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

    serviceAccounts.setIamPolicy 方法會為服務帳戶設定更新後的允許政策。

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

    • PROJECT_ID:您的 Trusted Cloud 專案 ID。專案 ID 為英數字串,例如 my-project
    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

      舉例來說,如要設定上一步驟中顯示的允許政策,請將 POLICY 替換為下列內容,其中 CALLER_SA 是建立短期權杖的服務帳戶:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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. 前往 Trusted Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。

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

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

    例如 //iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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": [
        "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. 請參閱 PRIV_SA 的允許政策:

    serviceAccounts.getIamPolicy 」方法會取得服務帳戶的允許政策。

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

    • PROJECT_ID:您的 Trusted 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": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    如果尚未授予服務帳戶任何角色,回應只會包含 etag 值。在下一個步驟中加入該 etag 值。

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

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

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

    serviceAccounts.setIamPolicy 方法會為服務帳戶設定更新後的允許政策。

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

    • PROJECT_ID:您的 Trusted Cloud 專案 ID。專案 ID 為英數字串,例如 my-project
    • PRIV_SA:要建立短期權杖的具備權限服務帳戶電子郵件地址。
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

      舉例來說,如要設定上一步驟中顯示的允許政策,請將 POLICY 替換為下列內容,其中 CALLER_ACCOUNT 是建立短期權杖的使用者帳戶:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/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"
}