Amazon Cognito Derinlemesine: Temel Authentication'ın Ötesinde
Amazon Cognito'nun gelişmiş özellikleri üzerine kapsamlı teknik kılavuz: özel authentication akışları, federation pattern'leri, multi-tenancy mimarileri, migration stratejileri ve production-grade güvenlik implementasyonu.
Özet
Amazon Cognito, uygulamalar için yönetilen authentication ve authorization sağlıyor, ancak production sistemleri temel sign-up ve sign-in akışlarından fazlasını gerektiriyor. Bu kılavuz, mid-to-senior developer'ların ölçeklenebilir, güvenli authentication sistemleri oluşturmak için ihtiyaç duydukları gelişmiş Cognito pattern'lerini inceliyor: multi-factor workflow'lar için özel Lambda trigger'ları, multi-tenant token customization için Pre Token Generation, enterprise identity provider'ları ile SAML/OIDC federation, caching stratejileriyle API Gateway entegrasyonu ve Auth0 veya özel sistemlerden sıfır downtime migration.
Cognito ile farklı projelerde çalışmak, asıl zorlukların tenant izolasyonu, federation karmaşıklığı ve MFA lock-in ve cross-region replication eksikliği gibi kısıtlamaları aşmada ortaya çıktığını öğretti. Bu kılavuz, çalışan CDK kodu, gerçekçi performance metrikleri ve ölçekte neyin işe yaradığına dair öğrenilmiş derslerle battle-test edilmiş pattern'ler sunuyor.
Mimariyi Anlamak
User Pools vs Identity Pools
User Pools ve Identity Pools arasındaki fark başlangıçta birçok developer'ı karıştırıyor. Temelde farklı amaçlara hizmet ediyorlar:
User Pools authentication'ı yönetiyor - kullanıcıların kim olduğunu doğruluyor. User directory'leri, credential'ları, MFA'yı, password policy'lerini ve OAuth flow'larını yönetiyorlar. Kullanıcılar sign-in olduğunda JWT token'ları (ID token, access token, refresh token) alıyorlar.
Identity Pools authorization'ı yönetiyor - client uygulamalarından S3, DynamoDB veya SQS gibi servislere doğrudan erişim için geçici AWS credential'ları sağlıyor. Authentication token'larını (User Pools veya external provider'lardan) AWS credential'larına exchange ediyorlar.
Her pattern ne zaman kullanılır:
- Sadece User Pool: API Gateway veya backend servislerini çağıran frontend
- Sadece Identity Pool: AWS kaynaklarına guest erişim (analytics, public data)
- İkisi birlikte: Frontend'den S3, DynamoDB'ye doğrudan erişen authenticated kullanıcılar
CDK ile Production Setup
User Pool ve Identity Pool'u uygun güvenlik konfigürasyonuyla gösteren complete bir setup:
Önemli konfigürasyon kararları:
selfSignUpEnabled: falseyetkisiz user creation'ı önlüyoradvancedSecurityMode: ENFORCEDcompromised credential detection'ı aktifleştiriyormfa: OPTIONALesneklik sağlıyor (asla REQUIRED kullanma - geri alınamaz)generateSecret: truesecret'ları güvenli şekilde saklayabilen backend client'lar için
Custom Authentication Flow'ları
Custom authentication flow'ları, CAPTCHA doğrulama, güvenlik soruları veya passwordless authentication gibi karmaşık gereksinimleri mümkün kılıyor. Üç Lambda trigger, challenge sequence'ını orkestra etmek için birlikte çalışıyor.
Custom Auth Nasıl Çalışır
Multi-Factor Challenge Implementasyonu
Bu örnek complete bir flow implement ediyor: password → CAPTCHA → security question.
Kritik implementasyon detayları:
- Challenge sequence
sessionarray'ine göre deterministic olmalı - Custom challenge'ları ayırt etmek için
challengeMetadatakullan privateChallengeParametersasla client'a gönderilmez, sadece verification için kullanılır- Her trigger'ın 5 saniyelik timeout limiti var - logic'i hızlı tut
Multi-Tenancy için Token Customization
Pre Token Generation Lambda, JWT token'larına custom claim'ler eklemeye izin veriyor - tenant context'in her request ile birlikte travel etmesi gereken multi-tenant SaaS uygulamaları için essential.
Pre Token Generation V2
Güvenlik dikkat noktaları:
- Token'lara asla sensitive data (password'ler, API key'ler) ekleme
- Token boyutunu HTTP header limitleri için 8KB'ın altında tut
- Büyük permission set'leri için opaque reference'lar kullan
- Token forgery'yi önlemek için tenant context'i doğrula
Warning: Token Size Pitfall: Çok fazla custom claim eklemek, token'ları 8KB üzerine çıkarıp HTTP 431 hatalarına neden olabilir. Production'da token boyutunu izle ve büyük veri yapıları yerleştirmek yerine reference ID'leri kullan.
Multi-Tenancy Pattern'leri
Doğru multi-tenancy pattern'ini seçmek, ölçeklenebilirliği, izolasyonu ve operasyonel karmaşıklığı önemli ölçüde etkiliyor.
Custom Attribute'larla Shared Pool
Bu pattern, 100'den az tenant'lı çoğu SaaS uygulaması için iyi çalışıyor:
Pattern seçim gerçeği: Çoğu uygulama shared pool + custom attribute'larla başlıyor, sadece tenant sayısı 100'ü geçtiğinde veya güvenlik gereksinimleri daha güçlü izolasyon talep ettiğinde groups-based izolasyona migrate ediyorlar.
Enterprise Identity Provider'ları ile SAML Federation
Federation, kullanıcıların Azure AD, Okta veya OneLogin gibi kurumsal identity provider'ları üzerinden authenticate olmasını sağlıyor - B2B SaaS uygulamaları için essential.
Azure AD SAML Konfigürasyonu
Federation best practice'leri:
- Otomatik certificate rotation için metadata URL kullan
- NameId'yi immutable attribute'a (user_id) map et, email'e değil
- Duplicate kullanıcıları önlemek için account linking implement et
- Hem SP-initiated hem de IdP-initiated logout flow'larını test et
Tip: Federation Testing: Logout flow'larını detaylıca test et. Federated logout, Cognito, IdP ve uygulama arasında koordinasyon gerektiriyor. Kullanıcıların app'te logout görünmesi ama IdP seviyesinde hala authenticated olması yaygın bir sorun.
API Gateway Entegrasyonu
API Gateway Cognito authorizer'ları, JWT token'larını doğrular ve performance için authorization kararlarını cache'ler.
Complete Integration Setup
Authorization caching trade-off'ları:
Çeşitli caching stratejileriyle çalışmak, 5 dakikalık TTL'nin çoğu uygulama için performance ve güvenlik arasında iyi bir denge sağladığını gösterdi.
External Auth Provider'lardan Migration
User Migration Lambda, lazy migration kullanarak Auth0, Okta veya custom authentication sistemlerinden sıfır downtime migration'ı mümkün kılıyor.
Lazy Migration Stratejisi
Migration timeline:
- Hafta 1-2: User Migration Lambda implement et, staging kullanıcılarıyla test et
- Hafta 3-6: Lazy migration'ı aktifleştir, active user migration rate'ini izle
- Hafta 7-8: Kalan inactive kullanıcıları CSV veya API ile bulk import et
- Hafta 9+: Tüm kullanıcıların migrate olduğunu doğruladıktan sonra legacy sistemi kapat
Bu yaklaşım, bir projede kullanıcıları 60 gün boyunca kademeli olarak migrate etti - %80'i lazy authentication ile, %20'si bulk import ile.
Gelişmiş Güvenlik Özellikleri
Cognito'nun advanced security özellikleri Plus tier pricing gerektiriyor ancak enterprise-grade koruma sağlıyor.
Security Konfigürasyonu
Üç güvenlik katmanı:
- Compromised Credentials Protection: AWS, ihlal edilmiş credential database'lerini izliyor ve bilinen compromised password'lerle sign-in'leri blokluyor
- Adaptive Authentication: IP, device, location'a göre risk skorları ve risk seviyesi başına otomatik yanıtlar
- MFA Seçenekleri: SMS (en yüksek sürtünme), TOTP (dengeli), WebAuthn/FIDO2 (en düşük sürtünme)
Warning: MFA Configuration Lock-in: MFA bir kez "REQUIRED" olarak ayarlandığında (herhangi bir metod için: SMS, TOTP veya WebAuthn), pool'u yeniden oluşturmadan devre dışı bırakamaz veya "OPTIONAL"'a çeviremezsin. Her zaman "OPTIONAL" kullan ve MFA'yı uygulama logic'i veya adaptive authentication ile seçici olarak enforce et.
SDK Karşılaştırması: Amplify vs AWS SDK
Doğru client library'yi seçmek, bundle boyutunu, özellikleri ve maintenance yükünü etkiliyor.
Amplify Frontend Implementasyonu
AWS SDK Backend Implementasyonu
Seçim kılavuzu: Otomatik token yönetimi olan React/React Native frontend uygulamaları için Amplify kullan. Client secret'ları ve custom authentication flow'ları gerektiren backend servisleri için AWS SDK kullan.
Production Pattern'leri ve Monitoring
Token Refresh Stratejisi
Essential CloudWatch Metrikleri
Track edilmesi gereken authentication metrikleri:
SignInSuccessesveSignInThrottles- Authentication health'ini izleTokenRefreshSuccesses- Token refresh failure'larını track et- Custom metrikler: Authentication süresi, MFA completion rate
- Alarm'lar: Yüksek failure rate, throttling, advanced security block'ları
Güvenlik metrikleri:
- Compromised credential tespitleri
- Yüksek riskli authentication girişimleri
- Adaptive authentication tetiklemeleri
- Account takeover prevention rate
Yaygın Pitfall'lar ve Çözümler
Pitfall 1: Backup Stratejisi Yok
Problem: Cognito User Pool'ları backup alınamıyor veya region'lar arası replicate edilemiyor. Yanlışlıkla silme veya region failure, total user data kaybı anlamına geliyor.
Çözüm:
ListUsersAPI kullanarak günlük user data'yı S3'e export et- Kritik user metadata'yı DynamoDB'de sakla
- Otomatik export'lar için scheduled Lambda implement et
- Pool recreation prosedürünü dokümante et
Bu, Cognito'nun en büyük kısıtlaması. İlk günden backup process'leri oluşturmak, felaketten kaçınmanın yolu.
Pitfall 2: Token Size Limitleri
Problem: Çok fazla custom claim eklemek, token'ların 8KB header limitlerini aşmasına neden oluyor ve HTTP 431 hatalarıyla sonuçlanıyor.
Çözüm:
- Büyük dataset'leri DynamoDB'de sakla, token'a reference ID ekle
- Full object'ler yerleştirmek yerine opaque ID'ler kullan
- Production'da token boyutunu izle
- Büyük permission set'leri için pagination implement et
Örnek: Tüm permission'ları embed etmek yerine permissionSetId: "ps-123" ekle ve detayları cache'ten çek.
Pitfall 3: Authorizer Cache Invalidation
Problem: API Gateway, authorization kararlarını cache'liyor. Revoke edilen permission'lar, cache expire olana kadar çalışmaya devam ediyor.
Çözüm:
- Hassas operasyonlar için daha kısa TTL (5-15 dakika) kullan
- Authorization header'a version ekleyerek cache busting implement et
- Gerçek zamanlı permission kontrolü için Lambda authorizer kullan
- Security ekibi için cache davranışını dokümante et
Çeşitli caching stratejileriyle çalışmak, 5 dakikalık TTL'nin çoğu uygulama için performance ve güvenlik arasında iyi denge sağladığını gösterdi.
Pitfall 4: SMS Region Kısıtlamaları
Problem: SMS gönderimi AWS End User Messaging SMS (eski adı SNS) üzerinden tüm Cognito region'larında desteklenmiyor, beklenmedik verification failure'larına neden oluyor.
Çözüm:
- Cognito region'ın için AWS End User Messaging SMS desteğini kontrol et
- SMS spending limitini doğru region'da konfigüre et
- Production region'da launch öncesi SMS delivery'yi test et
- Email verification'a fallback implement et
Pitfall 5: Lambda Trigger Timeout'ları
Problem: Lambda trigger'lar, sync trigger'lar için 5 saniyelik timeout'a sahip (Pre/Post Auth), yavaş external API'lerle authentication failure'larına neden oluyor.
Çözüm:
- Trigger logic'ini 3 saniyenin altında tut
- Kritik olmayan görevler için async operasyonlar kullan
- External API response'larını cache'le
- External dependency'ler için circuit breaker implement et
- Lambda duration ve error'larını izle
Pattern: Sync trigger'larda kritik validation yap, analytics ve logging'i async process'lere push et.
Maliyet Analizi
Fiyatlandırma Tier'ları (Aralık 2024)
Lite tier (10,000 MAU ücretsiz, sonra kademeli fiyatlandırma):
- Temel authentication, MFA, social provider'lar
- Advanced security yok
- Free tier sonrası kademeli fiyatlandırma: 0.00375/MAU (50K-100K), vb.
Essentials tier ($0.015/MAU):
- Advanced security (audit mode)
- Access token customization
Plus tier ($0.02/MAU):
- Advanced security (enforced mode)
- SAML/OIDC federation
- Essentials'a göre 1.33x maliyet
Gizli maliyetler:
- SMS MFA: US'de $0.00645/mesaj (AWS End User Messaging SMS ile, eski adı SNS)
- Lambda trigger invocation'ları: 1M request başına $0.20
- API Gateway authorizer call'ları (caching devre dışıysa)
Maliyet optimizasyonu:
- Inactive kullanıcıları otomatik olarak archive et
- Direct user sayısını azaltmak için federation kullan
- MAU büyüme trendlerini izle
- Düşük trafikli API'ler için Lambda authorizer düşün
Cognito vs Alternatifler Ne Zaman Seçilmeli
Cognito Şunlar İçin Mantıklı:
- AWS-native mimari
- Standard authentication gereksinimleri
- Budget-conscious projeler
- Hızlı MVP geliştirme
- Küçük-orta ölçek (< 10M kullanıcı)
Alternatifler İçin Düşün:
Auth0: Karmaşık authentication flow'ları, kapsamlı özelleştirme, enterprise SLA gereksinimleri, global compliance ihtiyaçları
Okta: Workforce identity (çalışanlar), enterprise SSO, gelişmiş lifecycle yönetimi
Custom Çözüm: Benzersiz authentication gereksinimleri, tam data kontrolü, mevcut identity altyapısı, çok yüksek ölçek (> 100M kullanıcı)
Kabul Edilmesi Gereken Cognito Kısıtlamaları:
- Cross-region replication yok
- Sınırlı user management API'leri
- 3KB CSS özelleştirme limiti
- Doğrudan database erişimi yok
- MFA konfigürasyon lock-in
Önemli Çıkarımlar
-
Mimariyi Anla: User Pool'lar authenticate ediyor, Identity Pool'lar AWS erişimini authorize ediyor - birlikte çalışıyorlar ama farklı amaçlara hizmet ediyorlar
-
Basit Başla, Karmaşıklığı Ölçeklendir: Temel authentication ile başla, business gereksinimleri ortaya çıktıkça Lambda trigger'ları ve federation ekle
-
Multi-Tenancy'yi Erken Planla: Launch sonrası tenant izolasyon pattern'lerini değiştirmek acı verici. Shared pool + custom attribute'lar çoğu SaaS uygulaması için iyi çalışıyor
-
Custom Claim'ler Fine-Grained Authorization'ı Sağlıyor: Pre Token Generation V2, ekstra API call'ları olmadan token'lara tenant context ve permission'lar ekliyor
-
Federation Karmaşık: SAML/OIDC entegrasyonu beklenenden uzun sürüyor. Logout flow'larını ve attribute mapping'i test etmek için zaman ayır
-
Kullanıcılarını Backup Al: Cognito backup sağlamıyor. İlk günden S3'e günlük user export implement et
-
Akıllıca Cache'le: Authorizer caching performance'ı iyileştiriyor ama permission değişikliklerini geciktiriyor. Güvenlik gereksinimlerine göre denge kur
-
Migration Zaman Alır: User migration kademeli. Inactive kullanıcılar için 30-60 günlük lazy migration artı bulk import planla
-
Güvenlik Paraya Mal Oluyor: Advanced security Plus tier gerektiriyor ($0.02/MAU). Uygulamanız için risk vs maliyet değerlendirmesi yap
-
Limitleri Bil: Cognito'nun keskin köşeleri var (MFA lock-in, replication yok, sınırlı UI özelleştirme). Kısıtlamalar dahilinde çalış veya alternatif seç
Farklı projelerde Cognito ile çalışmak, başarının bu kısıtlamaları erken anlamaktan ve içlerinde çalışan pattern'ler oluşturmaktan geldiğini öğretti. Servis, mimari sınırlarını kabul edip buna göre plan yaptığında authentication'ı iyi handle ediyor.