Membuat kredensial yang berlaku singkat untuk akun layanan

Halaman ini menjelaskan cara membuat kredensial yang berlaku singkat untuk akun layanan, yang dapat Anda gunakan untuk meniru identitas akun layanan. Bergantung pada jenis token yang Anda buat, token yang berlaku singkat memberikan identitas (untuk token ID) atau izin (untuk token akses) yang terkait dengan akun layanan.

Jika arsitektur sistem Anda mengharuskan Anda untuk menggunakan serangkaian panggilan pembuatan token, Anda dapat menggunakan rantai delegasi yang terdiri dari beberapa akun layanan. Dalam sebagian besar kasus, metode langsung, seperti yang dijelaskan di halaman ini, sudah cukup.

Sebelum memulai

Membuat token akses yang berlaku singkat

Token akses diterima untuk autentikasi oleh sebagian besar Google API. Saat Anda membuat token akses dengan menggunakan peniruan akun layanan, token akses akan diberikan tanpa token refresh, yang berarti bahwa saat masa berlaku token berakhir, Anda harus mengulangi proses peniruan identitas untuk membuat token akses baru.

Untuk mengetahui informasi selengkapnya, lihat Token akses.

Untuk membuat token akses yang berlaku singkat, selesaikan tugas berikut:

Memberikan izin yang diperlukan

Permintaan langsung melibatkan dua identitas: pemanggil yang meminta kredensial, dan akun layanan tempat kredensial tersebut dibuat. Cara Anda menyiapkan izin bergantung pada apakah pemanggil melakukan autentikasi sebagai akun layanan atau sebagai Akun Google.

Jika Anda ingin menjalankan perintah REST atau gcloud CLI pada halaman ini dalam lingkungan pengembangan lokal, pemanggil dapat diwakili oleh kredensial pengguna. Untuk workload otomatis, seperti aplikasi yang berjalan di Compute Engine, pemanggil harus diwakili oleh akun layanan.

Akun layanan

Saat aplikasi panggilan menggunakan akun layanan sebagai identitasnya, entity utama berikut akan terlibat:

  • Akun layanan pemanggil (CALLER_SA)

    Akun layanan ini mewakili aplikasi panggilan, yang mengeluarkan permintaan untuk kredensial yang berlaku singkat.

  • Akun layanan yang memiliki hak istimewa (PRIV_SA)

    Akun layanan ini diberi peran IAM yang diperlukan untuk token yang berlaku singkat. Ini adalah akun layanan tempat token yang berlaku singkat dibuat.

Untuk memberi CALLER_SA izin untuk membuat kredensial yang berlaku singkat untuk PRIV_SA, Anda memberikan CALLER_SA peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) pada PRIV_SA.

Berikan peran yang diperlukan pada PRIV_SA:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.
  3. Klik alamat email akun layanan yang memiliki hak istimewa, PRIV_SA.
  4. Klik tab Izin.
  5. Pada Akun utama dengan akses ke akun layanan ini, klik Berikan Akses.
  6. Masukkan alamat email akun layanan pemanggil, CALLER_SA.

    Misalnya, demo@my-project.iam.gserviceaccount.com.

  7. Pilih peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).
  8. Klik Simpan untuk memberikan peran ke akun layanan.

gcloud

Perintah gcloud iam service-accounts add-iam-policy-binding memberikan peran pada akun layanan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token dibuat.
  • CALLER_SA: Alamat email akun layanan yang mewakili aplikasi yang meminta token yang berlaku singkat.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

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

REST

  1. Baca kebijakan izin untuk PRIV_SA:

    Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Jika Anda belum memberikan peran apa pun ke akun layanan, respons hanya akan berisi nilai etag. Sertakan nilai etag tersebut di langkah berikutnya.

  2. Ubah kebijakan izinkan untuk memberi CALLER_SA peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).

    Misalnya, untuk mengubah contoh respons dari langkah sebelumnya, tambahkan kode berikut:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Tulis kebijakan izin yang telah diperbarui:

    Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk akun layanan.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat Referensi kebijakan.

      Misalnya, untuk menetapkan kebijakan izinkan yang ditunjukkan pada langkah sebelumnya, ganti POLICY dengan kode berikut, dengan CALLER_SA adalah akun layanan yang membuat token yang berlaku singkat:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Kredensial pengguna

