Ringkasan autentikasi API berbasis IAM

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:

  1. Tambahkan kebijakan VerifyIAM ke proxy API Apigee sebagai bagian dari alur permintaan.
  2. Admin Cloud untuk project Apigee:
    1. Memberikan peran IAM deploymentInvoker (atau peran kustom dengan izin IAM apigee.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

    2. 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.
  3. 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
* Project Google Cloud adalah project yang digunakan untuk menyediakan Apigee. Izin tingkat lingkungan Apigee ditetapkan di lingkungan menggunakan setIAMPolicy.

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, seperti apigee.deployments.delete melalui setIAMPolicy tingkat deployment, tidak akan efektif, tetapi juga tidak akan menampilkan error. Hanya apigee.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.