Bir API Gateway yetkilendiricisi seçme

Geliştiriciler için AWS Güvenliğini Kullanma

Rahul Singh

Technical Product Manager

Kodun çalışmadan önce kontrol edilir

Bir arayan, koduna ulaşmadan önce API Gateway yetkilendiricisinden geçer; reddedilen arayan 401 ile geri döner.

Geçti: istek koduna ulaşır

Kaldı: 401 unauthorized, kodun hiç çalışmaz

Geliştiriciler için AWS Güvenliğini Kullanma

Kontrolü kim yapıyor

Seçebileceğin üç yetkilendirici
  1. IAM auth (AWS_IAM): AWS bir imzayı kontrol eder

Dikey bir yığın: üstte AWS'nin kontrol ettiği, altta senin yaptığın. Yalnızca ilk kart dolu: IAM auth, AWS imzayı kontrol eder.

Geliştiriciler için AWS Güvenliğini Kullanma

Kontrolü kim yapıyor

Seçebileceğin üç yetkilendirici
  1. IAM auth (AWS_IAM): AWS bir imzayı kontrol eder
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS bir token doğrular
    • İmza, iss, aud, exp

Aynı dikey yığın, iki kart dolu: IAM auth (AWS imzayı kontrol eder) ve Cognito yetkilendirici (AWS token doğrular).

Geliştiriciler için AWS Güvenliğini Kullanma

Kontrolü kim yapıyor

Seçebileceğin üç yetkilendirici
  1. IAM auth (AWS_IAM): AWS bir imzayı kontrol eder
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS bir token doğrular
    • İmza, iss, aud, exp
  3. Lambda authorizer: fonksiyonun allow/deny döner
    • Cognito olmayan token'lar için

Üç yetkilendirici, AWS'nin yaptığı kontrolden senin yaptığına doğru: IAM auth (AWS imzayı kontrol eder), Cognito yetkilendirici (AWS token doğrular) ve Lambda yetkilendirici (kontrolü sen yazarsın).

Geliştiriciler için AWS Güvenliğini Kullanma

Kapıyı arayana göre eşleştir

 

Kararı arayan verir

 

  • Dahili servis: AWS kimlik bilgileri zaten var

Üç arayan–yetkilendirici eşleşmesinin ilki: dahili servis → IAM auth.

Geliştiriciler için AWS Güvenliğini Kullanma

Kapıyı arayana göre eşleştir

 

Kararı arayan verir

 

  • Dahili servis: AWS kimlik bilgileri zaten var
  • Uygulama kullanıcısı: yanında bir Cognito token'ı taşır

Üç eşleşmeden ikisi: dahili servis → IAM auth, uygulama kullanıcısı → Cognito yetkilendirici.

Geliştiriciler için AWS Güvenliğini Kullanma

Kapıyı arayana göre eşleştir

 

Kararı arayan verir

 

  • Dahili servis: AWS kimlik bilgileri zaten var
  • Uygulama kullanıcısı: yanında bir Cognito token'ı taşır
  • İş ortağı uygulaması: kendi yetkilendirmesini getirir

Üç arayanın her biri için uygun yetkilendirici: dahili servis → IAM auth, uygulama kullanıcısı → Cognito yetkilendirici, iş ortağı uygulaması → Lambda yetkilendirici.

Geliştiriciler için AWS Güvenliğini Kullanma

API türüne dikkat et

REST API

  • Üç yetkilendirici + kaynak ilkeleri
  • API anahtarları, istemci başına kısıtlama, istek doğrulama, WAF

REST API için bir karşılaştırma kartı: IAM auth, Cognito kullanıcı havuzu yetkilendiricisi, Lambda yetkilendiricisi ve kaynak ilkesi işaretli. Yanındaki HTTP API kartı henüz doldurulmamış.

Geliştiriciler için AWS Güvenliğini Kullanma

API türüne dikkat et

REST API

  • Üç yetkilendirici + kaynak ilkeleri
  • API anahtarları, istemci başına kısıtlama, istek doğrulama, WAF

 

HTTP API

  • JWT yetkilendirici, herhangi bir OIDC issuer
  • Kaynak ilkesi yok; daha ucuz ve hızlı

İki kart: Hangi API türünün hangi yetkilendiricileri desteklediği. REST API kaynak ilkeleri ekler; HTTP API Cognito yerine JWT yetkilendirici kullanır ve kaynak ilkeleri yoktur.