Jika Anda ingin menggunakan Google Cloud CLI untuk membuat token yang berlaku singkat, atau Anda ingin membuat token yang berlaku singkat dari lingkungan pengembangan lokal, Anda dapat menggunakan akun pengguna untuk membuat token tersebut. Sering kali, Anda dapat menggunakan Akun Google Anda sendiri

Saat Anda menggunakan akun pengguna untuk membuat token yang berlaku singkat, identitas berikut akan dilibatkan:

  • Akun Google Pemanggil (CALLER_ACCOUNT)

    Akun pengguna ini digunakan untuk membuat kredensial yang berlaku singkat untuk akun layanan yang memiliki hak istimewa.

  • Akun layanan yang memiliki hak istimewa (PRIV_SA)

    Akun layanan ini diberi peran IAM yang diperlukan untuk token yang berlaku singkat. Ini adalah akun layanan tempat token yang berlaku singkat dibuat.

Untuk memungkinkan CALLER_ACCOUNT dapat membuat kredensial yang berlaku singkat untuk PRIV_SA, Anda memberikan CALLER_ACCOUNT peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) pada PRIV_SA.

Berikan peran yang diperlukan pada PRIV_SA:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.
  3. Klik alamat email akun layanan yang memiliki hak istimewa, PRIV_SA.
  4. Klik tab Izin.
  5. Pada Akun utama dengan akses ke akun layanan ini, klik Berikan Akses.
  6. Masukkan alamat email Akun Google pemanggil, CALLER_ACCOUNT.

    Misalnya, username@google.com.

  7. Pilih peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).
  8. Klik Simpan untuk memberikan peran kepada akun pengguna.

gcloud

Perintah gcloud iam service-accounts add-iam-policy-binding memberikan peran pada akun layanan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token dibuat.
  • CALLER_ACCOUNT: Alamat email akun pengguna yang digunakan untuk meminta token yang berlaku singkat.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Baca kebijakan izin untuk PRIV_SA:

    Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Jika Anda belum memberikan peran apa pun ke akun layanan, respons hanya akan berisi nilai etag. Sertakan nilai etag tersebut di langkah berikutnya.

  2. Ubah kebijakan izin untuk memberi CALLER_ACCOUNT peran Pembuat Token Akun Layanan ( roles/iam.serviceAccountTokenCreator).

    Misalnya, untuk mengubah contoh respons dari langkah sebelumnya, tambahkan kode berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
  3. Tulis kebijakan izin yang telah diperbarui:

    Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk akun layanan.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat Referensi kebijakan.

      Misalnya, untuk menetapkan kebijakan izinkan yang ditunjukkan pada langkah sebelumnya, ganti POLICY dengan kode berikut, dengan CALLER_ACCOUNT adalah akun pengguna yang membuat token yang berlaku singkat:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Membuat token akses

Anda dapat membuat token akses OAuth 2.0 dengan menggunakan gcloud CLI, REST API, atau Library Klien Cloud dan Library Klien Google API.

Jika Anda menggunakan REST API, dan sistem Anda dikonfigurasi untuk mengizinkan masa pakai token yang lebih lama, Anda dapat membuat token dengan masa aktif yang lebih lama daripada default-nya. Google Cloud CLI tidak mendukung setelan masa aktif untuk token.

Contoh di bawah ini dirancang untuk digunakan di lingkungan pengembangan lokal; pemanggil harus diwakili oleh akun pengguna, bukan akun layanan.

Buat token akses OAuth 2.0 untuk akun layanan:

gcloud

  1. Login ke Google Cloud CLI sebagai Akun Google pemanggil.

    gcloud auth login CALLER_ACCOUNT
  2. Buat token untuk akun layanan.

    Perintah gcloud auth print-access-token menghasilkan token akses OAuth 2.0 untuk akun layanan.

    Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.

    Jalankan perintah berikut:

    Linux, macOS, atau 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

    Anda akan melihat respons seperti berikut:

    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

Metode Service Account Credentials API serviceAccounts.generateAccessToken menghasilkan token akses OAuth 2.0 untuk akun layanan.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku dibuat.
  • LIFETIME: Jumlah waktu hingga token akses berakhir, dalam detik. Contoh, 300s.

    Secara default, masa aktif token maksimum adalah 1 jam (3.600 detik). Untuk memperpanjang masa aktif maksimum token ini menjadi 12 jam (43.200 detik), tambahkan akun layanan ke kebijakan organisasi yang menyertakan batasan daftar constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Metode HTTP dan URL:

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

