Memilih authorizer API Gateway

Menggunakan Keamanan AWS untuk Developer

Rahul Singh

Technical Product Manager

Diperiksa sebelum kode Anda berjalan

Penelepon melewati authorizer API Gateway sebelum mencapai kode Anda, dan penelepon yang ditolak mendapat 401.

Lolos: permintaan mencapai kode Anda

Gagal: 401 unauthorized, kode Anda tidak berjalan

Menggunakan Keamanan AWS untuk Developer

Siapa yang memeriksa

Tiga authorizer untuk dipilih
  1. IAM auth (AWS_IAM): AWS memeriksa tanda tangan

Tumpukan vertikal pada sumbu dari AWS yang melakukan pemeriksaan hingga Anda yang melakukannya. Hanya kartu pertama yang terisi: IAM auth, di mana AWS memeriksa tanda tangan.

Menggunakan Keamanan AWS untuk Developer

Siapa yang memeriksa

Tiga authorizer untuk dipilih
  1. IAM auth (AWS_IAM): AWS memeriksa tanda tangan
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS memverifikasi token
    • Tanda tangan, iss, aud, exp

Tumpukan vertikal yang sama dengan dua kartu terisi: IAM auth, di mana AWS memeriksa tanda tangan, dan Cognito authorizer, di mana AWS memverifikasi token.

Menggunakan Keamanan AWS untuk Developer

Siapa yang memeriksa

Tiga authorizer untuk dipilih
  1. IAM auth (AWS_IAM): AWS memeriksa tanda tangan
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS memverifikasi token
    • Tanda tangan, iss, aud, exp
  3. Lambda authorizer: fungsi Anda mengembalikan allow atau deny
    • Untuk token yang bukan Cognito

Tiga authorizer diurutkan dari AWS yang memeriksa hingga Anda yang memeriksa: IAM auth di mana AWS memeriksa tanda tangan, Cognito authorizer di mana AWS memverifikasi token, dan Lambda authorizer di mana Anda menulis pemeriksaannya.

Menggunakan Keamanan AWS untuk Developer

Cocokkan pintu dengan penelepon

 

Penelepon yang menentukan

 

  • Layanan internal: sudah memiliki kredensial AWS

Baris pertama dari tiga baris pemetaan penelepon-ke-authorizer: layanan internal dipetakan ke IAM auth.

Menggunakan Keamanan AWS untuk Developer

Cocokkan pintu dengan penelepon

 

Penelepon yang menentukan

 

  • Layanan internal: sudah memiliki kredensial AWS
  • Pengguna aplikasi: membawa token Cognito

Dua dari tiga baris pemetaan penelepon-ke-authorizer: layanan internal ke IAM auth, dan pengguna aplikasi ke Cognito authorizer.

Menggunakan Keamanan AWS untuk Developer

Cocokkan pintu dengan penelepon

 

Penelepon yang menentukan

 

  • Layanan internal: sudah memiliki kredensial AWS
  • Pengguna aplikasi: membawa token Cognito
  • Aplikasi mitra: memiliki logika otorisasi sendiri

Tiga penelepon dipetakan ke authorizer yang dibutuhkan masing-masing: layanan internal ke IAM auth, pengguna aplikasi ke Cognito authorizer, dan aplikasi mitra ke Lambda authorizer.

Menggunakan Keamanan AWS untuk Developer

Perhatikan tipe API

REST API

  • Ketiga authorizer, plus kebijakan sumber daya
  • Kunci API, throttling per klien, validasi permintaan, WAF

Kartu perbandingan untuk REST API, mencentang IAM auth, Cognito user pool authorizer, Lambda authorizer, dan resource policy. Kartu HTTP API di sebelahnya belum diisi.

Menggunakan Keamanan AWS untuk Developer

Perhatikan tipe API

REST API

  • Ketiga authorizer, plus kebijakan sumber daya
  • Kunci API, throttling per klien, validasi permintaan, WAF

 

HTTP API

  • JWT authorizer, issuer OIDC apa pun
  • Tanpa kebijakan sumber daya; lebih murah dan cepat

Dua kartu membandingkan authorizer yang didukung tiap tipe API: REST API menambahkan resource policy, sedangkan HTTP API menukar Cognito authorizer dengan JWT authorizer dan tidak memiliki resource policy.

