Halaman ini menjelaskan cara mengautentikasi saat Anda membuat permintaan REST ke Google API.
Untuk mengetahui informasi tentang cara melakukan autentikasi saat Anda menggunakan library klien Google, lihat Mengautentikasi menggunakan library klien.
Sebelum memulai
Untuk menjalankan contoh di halaman ini, selesaikan langkah-langkah berikut:
-
Aktifkan API Cloud Resource Manager and Identity and Access Management (IAM):
gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Langkah ini tidak diperlukan untuk menggunakan server metadata.
Jenis kredensial
Anda dapat menggunakan jenis kredensial berikut untuk mengautentikasi panggilan REST:
Kredensial gcloud CLI Anda.
Pendekatan ini adalah cara termudah dan paling aman untuk memberikan kredensial ke metode REST di lingkungan pengembangan lokal. Jika akun pengguna Anda memiliki izin Pengelolaan Akses dan Identitas (IAM) yang diperlukan untuk metode yang ingin Anda panggil, ini adalah pendekatan yang disarankan.
Kredensial gcloud Anda tidak sama dengan kredensial yang Anda berikan ke ADC menggunakan gcloud CLI. Untuk mengetahui informasi lebih lanjut, baca artikel kredensial gcloud CLI dan kredensial ADC.
Kredensial yang diberikan ke Kredensial Default Aplikasi (ADC).
Metode ini lebih disukai untuk mengautentikasi panggilan REST dalam lingkungan produksi, karena ADC menemukan kredensial dari resource tempat kode Anda dijalankan (seperti mesin virtual Compute Engine). Anda juga dapat menggunakan ADC untuk mengautentikasi di lingkungan pengembangan lokal. Dalam skenario ini, gcloud CLI membuat file yang berisi kredensial Anda di sistem file lokal Anda.
Kredensial yang diberikan dengan meniru identitas akun layanan.
Metode ini memerlukan lebih banyak penyiapan. Jika Anda ingin menggunakan kredensial yang ada untuk mendapatkan kredensial berjangka pendek untuk akun layanan lain, seperti menguji dengan akun layanan secara lokal atau meminta hak istimewa sementara yang ditingkatkan, gunakan pendekatan ini.
Kredensial yang ditampilkan oleh server metadata.
Metode ini hanya berfungsi di lingkungan yang memiliki akses ke server metadata. Kredensial yang ditampilkan oleh server metadata sama dengan kredensial yang akan ditemukan oleh Kredensial Default Aplikasi menggunakan akun layanan yang disertakan, tetapi Anda secara eksplisit meminta token akses dari server metadata dan kemudian memberikan permintaan REST. Meminta kredensial server metadata memerlukan permintaan HTTP GET; metode ini tidak bergantung pada Google Cloud CLI.
Kredensial gcloud CLI
Untuk menjalankan contoh di bawah ini, Anda memerlukan izin resourcemanager.projects.get
pada project. Izin resourcemanager.projects.get
disertakan dalam
berbagai peran—misalnya, peran Browser (roles/browser
).
Gunakan perintah
gcloud auth print-access-token
untuk memasukkan token akses yang dibuat dari kredensial pengguna Anda.Contoh berikut mendapatkan detail untuk project yang ditentukan. Anda dapat menggunakan pola yang sama untuk setiap permintaan REST.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_ID
: Project ID atau nama project Google Cloud Anda.
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Jalankan perintah berikut:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"PowerShell
Jalankan perintah berikut:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID" | Select-Object -Expand ContentDetail project Anda akan ditampilkan.
Untuk API yang memerlukan project kuota, Anda harus menetapkannya secara eksplisit untuk permintaan tersebut. Untuk mengetahui informasi lebih lanjut, baca bagian Menetapkan project kuota dengan permintaan REST di halaman ini.
Kredensial Default Aplikasi
Untuk menjalankan contoh di bawah ini, akun utama yang terkait dengan kredensial yang Anda berikan ke ADC memerlukan izin resourcemanager.projects.get
pada project. Izin resourcemanager.projects.get
disertakan dalam berbagai
peran—misalnya, peran Browser (roles/browser
).
-
Jika menjalankan resource komputasi Google Cloud, Anda tidak boleh memberikan kredensial pengguna ke ADC. Sebagai gantinya, gunakan akun layanan terlampir untuk memberikan kredensial. Untuk mengetahui informasi selengkapnya, lihat Layanan Google Cloud yang mendukung penyertaan akun layanan.
Gunakan perintah
gcloud auth application-default print-access-token
untuk memasukkan token akses yang ditampilkan oleh ADC ke dalam permintaan REST Anda.Contoh berikut mendapatkan detail untuk project yang ditentukan. Anda dapat menggunakan pola yang sama untuk setiap permintaan REST.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_ID
: Project ID atau nama project Google Cloud Anda.
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Jalankan perintah berikut:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"PowerShell
Jalankan perintah berikut:
$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID" | Select-Object -Expand ContentDetail project Anda akan ditampilkan.
Jika permintaan Anda menampilkan pesan error tentang kredensial pengguna akhir yang tidak didukung oleh API ini, lihat Menetapkan project kuota dengan permintaan REST di halaman ini.
Akun layanan yang ditiru
Untuk informasi selengkapnya tentang peniruan identitas akun layanan, lihat Menggunakan peniruan akun layanan.
Tinjau izin yang diperlukan.
Akun pengguna Anda harus memiliki izin
iam.serviceAccounts.getAccessToken
untuk akun layanan yang ditiru identitasnya (juga disebut akun layanan yang mendukung hak istimewa). Iziniam.serviceAccounts.getAccessToken
disertakan dalam peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator
). Anda memerlukan izin ini meskipun memiliki peran Pemilik (roles/owner
) di project. Untuk informasi selengkapnya, lihat Menetapkan izin yang diperlukan.Untuk contoh di bawah, akun layanan yang Anda tiru harus memiliki izin
resourcemanager.projects.get
pada project. Izinresourcemanager.projects.get
disertakan dalam berbagai peran—misalnya, peran Browser (roles/browser
).
Identifikasi atau buat akun layanan yang menggunakan hak istimewa, yaitu akun layanan yang akan Anda tiru.
Akun layanan yang memiliki hak istimewa harus memiliki izin yang diperlukan untuk melakukan panggilan metode API.
Gunakan perintah
gcloud auth print-access-token
dengan flag--impersonate-service-account
untuk menyisipkan token akses bagi tujuan ke dalam akun layanan permintaan REST.Contoh berikut mendapatkan detail untuk project yang ditentukan. Anda dapat menggunakan pola yang sama untuk setiap permintaan REST.
Untuk menjalankan contoh ini, akun layanan yang Anda tiru memerlukan izin
resourcemanager.projects.get
. Izinresourcemanager.projects.get
disertakan dalam berbagai peran—misalnya, peran Browser (roles/browser
).Lakukan penggantian berikut:
PRIV_SA
: Alamat email akun layanan yang memiliki hak istimewa. Contoh,my-sa@my-project.iam.gserviceaccount.com
.PROJECT_ID
: Project ID atau nama project Google Cloud Anda.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token --impersonate-service-account=PRIV_SA)" \ "https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"
Server metadata
Untuk mendapatkan token akses dari server metadata, Anda harus membuat panggilan REST menggunakan salah satu layanan yang memiliki akses ke server metadata:
- Compute Engine
- Lingkungan standar App Engine
- Lingkungan fleksibel App Engine
- Cloud Functions
- Cloud Run
- Google Kubernetes Engine
Anda dapat menggunakan alat command line seperti curl
untuk mendapatkan token akses, lalu menyisipkannya ke dalam permintaan REST.
Buat kueri token akses ke server metadata:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google"
Permintaan ini menampilkan respons yang mirip dengan contoh berikut:
{ "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAi85nHq39HE3C2LTrCARA", "expires_in":3599, "token_type":"Bearer" }
Masukkan token akses ke dalam permintaan REST Anda, dengan melakukan penggantian berikut:
ACCESS_TOKEN
: Token akses yang ditampilkan pada langkah sebelumnya.PROJECT_ID
: Project ID atau nama project Google Cloud Anda.
curl -X GET \ -H "Authorization: Bearer ACCESS_TOKEN" \ "https://cloudresourcemanager.googleapis.com/v3/projects/PROJECT_ID"
Menetapkan project kuota dengan permintaan REST
Untuk memanggil beberapa API dengan kredensial pengguna, Anda juga harus menetapkan project yang ditagih untuk penggunaan Anda dan digunakan untuk melacak kuota. Jika panggilan API Anda menampilkan pesan error yang menyatakan bahwa kredensial pengguna tidak didukung, atau bahwa project kuota tidak ditetapkan, Anda harus menetapkan project kuota untuk permintaan tersebut secara eksplisit.
Untuk menetapkan project kuota, sertakan header x-goog-user-project
dalam permintaan Anda.
Untuk informasi selengkapnya tentang kapan Anda mungkin mengalami masalah ini, lihat Kredensial pengguna tidak berfungsi.
Anda harus memiliki serviceusage.services.use
izin IAM
agar project dapat menetapkannya sebagai project penagihan. Izin serviceusage.services.use
disertakan dalam peran IAM Service Usage Consumer. Jika Anda tidak memiliki izin serviceusage.services.use
untuk project apa pun, hubungi administrator keamanan atau pemilik project
yang dapat memberi Anda peran Service Usage Consumer dalam project tersebut.
Contoh berikut menggunakan Cloud Translation API untuk menerjemahkan kata "hello" ke bahasa Spanyol. Cloud Translation API adalah API yang memerlukan project kuota untuk ditentukan. Untuk menjalankan contoh, buat
file bernama request.json
dengan konten isi permintaan.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: ID atau nama project Google Cloud untuk digunakan sebagai project penagihan.
Isi JSON permintaan:
{ "q": "hello", "source": "en", "target": "es" }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
,
lalu jalankan perintah berikut:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://translation.googleapis.com/language/translate/v2"
PowerShell
Simpan isi permintaan dalam file bernama request.json
,
lalu jalankan perintah berikut:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://translation.googleapis.com/language/translate/v2" | Select-Object -Expand Content
Permintaan terjemahan berhasil. Anda dapat mencoba perintah tanpa header x-goog-user-project
untuk melihat apa yang terjadi jika project penagihan tidak ditentukan.
Langkah selanjutnya
- Lihat ringkasan autentikasi di Google.
- Pelajari cara mengautentikasi dengan library klien.
- Memahami kredensial gcloud CLI dan kredensial ADC.
- Jelajahi data yang tersimpan di server metadata.