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 Cloud Function
- Mengautentikasi pengguna ke aplikasi yang diamankan oleh Identity-Aware Proxy (IAP)
- Membuat permintaan ke API yang di-deploy dengan Gateway API 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 Cloud Functions
- Membuat token ID menggunakan penyedia identitas eksternal
Cloud Run dan Cloud Functions menyediakan cara khusus layanan untuk mendapatkan token ID. Untuk informasi selengkapnya, lihat Autentikasi ke aplikasi yang dihosting di Cloud Run atau Cloud Functions.
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 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 Google API untuk Java.
Go
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 scheduler cron job tingkat perusahaan yang terkelola sepenuhnya. Anda dapat mengonfigurasi Cloud Scheduler untuk menyertakan token ID atau token akses saat layanan lain dipanggil. Untuk mengetahui 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 antara layanan. Anda dapat mengonfigurasi Pub/Sub untuk menyertakan token ID dengan pesan. Untuk informasi selengkapnya, lihat Autentikasi untuk langganan push.
- Workflows
- Alur kerja adalah platform orkestrasi terkelola sepenuhnya yang mengeksekusi layanan dalam urutan yang Anda tentukan: alur kerja. Anda dapat menentukan alur kerja untuk menyertakan token ID atau token akses saat layanan lain memanggil layanan lain. Untuk informasi lebih lanjut, lihat Membuat permintaan terautentikasi 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. Beri akun layanan tersebut peran IAM yang diperlukan, pada layanan target:
- Untuk layanan Cloud Run, berikan peran Cloud Run Invoker (
roles/run.invoker
). - Untuk Cloud Functions, 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 Cloud Functions
Anda dapat menggunakan gcloud CLI guna mendapatkan token ID untuk kredensial pengguna Anda yang dapat digunakan dengan layanan Cloud Run atau Cloud Function yang pemanggilnya memiliki izin IAM yang diperlukan untuk memanggil. Token ini tidak akan berfungsi untuk aplikasi lain.
Untuk membuat token ID generik, gunakan perintah
gloud auth print-identity-token
:gcloud auth print-identity-token
Membuat token ID menggunakan penyedia identitas eksternal
Pembuatan token ID dengan penyedia identitas eksternal akan menggunakan workload identity federation, yang memungkinkan Anda menyiapkan hubungan antara Google Cloud dan penyedia identitas eksternal Anda. Selanjutnya, Anda dapat menggunakan kredensial yang disediakan oleh penyedia identitas eksternal untuk membuat token ID atau token akses yang dapat digunakan di Google Cloud.
Guna membuat token ID untuk kredensial yang disediakan dari penyedia identitas eksternal, ikuti langkah-langkah berikut:
Identifikasi atau buat akun layanan untuk menyediakan peran IAM yang diperlukan untuk memanggil layanan target.
Praktik terbaiknya adalah membuat akun layanan khusus untuk tujuan ini, dan hanya memberinya peran yang diperlukan. Pendekatan ini mengikuti prinsip hak istimewa terendah.
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
Cloud Functions,
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 (
Konfigurasikan workload identity federation untuk penyedia identitas seperti yang dijelaskan dalam Mengonfigurasi workload identity federation.
Ikuti petunjuk di Memberikan izin identitas eksternal untuk meniru identitas akun layanan. Gunakan akun layanan yang Anda siapkan di langkah sebelumnya sebagai akun layanan yang akan ditiru.
Gunakan REST API untuk mendapatkan token berjangka pendek, tetapi untuk langkah terakhir, gunakan metode
generateIdToken
sebagai gantinya, untuk mendapatkan token ID:Bash
ID_TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken \ -H "Content-Type: text/json; charset=utf-8" \ -H "Authorization: Bearer $STS_TOKEN" \ -d @- <<EOF | jq -r .token { "audience": "AUDIENCE" } EOF ) echo $ID_TOKEN
PowerShell
$IdToken = (Invoke-RestMethod ` -Method POST ` -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken" ` -Headers @{ "Authorization" = "Bearer $StsToken" } ` -ContentType "application/json" ` -Body (@{ "audience" = "AUDIENCE" } | ConvertTo-Json)).token Write-Host $IdToken
Ganti kode berikut:
-
SERVICE_ACCOUNT_EMAIL
: alamat email akun layanan -
AUDIENCE
: audiens untuk token, seperti aplikasi atau layanan yang tokennya akan digunakan untuk mengakses
-
Langkah selanjutnya
- Pelajari token ID.
- Dapatkan bantuan untuk memverifikasi token ID.
- Gunakan perintah shell untuk mengkueri server metadata Compute Engine.
- Pelajari autentikasi di Google lebih lanjut.
- Pelajari kasus penggunaan autentikasi.