Menggunakan Keamanan AWS untuk Developer

Authorizer mengingat

Di-cache untuk menghemat waktu

  • Panggilan pertama: authorizer berjalan
  • Panggilan berikutnya: baca jawaban dari cache

Panggilan pertama menjalankan authorizer dan menulis allow ke cache dengan time to live, dan panggilan berikutnya membaca allow dari cache tanpa menjalankan authorizer lagi.

Menggunakan Keamanan AWS untuk Developer

Authorizer mengingat

Di-cache untuk menghemat waktu

  • Panggilan pertama: authorizer berjalan
  • Panggilan berikutnya: baca jawaban dari cache

 

TTL cache

  • authorizerResultTtlInSeconds: bawaan 300 dtk, maks 3600 dtk
  • Nol menonaktifkan cache

Panggilan pertama menjalankan authorizer dan menulis allow ke cache dengan time to live, dan panggilan berikutnya membaca allow dari cache tanpa menjalankan authorizer lagi.

Menggunakan Keamanan AWS untuk Developer

Cached allow bisa lebih lama dari izinnya

Garis waktu dua lajur. Lajur izin berubah dari valid menjadi dicabut di titik pencabutan, sementara lajur cached allow di bawahnya masih menunjukkan allow melewati titik itu, dengan jendela setelah pencabutan diarsir.

Saat Anda mencabut

  • Izin: langsung dicabut
  • Cached allow: masih memberi akses
Menggunakan Keamanan AWS untuk Developer

Cached allow bisa lebih lama dari izinnya

Garis waktu dua lajur yang sama dengan jendela antara titik pencabutan dan kedaluwarsa TTL diarsir dan ditandai masih diizinkan, di mana izin dicabut tetapi cached allow tetap memberi akses.

Jendela di antaranya

  • Izin hilang, cache tidak tahu
  • Akses bertahan hingga TTL berakhir
Menggunakan Keamanan AWS untuk Developer

Cached allow bisa lebih lama dari izinnya

Garis waktu dua lajur dengan panah melintasi jendela berarsir menunjukkan bahwa TTL lebih pendek memajukan kedaluwarsa dan memperkecil rentang saat izin dicabut masih memberi akses.

Kendalikan jendela itu

  • TTL pendek saat pencabutan harus cepat
  • TTL 0 pada rute paling sensitif
Menggunakan Keamanan AWS untuk Developer

Satu penelepon melewati pintu depan

Pihak ketiga di dalam akun Anda

  • Mengasumsikan role yang Anda buat
  • Anda menyerahkan role ARN

Vendor pemantauan berada di antara dua kotak pelanggan di atas dan role Anda di bawah. Kotak Anda menyerahkan role ARN ke vendor, yang mengasumsikan role Anda. Kotak pelanggan kedua diarsir abu-abu dan belum masuk cerita.

Menggunakan Keamanan AWS untuk Developer

Satu penelepon melewati pintu depan

Pihak ketiga di dalam akun Anda

  • Mengasumsikan role yang Anda buat
  • Anda menyerahkan role ARN

Role ARN bukan rahasia

Masalah confused deputy

Kotak pelanggan kedua kini aktif berwarna merah dan menyerahkan role ARN Anda seolah-olah miliknya. Dua panah kini mengarah dari vendor pemantauan ke role Anda, satu panggilan per pelanggan, dan tidak ada yang membedakannya.

Menggunakan Keamanan AWS untuk Developer

Satu penelepon melewati pintu depan

Pihak ketiga di dalam akun Anda

  • Mengasumsikan role yang Anda buat
  • Anda menyerahkan role ARN

Role ARN bukan rahasia

Masalah confused deputy

Perbaikannya: sts:ExternalId

  • Vendor membuat satu per pelanggan
  • Kebijakan tepercaya Anda mensyaratkan kecocokan

Role Anda kini mensyaratkan external ID sama dengan 12345. Panggilan yang membawa 12345 mencapai role, dan panggilan yang membawa 99999 dihentikan oleh tanda silang merah sebelum tiba.

Menggunakan Keamanan AWS untuk Developer

Ayo berlatih!

Menggunakan Keamanan AWS untuk Developer

Preparing Video For Download...