Meminta isi JSON:

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

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Jika permintaan generateAccessToken berhasil, isi respons akan memuat token akses OAuth 2.0 dan waktu habis masa berlaku. accessToken kemudian dapat digunakan untuk mengautentikasi permintaan atas nama akun layanan hingga expireTime telah tercapai:

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

Go

Sebelum Anda dapat menggunakan kode contoh ini, Anda harus menyiapkan Kredensial Default Aplikasi untuk Akun Google pemanggil yang sebelumnya Anda berikan peran yang diperlukan untuk meniru akun layanan yang memuat hak istimewa.

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

Sebelum Anda dapat menggunakan kode contoh ini, Anda harus menyiapkan Kredensial Default Aplikasi untuk Akun Google pemanggil yang sebelumnya Anda berikan peran yang diperlukan untuk meniru akun layanan yang memuat hak istimewa.


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

Sebelum Anda dapat menggunakan kode contoh ini, Anda harus menyiapkan Kredensial Default Aplikasi untuk Akun Google pemanggil yang sebelumnya Anda berikan peran yang diperlukan untuk meniru akun layanan yang memuat hak istimewa.

/**
 * 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

Sebelum Anda dapat menggunakan kode contoh ini, Anda harus menyiapkan Kredensial Default Aplikasi untuk Akun Google pemanggil yang sebelumnya Anda berikan peran yang diperlukan untuk meniru akun layanan yang memuat hak istimewa.

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.")

Membuat token ID OpenID Connect (OIDC)

Token ID mengikuti spesifikasi OpenID Connect (OIDC). Token ID diterima oleh layanan dan aplikasi dalam jumlah yang terbatas.

Untuk mengetahui informasi selengkapnya, lihat Token ID dan Autentikasi untuk aplikasi yang dihosting di Cloud Run atau Cloud Functions.

Untuk membuat token ID, selesaikan tugas berikut:

  • Berikan izin yang diperlukan kepada pemanggil.

    Gunakan peran Pembuat Token OpenID Connect Identity pada Akun Layanan (roles/iam.serviceAccountOpenIdTokenCreator) untuk membuat token ID. Ini adalah peran yang berbeda dengan peran yang Anda gunakan untuk jenis token lainnya.

  • Buat token ID.

Memberikan izin yang diperlukan

Permintaan langsung melibatkan dua identitas: pemanggil yang meminta kredensial, dan akun layanan tempat kredensial tersebut dibuat. Cara Anda menyiapkan izin bergantung pada apakah pemanggil melakukan autentikasi sebagai akun layanan atau sebagai Akun Google.

Jika Anda ingin menjalankan perintah REST atau gcloud CLI pada halaman ini dalam lingkungan pengembangan lokal, pemanggil dapat diwakili oleh kredensial pengguna. Untuk workload otomatis, seperti aplikasi yang berjalan di Compute Engine, pemanggil harus diwakili oleh akun layanan.

Akun layanan

Saat aplikasi panggilan menggunakan akun layanan sebagai identitasnya, entity utama berikut akan terlibat:

  • Akun layanan pemanggil (CALLER_SA)

    Akun layanan ini mewakili aplikasi panggilan, yang mengeluarkan permintaan untuk kredensial yang berlaku singkat.

  • Akun layanan yang memiliki hak istimewa (PRIV_SA)

    Akun layanan ini diberi peran IAM yang diperlukan untuk token yang berlaku singkat. Ini adalah akun layanan tempat token yang berlaku singkat dibuat.

Untuk memberi CALLER_SA izin guna membuat kredensial yang berlaku singkat untuk PRIV_SA, Anda memberikan CALLER_SA peran Pembuat Token Identitas OpenID Connect (roles/iam.serviceAccountOpenIdTokenCreator) Akun Layanan pada PRIV_SA.

Berikan peran yang diperlukan pada PRIV_SA:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.
  3. Klik alamat email akun layanan yang memiliki hak istimewa, PRIV_SA.
  4. Klik tab Izin.
  5. Pada Akun utama dengan akses ke akun layanan ini, klik Berikan Akses.
  6. Masukkan alamat email akun layanan pemanggil, CALLER_SA.

    Misalnya, demo@my-project.iam.gserviceaccount.com.

  7. Pilih peran Pembuat Token OpenID Connect Identity pada Akun Layanan (roles/iam.serviceAccountOpenIdTokenCreator).
  8. Klik Simpan untuk memberikan peran ke akun layanan.

gcloud

Perintah gcloud iam service-accounts add-iam-policy-binding memberikan peran pada akun layanan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token dibuat.
  • CALLER_SA: Alamat email akun layanan yang mewakili aplikasi yang meminta token yang berlaku singkat.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

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

REST

  1. Baca kebijakan izin untuk PRIV_SA:

    Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Jika Anda belum memberikan peran apa pun ke akun layanan, respons hanya akan berisi nilai etag. Sertakan nilai etag tersebut di langkah berikutnya.

  2. Ubah kebijakan izin untuk memberi CALLER_SA peran Pembuat Token OpenID Connect Identity pada Akun Layanan (roles/iam.serviceAccountOpenIdTokenCreator).

    Misalnya, untuk mengubah contoh respons dari langkah sebelumnya, tambahkan kode berikut:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Tulis kebijakan izin yang telah diperbarui:

    Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk akun layanan.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat Referensi kebijakan.

      Misalnya, untuk menetapkan kebijakan izinkan yang ditunjukkan pada langkah sebelumnya, ganti POLICY dengan kode berikut, dengan CALLER_SA adalah akun layanan yang membuat token yang berlaku singkat:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Kredensial pengguna

Jika Anda ingin menggunakan Google Cloud CLI untuk membuat token yang berlaku singkat, atau Anda ingin membuat token yang berlaku singkat dari lingkungan pengembangan lokal, Anda dapat menggunakan akun pengguna untuk membuat token tersebut. Sering kali, Anda dapat menggunakan Akun Google Anda sendiri

Saat Anda menggunakan akun pengguna untuk membuat token yang berlaku singkat, identitas berikut akan dilibatkan:

  • Akun Google Pemanggil (CALLER_ACCOUNT)

    Akun pengguna ini digunakan untuk membuat kredensial yang berlaku singkat untuk akun layanan yang memiliki hak istimewa.

  • Akun layanan yang memiliki hak istimewa (PRIV_SA)

    Akun layanan ini diberi peran IAM yang diperlukan untuk token yang berlaku singkat. Ini adalah akun layanan tempat token yang berlaku singkat dibuat.

Agar CALLER_ACCOUNT dapat membuat kredensial yang berlaku singkat untuk PRIV_SA, Anda memberikan CALLER_ACCOUNT peran Pembuat Token OpenID Connect Identity Akun Layanan (roles/iam.serviceAccountOpenIdTokenCreator) pada PRIV_SA.

Berikan peran yang diperlukan pada PRIV_SA:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.
  3. Klik alamat email akun layanan yang memiliki hak istimewa, PRIV_SA.
  4. Klik tab Izin.
  5. Pada Akun utama dengan akses ke akun layanan ini, klik Berikan Akses.
  6. Masukkan alamat email Akun Google pemanggil, CALLER_ACCOUNT.

    Misalnya, username@google.com.

  7. Pilih peran Pembuat Token OpenID Connect Identity pada Akun Layanan (roles/iam.serviceAccountOpenIdTokenCreator).
  8. Klik Simpan untuk memberikan peran kepada akun pengguna.

gcloud

Perintah gcloud iam service-accounts add-iam-policy-binding memberikan peran pada akun layanan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token dibuat.
  • CALLER_ACCOUNT: Alamat email akun pengguna yang digunakan untuk meminta token yang berlaku singkat.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

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

REST

  1. Baca kebijakan izin untuk PRIV_SA:

    Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Jika Anda belum memberikan peran apa pun ke akun layanan, respons hanya akan berisi nilai etag. Sertakan nilai etag tersebut di langkah berikutnya.

  2. Ubah kebijakan izin untuk memberi CALLER_ACCOUNT peran Pembuat Token OpenID Connect Identity pada Akun Layanan ( roles/iam.serviceAccountOpenIdTokenCreator).

    Misalnya, untuk mengubah contoh respons dari langkah sebelumnya, tambahkan kode berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountOpenIdTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
  3. Tulis kebijakan izin yang telah diperbarui:

    Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk akun layanan.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat Referensi kebijakan.

      Misalnya, untuk menetapkan kebijakan izinkan yang ditunjukkan pada langkah sebelumnya, ganti POLICY dengan kode berikut, dengan CALLER_ACCOUNT adalah akun pengguna yang membuat token yang berlaku singkat:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Membuat token ID

Anda dapat membuat token ID OpenID Connect (OIDC) dengan menggunakan gcloud CLI, REST API, atau Library Klien Cloud dan Library Klien Google API.

Contoh di bawah ini dirancang untuk digunakan di lingkungan pengembangan lokal; pemanggil harus diwakili oleh akun pengguna, bukan akun layanan.

Token ID OIDC berlaku selama 1 jam (3.600 detik).

Buat token ID OIDC yang ditandatangani Google untuk akun layanan:

gcloud

  1. Login ke Google Cloud CLI sebagai Akun Google pemanggil.

    gcloud auth login CALLER_ACCOUNT
  2. Buat token untuk akun layanan.

    Perintah gcloud auth print-identity-token menghasilkan token ID OIDC untuk akun layanan.

    Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • AUDIENCE_NAME: Audiens untuk token, biasanya URL aplikasi atau layanan tempat token akan digunakan untuk mengakses.
      • Jalankan perintah berikut:

        Linux, macOS, atau 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"

        Anda akan melihat respons seperti berikut:

        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

Metode Service Account Credentials API serviceAccounts.generateIdToken menghasilkan token ID OIDC untuk akun layanan.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
  • AUDIENCE_NAME: Audiens untuk token, biasanya URL aplikasi atau layanan tempat token akan digunakan untuk mengakses.

Metode HTTP dan URL:

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

Meminta isi JSON:

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

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Jika permintaan generateId berhasil, isi permintaan akan memuat token ID yang berlaku selama 1 jam. token kemudian dapat digunakan untuk mengautentikasi permintaan atas nama akun layanan:

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

Membuat Token Web JSON (JWT) yang ditandatangani sendiri

Token Web JSON (JWT) yang ditandatangani sendiri berguna dalam berbagai skenario:

  • Mengautentikasi ke API yang di-deploy dengan API Gateway.
  • Mengautentikasi panggilan ke Google API seperti yang dijelaskan dalam Panduan Autentikasi Google.
  • Berkomunikasi antar-aplikasi Anda dengan aman. Dalam skenario ini, satu aplikasi dapat menandatangani token yang dapat diverifikasi oleh aplikasi lain untuk tujuan autentikasi.
  • Memperlakukan akun layanan sebagai penyedia identitas dengan menandatangani JWT yang berisi klaim arbitrer tentang pengguna, akun, atau perangkat.

Untuk membuat JWT, selesaikan tugas berikut:

Memberikan izin yang diperlukan

Permintaan langsung melibatkan dua identitas: pemanggil yang meminta kredensial, dan akun layanan tempat kredensial tersebut dibuat. Cara Anda menyiapkan izin bergantung pada apakah pemanggil melakukan autentikasi sebagai akun layanan atau sebagai Akun Google.

Jika Anda ingin menjalankan perintah REST atau gcloud CLI pada halaman ini dalam lingkungan pengembangan lokal, pemanggil dapat diwakili oleh kredensial pengguna. Untuk workload otomatis, seperti aplikasi yang berjalan di Compute Engine, pemanggil harus diwakili oleh akun layanan.

Akun layanan

Saat aplikasi panggilan menggunakan akun layanan sebagai identitasnya, entity utama berikut akan terlibat:

  • Akun layanan pemanggil (CALLER_SA)

    Akun layanan ini mewakili aplikasi panggilan, yang mengeluarkan permintaan untuk kredensial yang berlaku singkat.

  • Akun layanan yang memiliki hak istimewa (PRIV_SA)

    Akun layanan ini diberi peran IAM yang diperlukan untuk token yang berlaku singkat. Ini adalah akun layanan tempat token yang berlaku singkat dibuat.

Untuk memberi CALLER_SA izin untuk membuat kredensial yang berlaku singkat untuk PRIV_SA, Anda memberikan CALLER_SA peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) pada PRIV_SA.

Berikan peran yang diperlukan pada PRIV_SA:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.
  3. Klik alamat email akun layanan yang memiliki hak istimewa, PRIV_SA.
  4. Klik tab Izin.
  5. Pada Akun utama dengan akses ke akun layanan ini, klik Berikan Akses.
  6. Masukkan alamat email akun layanan pemanggil, CALLER_SA.

    Misalnya, demo@my-project.iam.gserviceaccount.com.

  7. Pilih peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).
  8. Klik Simpan untuk memberikan peran ke akun layanan.

gcloud

Perintah gcloud iam service-accounts add-iam-policy-binding memberikan peran pada akun layanan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token dibuat.
  • CALLER_SA: Alamat email akun layanan yang mewakili aplikasi yang meminta token yang berlaku singkat.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

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

REST

  1. Baca kebijakan izin untuk PRIV_SA:

    Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Jika Anda belum memberikan peran apa pun ke akun layanan, respons hanya akan berisi nilai etag. Sertakan nilai etag tersebut di langkah berikutnya.

  2. Ubah kebijakan izinkan untuk memberi CALLER_SA peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).

    Misalnya, untuk mengubah contoh respons dari langkah sebelumnya, tambahkan kode berikut:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Tulis kebijakan izin yang telah diperbarui:

    Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk akun layanan.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat Referensi kebijakan.

      Misalnya, untuk menetapkan kebijakan izinkan yang ditunjukkan pada langkah sebelumnya, ganti POLICY dengan kode berikut, dengan CALLER_SA adalah akun layanan yang membuat token yang berlaku singkat:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Kredensial pengguna

Jika Anda ingin menggunakan Google Cloud CLI untuk membuat token yang berlaku singkat, atau Anda ingin membuat token yang berlaku singkat dari lingkungan pengembangan lokal, Anda dapat menggunakan akun pengguna untuk membuat token tersebut. Sering kali, Anda dapat menggunakan Akun Google Anda sendiri

Saat Anda menggunakan akun pengguna untuk membuat token yang berlaku singkat, identitas berikut akan dilibatkan:

  • Akun Google Pemanggil (CALLER_ACCOUNT)

    Akun pengguna ini digunakan untuk membuat kredensial yang berlaku singkat untuk akun layanan yang memiliki hak istimewa.

  • Akun layanan yang memiliki hak istimewa (PRIV_SA)

    Akun layanan ini diberi peran IAM yang diperlukan untuk token yang berlaku singkat. Ini adalah akun layanan tempat token yang berlaku singkat dibuat.

Untuk memungkinkan CALLER_ACCOUNT dapat membuat kredensial yang berlaku singkat untuk PRIV_SA, Anda memberikan CALLER_ACCOUNT peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) pada PRIV_SA.

Berikan peran yang diperlukan pada PRIV_SA:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.
  3. Klik alamat email akun layanan yang memiliki hak istimewa, PRIV_SA.
  4. Klik tab Izin.
  5. Pada Akun utama dengan akses ke akun layanan ini, klik Berikan Akses.
  6. Masukkan alamat email Akun Google pemanggil, CALLER_ACCOUNT.

    Misalnya, username@google.com.

  7. Pilih peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).
  8. Klik Simpan untuk memberikan peran kepada akun pengguna.

gcloud

Perintah gcloud iam service-accounts add-iam-policy-binding memberikan peran pada akun layanan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token dibuat.
  • CALLER_ACCOUNT: Alamat email akun pengguna yang digunakan untuk meminta token yang berlaku singkat.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Baca kebijakan izin untuk PRIV_SA:

    Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Jika Anda belum memberikan peran apa pun ke akun layanan, respons hanya akan berisi nilai etag. Sertakan nilai etag tersebut di langkah berikutnya.

  2. Ubah kebijakan izin untuk memberi CALLER_ACCOUNT peran Pembuat Token Akun Layanan ( roles/iam.serviceAccountTokenCreator).

    Misalnya, untuk mengubah contoh respons dari langkah sebelumnya, tambahkan kode berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
  3. Tulis kebijakan izin yang telah diperbarui:

    Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk akun layanan.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat Referensi kebijakan.

      Misalnya, untuk menetapkan kebijakan izinkan yang ditunjukkan pada langkah sebelumnya, ganti POLICY dengan kode berikut, dengan CALLER_ACCOUNT adalah akun pengguna yang membuat token yang berlaku singkat:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Membuat JWT

Buat JWT yang ditandatangani sendiri:

REST

Metode Service Account Credentials API serviceAccounts.signJwt menandatangani JWT menggunakan kunci pribadi yang dikelola sistem pada akun layanan.

Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
  • JWT_PAYLOAD: Payload JWT yang akan ditandatangani, yaitu objek JSON yang berisi Kumpulan Klaim JWT. Sertakan klaim yang diperlukan untuk kasus penggunaan yang Anda inginkan dan untuk memenuhi persyaratan validasi untuk layanan yang Anda panggil. Jika Anda memanggil Google API, lihat Panduan Autentikasi Google untuk mengetahui persyaratan klaimnya.

    Klaim exp (waktu habis masa berlaku) tidak boleh lebih dari 12 jam ke depan. Jika Anda memanggil Google API, klaim exp harus ditetapkan tidak boleh lebih dari 1 jam ke depan.

    Contoh payload berikut berisi klaim untuk memanggil Google API, dengan EXP adalah stempel waktu bilangan bulat yang menunjukkan waktu habis masa berlaku:

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

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "payload": "JWT_PAYLOAD"
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Jika permintaan signJwt berhasil, isi respons berisi JWT yang ditandatangani dan ID kunci penandatanganan yang digunakan untuk menandatangani JWT. Anda dapat menggunakan nilai signedJwt sebagai token pemilik untuk secara langsung mengautentikasi permintaan atas nama akun layanan. Token berlaku hingga waktu habis masa berlaku yang ditetapkan dalam permintaan:

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

Membuat objek biner yang ditandatangani sendiri (blob)

Objek biner yang ditandatangani sendiri, atau blob, digunakan untuk mengirimkan data biner sedemikian rupa sehingga pembuat data dapat diketahui (karena blob ditandatangani sendiri). Blob dapat digunakan untuk membuat tanda tangan, sebuah objek Cloud Storage yang diperlukan untuk berbagai alur autentikasi termasuk URL yang ditandatangani. Untuk mengetahui informasi tentang tanda tangan, lihat dokumentasi Cloud Storage.

Untuk membuat objek biner yang ditandatangani sendiri, selesaikan tugas berikut:

Memberikan izin yang diperlukan

Permintaan langsung melibatkan dua identitas: pemanggil yang meminta kredensial, dan akun layanan tempat kredensial tersebut dibuat. Cara Anda menyiapkan izin bergantung pada apakah pemanggil melakukan autentikasi sebagai akun layanan atau sebagai Akun Google.

Jika Anda ingin menjalankan perintah REST atau gcloud CLI pada halaman ini dalam lingkungan pengembangan lokal, pemanggil dapat diwakili oleh kredensial pengguna. Untuk workload otomatis, seperti aplikasi yang berjalan di Compute Engine, pemanggil harus diwakili oleh akun layanan.

Akun layanan

Saat aplikasi panggilan menggunakan akun layanan sebagai identitasnya, entity utama berikut akan terlibat:

  • Akun layanan pemanggil (CALLER_SA)

    Akun layanan ini mewakili aplikasi panggilan, yang mengeluarkan permintaan untuk kredensial yang berlaku singkat.

  • Akun layanan yang memiliki hak istimewa (PRIV_SA)

    Akun layanan ini diberi peran IAM yang diperlukan untuk token yang berlaku singkat. Ini adalah akun layanan tempat token yang berlaku singkat dibuat.

Untuk memberi CALLER_SA izin untuk membuat kredensial yang berlaku singkat untuk PRIV_SA, Anda memberikan CALLER_SA peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) pada PRIV_SA.

Berikan peran yang diperlukan pada PRIV_SA:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.
  3. Klik alamat email akun layanan yang memiliki hak istimewa, PRIV_SA.
  4. Klik tab Izin.
  5. Pada Akun utama dengan akses ke akun layanan ini, klik Berikan Akses.
  6. Masukkan alamat email akun layanan pemanggil, CALLER_SA.

    Misalnya, demo@my-project.iam.gserviceaccount.com.

  7. Pilih peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).
  8. Klik Simpan untuk memberikan peran ke akun layanan.

gcloud

Perintah gcloud iam service-accounts add-iam-policy-binding memberikan peran pada akun layanan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token dibuat.
  • CALLER_SA: Alamat email akun layanan yang mewakili aplikasi yang meminta token yang berlaku singkat.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

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

REST

  1. Baca kebijakan izin untuk PRIV_SA:

    Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Jika Anda belum memberikan peran apa pun ke akun layanan, respons hanya akan berisi nilai etag. Sertakan nilai etag tersebut di langkah berikutnya.

  2. Ubah kebijakan izinkan untuk memberi CALLER_SA peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).

    Misalnya, untuk mengubah contoh respons dari langkah sebelumnya, tambahkan kode berikut:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
  3. Tulis kebijakan izin yang telah diperbarui:

    Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk akun layanan.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat Referensi kebijakan.

      Misalnya, untuk menetapkan kebijakan izinkan yang ditunjukkan pada langkah sebelumnya, ganti POLICY dengan kode berikut, dengan CALLER_SA adalah akun layanan yang membuat token yang berlaku singkat:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Kredensial pengguna

Jika Anda ingin menggunakan Google Cloud CLI untuk membuat token yang berlaku singkat, atau Anda ingin membuat token yang berlaku singkat dari lingkungan pengembangan lokal, Anda dapat menggunakan akun pengguna untuk membuat token tersebut. Sering kali, Anda dapat menggunakan Akun Google Anda sendiri

Saat Anda menggunakan akun pengguna untuk membuat token yang berlaku singkat, identitas berikut akan dilibatkan:

  • Akun Google Pemanggil (CALLER_ACCOUNT)

    Akun pengguna ini digunakan untuk membuat kredensial yang berlaku singkat untuk akun layanan yang memiliki hak istimewa.

  • Akun layanan yang memiliki hak istimewa (PRIV_SA)

    Akun layanan ini diberi peran IAM yang diperlukan untuk token yang berlaku singkat. Ini adalah akun layanan tempat token yang berlaku singkat dibuat.

Untuk memungkinkan CALLER_ACCOUNT dapat membuat kredensial yang berlaku singkat untuk PRIV_SA, Anda memberikan CALLER_ACCOUNT peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) pada PRIV_SA.

Berikan peran yang diperlukan pada PRIV_SA:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.
  3. Klik alamat email akun layanan yang memiliki hak istimewa, PRIV_SA.
  4. Klik tab Izin.
  5. Pada Akun utama dengan akses ke akun layanan ini, klik Berikan Akses.
  6. Masukkan alamat email Akun Google pemanggil, CALLER_ACCOUNT.

    Misalnya, username@google.com.

  7. Pilih peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator).
  8. Klik Simpan untuk memberikan peran kepada akun pengguna.

gcloud

Perintah gcloud iam service-accounts add-iam-policy-binding memberikan peran pada akun layanan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token dibuat.
  • CALLER_ACCOUNT: Alamat email akun pengguna yang digunakan untuk meminta token yang berlaku singkat.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda akan melihat respons seperti berikut:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. Baca kebijakan izin untuk PRIV_SA:

    Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin akun layanan.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON seperti berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

    Jika Anda belum memberikan peran apa pun ke akun layanan, respons hanya akan berisi nilai etag. Sertakan nilai etag tersebut di langkah berikutnya.

  2. Ubah kebijakan izin untuk memberi CALLER_ACCOUNT peran Pembuat Token Akun Layanan ( roles/iam.serviceAccountTokenCreator).

    Misalnya, untuk mengubah contoh respons dari langkah sebelumnya, tambahkan kode berikut:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
  3. Tulis kebijakan izin yang telah diperbarui:

    Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk akun layanan.

    Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Google Cloud Anda ID project adalah string alfanumerik, seperti my-project.
    • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
    • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.
    • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya tentang format kebijakan, lihat Referensi kebijakan.

      Misalnya, untuk menetapkan kebijakan izinkan yang ditunjukkan pada langkah sebelumnya, ganti POLICY dengan kode berikut, dengan CALLER_ACCOUNT adalah akun pengguna yang membuat token yang berlaku singkat:

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }

    Metode HTTP dan URL:

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

    Meminta isi JSON:

    {
      "policy": POLICY
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Respons berisi kebijakan izin yang telah diperbarui.

Membuat blob yang ditandatangani sendiri

Buat blob yang ditandatangani sendiri untuk akun layanan:

REST

Metode Service Account Credentials API serviceAccounts.signBlob menandatangani blob menggunakan kunci pribadi yang dikelola sistem pada akun layanan.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PRIV_SA: Alamat email akun layanan yang memiliki hak istimewa tempat token yang berlaku singkat dibuat.
  • BLOB_PAYLOAD: String byte berenkode base64. Misalnya, VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu.

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "payload": "BLOB_PAYLOAD"
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Jika permintaan signBlob berhasil, isi respons akan memuat blob yang ditandatangani dan ID kunci penandatanganan yang digunakan untuk menandatangani blob. Anda dapat menggunakan nilai signedBlob sebagai token pemilik untuk secara langsung mengautentikasi permintaan atas nama akun layanan. Token berlaku hingga masa berlaku kunci pribadi yang dikelola sistem pada akun layanan berakhir. ID kunci ini adalah nilai kolom keyId dalam respons.

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