Halaman ini berlaku untuk Apigee, tetapi tidak untuk Apigee Hybrid.
Apigee mendukung autentikasi dan otorisasi berbasis IAM untuk proxy API. Dengan solusi ini, akses untuk memanggil API didasarkan pada beberapa faktor, termasuk apakah alur permintaan menyertakan kebijakan VerifyIAM dan apakah konsumen API memiliki peran atau izin Google Cloud IAM yang diperlukan untuk memanggil Apigee API. Otorisasi dapat diberikan untuk prinsipal Google Cloud, dan tidak terbatas pada pengguna perorangan.
Menggunakan kontrol akses berbasis IAM
Bagian ini menjelaskan proses menyeluruh untuk menyiapkan autentikasi dan otorisasi berbasis IAM, cara permintaan dievaluasi setelah akses disiapkan, dan cara mencabut akses untuk konsumen API yang sebelumnya memiliki akses.
Menambahkan pengelolaan akses
Untuk menyiapkan pengelolaan akses bagi proxy API:
- Tambahkan kebijakan VerifyIAM ke proxy API Apigee sebagai bagian dari alur permintaan.
- Admin Cloud untuk project Apigee:
- Memberikan
peran IAM
deploymentInvoker
(atau peran kustom dengan izin IAMapigee.deployments.invoke
) ke akun utama Google Cloud konsumen API di tingkat project. Tindakan ini memberi konsumen API akses untuk memanggil semua API yang dihosting di organisasi Apigee terkait.
atau - Menggunakan tindakan
SetIamPolicy
untuk memberikan peran atau izin ke prinsip Google Cloud konsumen API pada deployment tertentu atau secara iteratif di beberapa deployment. Gunakan operasi daftar pada resource deployment untuk melihat semua deployment dalam lingkungan, termasuk proxy API dan alur bersama. Nama deployment adalah nama proxy API atau alur bersama.
- Memberikan
peran IAM
- Arahkan konsumen API untuk
membuat token akses,
yang akan diteruskan di dalam permintaan Apigee API untuk pemeriksaan izin. Token yang dihasilkan harus memiliki cakupan autentikasi
https://www.googleapis.com/auth/cloud-platform
.
Operasi Admin
Bagian ini mencantumkan tindakan yang dilakukan admin API (produser API) saat mengelola izin berbasis IAM.
Dokumentasi untuk operasi berbasis API yang digunakan saat mengelola akses berbasis IAM dapat ditemukan di dokumentasi referensi API
organizations.environments
dan
organizations.environments.deployments, dan menyertakan operasi SetIamPolicy
,
GetIamPolicy
, TestIamPermissions
, dan
GetDeployment
.
Tabel ini memetakan operasi ke izin yang diperlukan:
Operasi admin | Tindakan | Izin IAM diperlukan | Resource IAM tempat izin diperlukan* |
---|---|---|---|
GetDeployment | Mengambil informasi untuk deployment di lingkungan Apigee | apigee.deployments.get | Project Google Cloud atau lingkungan Apigee |
ListDeployments | Mencantumkan deployment di lingkungan Apigee | apigee.deployments.list | Project atau Lingkungan Apigee |
SetIamPolicy | Menetapkan akses pemanggilan untuk konsumen API di deployment API tertentu | apigee.deployments.setIamPolicy | Project Google Cloud atau lingkungan Apigee |
GetIamPolicy | Mengambil kumpulan setelan akses pemanggilan untuk deployment API | apigee.deployments.getIamPolicy | Project Google Cloud atau lingkungan Apigee |
TestIamPermissions | Periksa apakah pengguna yang memanggil API ini memiliki izin yang disebutkan dalam payload | Tidak perlu izin IAM | T/A |
Pemeriksaan akses runtime
Saat konsumen API mencoba mengakses API dengan kontrol akses berbasis IAM, pemeriksaan akan dilakukan untuk melihat apakah mereka memiliki token akses yang diperlukan dan peran atau izin yang sesuai di tingkat project atau deployment. Jika ya, mereka diizinkan untuk melanjutkan akses ke proxy. Jika tidak, akun tersebut akan diblokir.
Hapus akses
Untuk menghapus akses di tingkat project: Untuk menghapus akses bagi konsumen API yang dikelola di tingkat project, admin Cloud untuk project Apigee mencabut peran IAM deploymentInvoker
(atau peran kustom dengan izin IAM apigee.deployments.invoke
) dari akun utama Google Cloud konsumen API untuk project Google Cloud.
Jika akses diberikan untuk setiap deployment menggunakan setIamPolicy
,
hapus peran atau izin dari deployment menggunakan operasi setIamPolicy
lain.
Karakteristik dan batasan kontrol akses berbasis IAM
Perhatikan karakteristik dan batasan berikut saat menggunakan autentikasi dan otorisasi berbasis IAM:
- Biasanya, eksekusi kebijakan dengan VerifyIAM memerlukan waktu sekitar 10 milidetik. Namun,
beberapa panggilan mungkin mengalami latensi penyelesaian sekitar 50 md. Misalnya, di
wilayah
asia-east2
secara khusus, latensi rata-rata dapat meningkat hingga 50 md, dan beberapa panggilan dapat memerlukan waktu sekitar 100 md untuk diselesaikan.
Perhatikan bahwa angka latensi ini tidak dijamin. - Penyertaan kebijakan VerifyIAM untuk proxy hanya merupakan pemeriksaan terverifikasi/tidak terverifikasi; peran dan izin khusus konsumen API tidak dipertimbangkan dalam proses selanjutnya dalam alur permintaan atau respons.
- Karena pemeriksaan otorisasi hanya dilakukan pada saat eksekusi kebijakan VerifyIAM, VerifyIAM harus menjadi kebijakan pertama dalam alur permintaan, hanya setelah kebijakan pengelolaan traffic.
- Jika validasi izin berhasil atau produsen API telah menandai kebijakan VerifyIAM untuk melanjutkan saat terjadi error, alur permintaan akan terus mengeksekusi kebijakan lain, jika ada, yang pada akhirnya akan menjangkau server target. Jika pemeriksaan izin gagal dan produsen API belum menandai kebijakan untuk melanjutkan saat terjadi error, pengguna akan menerima error.
- Menambahkan akses pemanggilan (
apigee.deployments.invoke
) di tingkat lingkungan tidak menyampaikan akses pemanggilan di semua deployment API dalam lingkungan. - Kondisi IAM tidak didukung di resource deployment, dan tidak dapat digunakan untuk mengontrol akses pemanggilan. Lihat Menambahkan Kondisi IAM Apigee ke kebijakan untuk mengetahui informasi selengkapnya.
- Kontrol akses berbasis IAM mendukung maksimum 1.500 binding peran dalam satu kebijakan dan batasan lainnya. Lihat Kuota dan batas IAM.
- Kontrol akses berbasis IAM tunduk pada penundaan propagasi IAM.
- Mencoba mengelola operasi
apigee.deployments
lainnya, sepertiapigee.deployments.delete
melalui setIAMPolicy tingkat deployment, tidak akan efektif, tetapi juga tidak akan menampilkan error. Hanyaapigee.deployements.invoke
yang efektif. - Akses pada deployment akan dihapus saat proxy yang sesuai tidak di-deploy dari lingkungan atau dihapus; akses harus ditambahkan kembali saat deployment ulang.
- Autentikasi dan otorisasi berbasis IAM saat ini tidak tersedia dalam mode campuran.
Contoh
Bagian ini memberikan contoh untuk memberikan dan mencabut akses berbasis IAM ke API. Semua contoh ini mengasumsikan bahwa VerifyIAM telah ditambahkan ke proxy API yang sesuai.
Dalam contoh ini, gunakan Konsol Cloud atau gcloud (ditampilkan) untuk
mengelola peran atau izin
di akun utama Google Cloud konsumen API. $Project
dalam contoh adalah project Google Cloud.
Memberikan dan mencabut akses pengguna untuk memanggil semua API di organisasi Apigee
Untuk menambahkan akses, tambahkan peran deploymentInvoker
:
gcloud projects add-iam-policy-binding {$Project} --member={$user} --role='roles/apigee.deploymentInvoker'
Untuk mencabut akses, hapus peran deploymentInvoker
:
gcloud projects remove-iam-policy-binding {$Project} --member={$user} --role='roles/apigee.deploymentInvoker'
Memberikan dan mencabut akses pengguna ke deployment tertentu dalam lingkungan
Untuk menambahkan peran pemanggil bagi pengguna ke deployment tertentu:
curl 'https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/deployments/{api}:setIamPolicy' \ --header 'Authorization: Bearer $TOKEN ' \ --header 'Content-Type: application/json' \ --data '{"policy":{"bindings":[{"members":["user:$user"],"role":"roles/apigee.deploymentInvoker"}]}}'
Respons berhasil akan terlihat seperti ini:
{ "version": 1, "etag": "BwYT8i40Vwo=", "bindings": [ { "role": "roles/apigee.deploymentInvoker", "members": [ "user:$user" ] } ] }
Untuk mengonfirmasi bahwa objek kebijakan yang telah Anda tambahkan dipertahankan dengan benar (opsional):
curl 'https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/deployments/{api}:getIamPolicy' \ --header 'Authorization: Bearer $TOKEN'
Anda akan melihat respons berhasil seperti yang ditampilkan di atas.
Agar pengguna dapat memverifikasi apakah mereka dapat mengakses deployment yang ditentukan (apakah izin apigee.deployments.invoke
ditetapkan untuk pengguna yang ditentukan dalam deployment yang ditentukan), instruksikan pengguna untuk mengirimkan permintaan ini menggunakan token akses yang mereka buat sebelumnya:
curl 'https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/deployments/{api}:testIamPermissions' \ --header 'Authorization: Bearer $TOKEN' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --data '{"permissions":["apigee.deployments.invoke"]}'
Respons harus menyertakan izin apigee.deployments.invoke
untuk pengguna.
Untuk mencabut akses pada deployment tertentu, hapus peran deploymentInvoker
. Pertama,
dapatkan objek kebijakan yang saat ini dikaitkan dengan deployment:
curl 'https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/deployments/{api}:getIamPolicy' \ --header 'Authorization: Bearer $TOKEN'
Respons berhasil akan terlihat seperti berikut. Perhatikan bahwa Anda mungkin juga melihat binding lainnya.
{ "version": 1, "etag": "BwYT8i40Vwo=", "bindings": [ { "role": "roles/apigee.deploymentInvoker", "members": [ "user:$user" ] } ] }
Untuk menghapus binding:
curl 'https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/deployments/{api}:setIamPolicy' \ --header 'Authorization: Bearer $TOKEN' \ --header 'Content-Type: application/json' \ --data '{}'
Perhatikan bahwa memberikan payload kosong akan menghapus akses untuk semua pengguna, tetapi sesuai dalam contoh ini karena kita hanya memiliki satu pengguna dengan akses. Saat menghapus akses pengguna dalam situasi saat akses harus dilanjutkan untuk pengguna lain, tentukan pengguna yang harus terus memiliki akses, dalam payload, seperti yang Anda lakukan saat menetapkan akses awal untuk pengguna tersebut.
Untuk memverifikasi bahwa binding telah dihapus, pastikan izin apigee.deployments.invoke
tidak ada untuk pengguna di deployment:
curl 'https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/deployments/{api}:testIamPermissions' \ --header 'Authorization: Bearer $USER_TOKEN' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --data '{"permissions":["apigee.deployments.invoke"]}'
Tindakan ini akan menampilkan output kosong jika tidak ada pengguna yang memiliki izin.