Halaman ini menjelaskan beberapa cara untuk memperoleh token ID OpenID Connect (OIDC) yang ditandatangani Google.
Anda memerlukan token ID yang ditandatangani Google untuk kasus penggunaan autentikasi berikut:
- Mengakses layanan Cloud Run
- Memanggil fungsi Cloud Run
- Mengautentikasi pengguna ke aplikasi yang diamankan oleh Identity-Aware Proxy (IAP)
- Membuat permintaan ke API yang di-deploy dengan API Gateway atau Cloud Endpoints
Untuk informasi tentang masa berlaku dan konten token ID, lihat token ID.
Token ID memiliki layanan atau aplikasi tertentu yang dapat digunakan,
yang ditentukan berdasarkan nilai klaim aud
-nya. Halaman ini menggunakan
istilah layanan target untuk merujuk pada layanan atau aplikasi tempat token ID
dapat digunakan untuk autentikasi.
Setelah mendapatkan token ID, Anda dapat menyertakannya ke
header Authorization
dalam permintaan ke layanan target.
Metode untuk mendapatkan token ID
Ada berbagai cara untuk mendapatkan token ID. Halaman ini menjelaskan metode berikut:
- Mendapatkan token ID dari server metadata
- Menggunakan layanan penghubung untuk membuat token ID
- Membuat token ID dengan meniru identitas akun layanan
- Membuat token ID generik untuk pengembangan dengan Cloud Run dan fungsi Cloud Run
Jika ingin agar token ID dapat diterima oleh aplikasi yang tidak dihosting di Google Cloud, Anda mungkin dapat menggunakan metode ini. Namun, Anda harus mengetahui apa yang menurut token ID diperlukan aplikasi.
Mendapatkan token ID dari server metadata
Saat kode Anda dijalankan pada resource yang dapat memiliki akun layanan yang terpasang padanya, server metadata untuk layanan terkait biasanya dapat memberikan token ID. Server metadata membuat token ID untuk akun layanan yang terpasang. Anda tidak bisa mendapatkan token ID berdasarkan kredensial pengguna dari server metadata.
Anda bisa mendapatkan token ID dari server metadata ketika kode Anda dijalankan di layanan Google Cloud berikut:
- Compute Engine
- Lingkungan standar App Engine
- Lingkungan fleksibel App Engine
- Cloud Run Functions
- Cloud Run
- Google Kubernetes Engine
- Cloud Build
Untuk mengambil token ID dari server metadata, Anda harus mengkueri endpoint identitas untuk akun layanan, seperti yang ditunjukkan dalam contoh ini.
curl
Ganti AUDIENCE
dengan URI untuk layanan target,
misalnya http://www.example.com
.
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
Ganti AUDIENCE
dengan URI untuk layanan target,
misalnya http://www.example.com
.
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
Java
Untuk menjalankan contoh kode ini, Anda harus menginstal Library Klien Auth untuk Java.
Go
Node.js
Untuk menjalankan contoh kode ini, Anda harus menginstal Library Google Auth untuk Node.js
Python
Untuk menjalankan contoh kode ini, Anda harus menginstal Library Python Google Auth.
Ruby
Untuk menjalankan contoh kode ini, Anda harus menginstal Library Google Auth untuk Ruby.
Menggunakan layanan penghubung untuk membuat token ID
Beberapa layanan Google Cloud membantu Anda memanggil layanan lainnya. Layanan penghubung
ini dapat membantu menentukan kapan panggilan dilakukan, atau mengelola alur kerja yang
mencakup pemanggilan layanan. Layanan berikut dapat otomatis menyertakan
token ID, dengan nilai yang sesuai untuk klaim aud
, saat memulai
panggilan ke layanan yang memerlukan token ID:
- Cloud Scheduler
- Cloud Scheduler adalah penjadwal cron job tingkat perusahaan yang terkelola sepenuhnya. Anda dapat mengonfigurasi Cloud Scheduler untuk menyertakan token ID atau token akses saat layanan lain dipanggil. Untuk informasi selengkapnya, lihat Menggunakan autentikasi dengan Target HTTP.
- Cloud Tasks
- Dengan Cloud Tasks, Anda dapat mengelola eksekusi tugas terdistribusi. Anda dapat mengonfigurasi tugas untuk menyertakan token ID atau token akses saat memanggil layanan. Untuk informasi selengkapnya, lihat Menggunakan tugas Target HTTP dengan token autentikasi.
- Pub/Sub
- Pub/Sub memungkinkan komunikasi asinkron antarlayanan. Anda dapat mengonfigurasi Pub/Sub untuk menyertakan token ID dengan pesan. Untuk mengetahui informasi selengkapnya, lihat Autentikasi untuk langganan push.
- Workflows
- Workflows adalah platform orkestrasi terkelola sepenuhnya yang menjalankan layanan dalam urutan yang Anda tentukan: alur kerja. Anda dapat menentukan alur kerja untuk menyertakan token ID atau token akses saat memanggil layanan lain. Untuk mengetahui informasi selengkapnya, lihat Membuat permintaan yang diautentikasi dari alur kerja.
Membuat token ID dengan meniru identitas akun layanan
Peniruan akun layanan memungkinkan akun utama membuat kredensial berjangka pendek untuk akun layanan tepercaya. Akun utama kemudian dapat menggunakan kredensial ini untuk melakukan autentikasi sebagai akun layanan.
Sebelum akun utama dapat meniru identitas akun layanan, akun utama harus memiliki peran IAM di akun layanan tersebut yang memungkinkan peniruan identitas. Jika akun utama itu sendiri adalah akun layanan lain, akan tampak lebih mudah untuk memberikan izin yang diperlukan secara langsung ke akun layanan tersebut, dan memungkinkannya meniru identitasnya sendiri. Konfigurasi ini, yang dikenal sebagai peniruan identitas diri, menciptakan kerentanan keamanan, karena memungkinkan akun layanan membuat token akses yang dapat diperbarui seterusnya.
Peniruan akun layanan harus selalu melibatkan dua akun utama: akun utama yang mewakili pemanggil, dan akun layanan yang ditiru identitasnya, yang disebut akun layanan yang memiliki hak istimewa.
Untuk membuat token ID dengan meniru akun layanan, gunakan proses umum berikut.
Untuk petunjuk langkah demi langkah, lihat Membuat token ID.
Identifikasi atau buat akun layanan untuk menjadi akun layanan yang memiliki hak istimewa.
-
Identifikasi peran yang diperlukan untuk memanggil layanan target. Berikan peran ini ke akun layanan di layanan target:
-
Untuk
layanan Cloud Run,
berikan peran Cloud Run Invoker (
roles/run.invoker
). -
Untuk
fungsi Cloud Run,
berikan peran Cloud Functions Invoker
(
roles/cloudfunctions.invoker
). - Untuk layanan target lainnya, lihat dokumentasi produk untuk layanan tersebut.
-
Untuk
layanan Cloud Run,
berikan peran Cloud Run Invoker (
Identifikasi akun utama yang akan melakukan peniruan identitas, dan siapkan Kredensial Default Aplikasi (ADC) agar dapat menggunakan kredensial untuk akun utama ini.
Untuk lingkungan pengembangan, akun utama biasanya adalah akun pengguna yang Anda berikan ke ADC dengan menggunakan gcloud CLI. Namun, jika Anda menjalankannya di resource yang terpasang dengan akun layanan, akun layanan yang terpasang adalah akun utama.
Beri akun utama peran Service Account OpenID Connect Identity Token Creator (
roles/iam.serviceAccountOpenIdTokenCreator
).Gunakan IAM Credentials API untuk membuat token ID untuk akun layanan yang diotorisasi.
Membuat token ID generik untuk pengembangan dengan Cloud Run dan fungsi Cloud Run
Anda dapat menggunakan gcloud CLI untuk mendapatkan token ID untuk kredensial pengguna Anda yang dapat digunakan dengan layanan Cloud Run atau fungsi Cloud Run yang pemanggilnya memiliki izin IAM yang diperlukan untuk memanggil. Token ini tidak akan berfungsi untuk aplikasi lain.
Untuk membuat token ID generik, gunakan perintah
gcloud auth print-identity-token
:gcloud auth print-identity-token
Langkah selanjutnya
- Pelajari token ID.
- Gunakan perintah shell untuk mengkueri server metadata Compute Engine.
- Pelajari metode autentikasi lebih lanjut.