Geliştiriciler için AWS Güvenliğini Kullanma

Yetkilendirici hatırlar

Zaman kazandırmak için önbelleğe alınır

  • İlk çağrı: yetkilendirici çalışır
  • Sonraki çağrılar: önbellekteki yanıt okunur

İlk çağrı yetkilendiriciyi çalıştırır ve bir allow'u, yaşam süresi olan bir önbelleğe yazar; sonraki çağrı, yetkilendirici yeniden çalışmadan bu allow'u okur.

Geliştiriciler için AWS Güvenliğini Kullanma

Yetkilendirici hatırlar

Zaman kazandırmak için önbelleğe alınır

  • İlk çağrı: yetkilendirici çalışır
  • Sonraki çağrılar: önbellekteki yanıt okunur

 

Cache TTL

  • authorizerResultTtlInSeconds: varsayılan 300s, en çok 3600s
  • Sıfır, önbelleği kapatır

İlk çağrı yetkilendiriciyi çalıştırır ve bir allow'u, yaşam süresi olan bir önbelleğe yazar; sonraki çağrı, yetkilendirici yeniden çalışmadan bu allow'u okur.

Geliştiriciler için AWS Güvenliğini Kullanma

Önbellekteki allow, izinden uzun yaşayabilir

İki şeritli bir zaman çizelgesi. İzin şeridi, iptal noktasında geçerliden iptale döner; alttaki önbellekteki allow şeridi, o noktadan sonra da allow gösterir; iptal sonrası pencere taralı.

İptal ettiğin anda

  • İzin: anında iptal
  • Önbellekteki allow: vermeye devam eder
Geliştiriciler için AWS Güvenliğini Kullanma

Önbellekteki allow, izinden uzun yaşayabilir

Aynı iki şeritli zaman çizelgesi: iptal ile TTL bitişi arasındaki pencere taralı ve hâlâ izinli; izin iptal ama önbellekteki allow erişim vermeyi sürdürür.

Aradaki pencere

  • İzin gitti, önbelleğe haber yok
  • Erişim TTL bitene dek sürer
Geliştiriciler için AWS Güvenliğini Kullanma

Önbellekteki allow, izinden uzun yaşayabilir

Aynı zaman çizelgesinde, taralı pencere boyunca bir ok: daha kısa TTL, bitişi öne çeker ve iptal edilmiş iznin hâlâ erişim verdiği süreyi kısaltır.

Bu pencereyi kontrol et

  • Hızlı iptal gerekirse kısa TTL
  • En hassas rotalarda TTL 0
Geliştiriciler için AWS Güvenliğini Kullanma

Bir arayan ön kapıyı atlar

Hesabında üçüncü bir taraf

  • Senin oluşturduğun bir rolü üstlenir
  • Rol ARN'ini verirsin

Bir izleme satıcısı, üstte iki müşteri kutusu ile alttaki rolünün arasında. Senin kutun rol ARN'ini satıcıya verir; satıcı rolünü üstlenir. İkinci müşteri kutusu gri ve hikâyeye henüz dahil değil.

Geliştiriciler için AWS Güvenliğini Kullanma

Bir arayan ön kapıyı atlar

Hesabında üçüncü bir taraf

  • Senin oluşturduğun bir rolü üstlenir
  • Rol ARN'ini verirsin

Rol ARN'i gizli değildir

Karışık yardımcı (confused deputy) sorunu

İkinci müşteri kutusu şimdi kırmızı aktif ve rol ARN'ini kendiymiş gibi verir. Satıcıdan rolüne iki ok iner; müşteri başına bir çağrı, ayırt edilemez.

Geliştiriciler için AWS Güvenliğini Kullanma

Bir arayan ön kapıyı atlar

Hesabında üçüncü bir taraf

  • Senin oluşturduğun bir rolü üstlenir
  • Rol ARN'ini verirsin

Rol ARN'i gizli değildir

Karışık yardımcı (confused deputy) sorunu

Çözüm: sts:ExternalId

  • Satıcı, müşteri başına bir tane üretir
  • Güven ilkende eşleşme zorunludur

Rolün artık external ID'nin 12345'e eşit olmasını şart koşar. 12345 taşıyan çağrı role ulaşır; 99999 taşıyan çağrı kırmızı çarpıyla durdurulur.

Geliştiriciler için AWS Güvenliğini Kullanma

Hadi pratik yapalım!

Geliştiriciler için AWS Güvenliğini Kullanma

Preparing Video For Download...