Modern web uygulamaları geliştirirken API güvenliği ve kullanıcı kimlik doğrulama süreçleri karmaşık hale gelebilir. Peki, bu zorlukları AWS API Gateway ve Amazon Cognito User Pool yetkilendiricisi ile nasıl basitleştirebilir, aynı zamanda ölçeklenebilir ve güvenli bir yapı kurabiliriz? Bu kapsamlı rehber, konuya sıfırdan başlayarak ileri seviye ipuçlarına kadar her detayı açıklıyor.
Günümüzün dijital dünyasında, kullanıcı verilerinin güvenliği ve API’lerin yetkisiz erişime karşı korunması, her geliştiricinin ve IT profesyonelinin öncelikli konuları arasında yer almaktadır. Uygulamalarımızın omurgasını oluşturan API’ler, genellikle hassas bilgilere erişim noktalarıdır. Bu nedenle, API’leri yetkisiz kullanıcılardan korumak hayati önem taşır. Geleneksel kimlik doğrulama yöntemleri, büyük ölçekli ve dinamik bulut tabanlı uygulamalar için genellikle yetersiz kalabilir. Kullanıcı yönetimi, oturum takibi, token yenileme ve çok faktörlü kimlik doğrulama gibi özelliklerin her API için ayrı ayrı geliştirilmesi hem zaman alıcı hem de hata yapmaya açık bir süreçtir.
İşte tam bu noktada, AWS ekosistemi içerisinde sunulan Amazon API Gateway ve Amazon Cognito User Pools, bu karmaşık güvenlik problemlerine güçlü, ölçeklenebilir ve yönetilebilir bir çözüm sunar. API Gateway, uygulamalarınız için bir “ön kapı” görevi görerek tüm gelen istekleri yönetir, yönlendirir ve çeşitli güvenlik katmanları ekler. Amazon Cognito User Pools ise, uygulamanız için kullanıcı dizini ve kimlik doğrulama hizmeti sağlayarak kullanıcı kaydı, oturum açma, şifre sıfırlama ve çok faktörlü kimlik doğrulama gibi işlemleri kolaylaştırır. Bu iki servisin entegrasyonuyla, API Gateway, gelen API isteklerini Cognito User Pool tarafından verilen standartlaştırılmış JSON Web Token (JWT) ile yetkilendirerek, API’lerinize yalnızca kimliği doğrulanmış ve yetkili kullanıcıların erişimini sağlar. Bu entegrasyon, geliştiricilerin güvenlik mekanizmaları yerine iş mantığına odaklanmasına olanak tanırken, aynı zamanda yüksek güvenlik standartlarını ve operasyonel verimliliği garanti eder. Bu rehberde, bu entegrasyonun temel çalışma prensiplerinden, adım adım yapılandırma süreçlerine, gerçek dünya senaryolarından ileri düzey optimizasyonlara kadar her yönünü detaylı bir şekilde inceleyeceğiz. Bu sayede, okuyucularımız, uygulamalarının API güvenliğini sağlamak için gerekli bilgi ve araçlara sahip olacaklardır.
Temel Kavramlara Giriş: AWS API Gateway ve Amazon Cognito Nedir ve Nasıl Çalışır?
API Gateway ve Cognito User Pools yetkilendiricisinin nasıl çalıştığını tam olarak anlayabilmek için, öncelikle bu iki temel AWS hizmetinin ne olduğunu ve ne işe yaradığını kavramak önemlidir. Her ikisi de modern, bulut tabanlı uygulamaların temel bileşenlerindendir ve birlikte güçlü bir güvenlik ve erişim kontrolü mekanizması oluştururlar. Bu bölümde, her bir servisi ayrı ayrı ele alacak ve onların temel özelliklerini ve rollerini açıklayacağız.
Amazon API Gateway’in Rolü Nedir ve Neden Kullanılır?
Amazon API Gateway, geliştiricilerin herhangi bir ölçekte API oluşturmasına, yayınlamasına, sürdürmesine, izlemesine ve güvenliğini sağlamasına olanak tanıyan tam olarak yönetilen bir hizmettir. Temel olarak, uygulamalarınız ile arka uç hizmetleriniz (örneğin AWS Lambda fonksiyonları, EC2’deki web sunucuları veya diğer AWS servisleri) arasında bir “ön kapı” veya “ön uç” görevi görür. API Gateway, gelen HTTP isteklerini alır, bunları arka uç servislerine iletir ve arka uçtan gelen yanıtları istemciye geri gönderir. Bu süreçte birçok fayda sağlar:
- Request/Response Yönetimi: Gelen istekleri doğru arka uç servisine yönlendirir ve arka uçtan gelen yanıtları dönüştürerek istemciye gönderir.
- Trafik Yönetimi: İstek sınırlama (throttling), önbellekleme (caching) ve versiyonlama gibi özelliklerle API’lerinizin performansını ve kararlılığını artırır.
- Güvenlik: Kimlik doğrulama ve yetkilendirme mekanizmaları (IAM, Lambda Authorizer, Cognito User Pool Authorizer) entegre ederek API’lerinizi korur. DDoS saldırılarına karşı koruma sağlar.
- İzleme ve Günlükleme: API çağrılarını, gecikmeleri ve hata oranlarını izlemek için Amazon CloudWatch ile entegre çalışır.
- Esneklik: RESTful API’ler, WebSocket API’ler ve HTTP API’ler gibi farklı API türlerini destekler.
API Gateway’in en önemli özelliklerinden biri de, çeşitli yetkilendirme mekanizmalarını desteklemesidir. Bu yetkilendiriciler sayesinde, API’lerinize kimlerin ve hangi koşullar altında erişebileceğini belirleyebilirsiniz. Konumuz özelinde, Cognito User Pool yetkilendiricisi, kullanıcı tabanlı kimlik doğrulama ve yetkilendirme için güçlü ve yönetimi kolay bir seçenek sunar.
Amazon Cognito User Pools’a Derin Bakış: Kimlik Yönetiminin Kalbi
Amazon Cognito, web ve mobil uygulamalarınıza kullanıcı kaydı, oturum açma ve erişim kontrolü eklemenizi kolaylaştıran bir hizmettir. İki ana bileşenden oluşur: User Pools ve Identity Pools. Bu makalede odaklanacağımız User Pools, uygulamalarınız için güvenli ve ölçeklenebilir bir kullanıcı dizini görevi görür. Özetle, kullanıcılarınızın kimliklerini yöneten bir hizmettir. İşte temel özellikleri:
- Kullanıcı Dizini: Milyonlarca kullanıcıyı barındırabilir ve yönetebilir.
- Kimlik Doğrulama: Kullanıcı adı ve şifre, sosyal kimlik sağlayıcıları (Google, Facebook, Apple) veya SAML/OIDC uyumlu kurumsal kimlik sağlayıcıları üzerinden oturum açma imkanı sunar.
- Token Yönetimi: Başarılı bir oturum açma işleminden sonra, Cognito User Pools üç temel JWT (JSON Web Token) türü verir:
- ID Token: Kimliği doğrulanmış kullanıcının kimlik bilgilerini (örneğin kullanıcı adı, e-posta) içerir. Kimlik doğrulaması için kullanılır.
- Access Token: API’lere ve kaynaklara erişim yetkisi verir. Kullanıcının hangi kaynaklara erişebileceğini belirleyen yetki kapsamlarını (scopes) içerebilir.
- Refresh Token: Access ve ID token’ları sona erdiğinde yeni token’lar almak için kullanılır. Bu sayede kullanıcıların sürekli tekrar oturum açması gerekmez.
- Çok Faktörlü Kimlik Doğrulama (MFA): SMS veya TOTP tabanlı MFA desteği sunarak güvenliği artırır.
- Özelleştirilebilir Kullanıcı Akışları: Lambda tetikleyicileri ile oturum açma, kayıt olma, şifre sıfırlama gibi süreçleri özelleştirebilirsiniz.
Cognito User Pools, kullanıcılarınızın kimliklerini merkezi ve güvenli bir şekilde yönetirken, uygulamalarınızın API’lerine erişimi düzenlemek için API Gateway ile mükemmel bir uyum sağlar. Kullanıcılar Cognito aracılığıyla kimlik doğrulamasından geçtikten sonra aldıkları Access Token, API Gateway’e gönderilen isteklerin yetkilendirilmesi için kullanılır. Bu entegrasyon, kimlik yönetimi yükünü AWS’ye devrederek geliştiricilerin iş yükünü önemli ölçüde azaltır.
Cognito User Pool Yetkilendiricisinin Çalışma Prensibi: Token’ların Yolculuğu
API Gateway’de Cognito User Pool yetkilendiricisinin nasıl çalıştığını anlamak, güvenli bir mimari inşa etmek için temeldir. Bu mekanizma, kullanıcılarınızın kimlik doğrulama ve API erişim süreçlerini otomatize eden bir köprü görevi görür. İşte adım adım çalışma prensibi:
- Kullanıcı Oturum Açma ve Token Alma:
Kullanıcı, uygulamanızın (mobil, web veya tek sayfa uygulama) oturum açma arayüzü aracılığıyla Amazon Cognito User Pool’da kimlik doğrulaması yapar. Bu işlem sonucunda, Cognito, kullanıcıya bir ID Token, bir Access Token ve bir Refresh Token verir. Bu token’lar JWT (JSON Web Token) formatındadır ve kriptografik olarak imzalıdır, bu da onların güvenilirliğini garanti eder. Access Token, API Gateway tarafından API’ye erişim yetkisini doğrulamak için kullanılacak anahtar bileşendir.
- API İsteği Gönderme:
Kullanıcı, uygulamasında korunan bir API kaynağına erişmek istediğinde, uygulama bu isteği API Gateway’e gönderir. Bu isteğin HTTP başlıklarından (genellikle
Authorizationbaşlığı altındaBearerformatında) Access Token’ı içermesi gerekir. Bu token, kullanıcının API’ye erişme yetkisini kanıtıdır. - API Gateway Tarafından Yetkilendirme Başlatma:
API Gateway, gelen isteği alır almaz, isteğin yapılandırılmış bir Cognito User Pool yetkilendiricisi tarafından korunup korunmadığını kontrol eder. Eğer korunan bir kaynak ise, API Gateway otomatik olarak yetkilendirme sürecini başlatır. Bu aşamada, API Gateway, isteğin
Authorizationbaşlığındaki Access Token’ı alır ve bu token’ın geçerliliğini doğrulamak için gerekli adımları atar. - Access Token Doğrulama:
API Gateway, Access Token’ı aldıktan sonra şu doğrulama adımlarını uygular:
- İmza Doğrulaması: Token’ın Cognito tarafından imzalandığını ve yolculuk sırasında değiştirilmediğini doğrulamak için Cognito User Pool’un herkese açık anahtarını (public key) kullanır. Bu anahtarlar, Cognito’nun belirli bir User Pool için yayınladığı OpenID Connect (OIDC) meta veri uç noktasından alınabilir.
- Token Süresi (Expiration): Token’ın süresinin dolup dolmadığını kontrol eder. Süresi dolmuş token’lar reddedilir.
- Hedef Kitle (Audience): Token’ın belirli bir uygulama istemcisi (app client) için verildiğini ve yetkilendirilmiş API’ye erişmek için uygun olduğunu kontrol eder.
- Veren Taraf (Issuer): Token’ın doğru Cognito User Pool’dan geldiğini doğrular.
- Kapsamlar (Scopes – isteğe bağlı): Eğer API kaynakları belirli kapsamlar gerektiriyorsa (örneğin,
admin.readveyauser.write), Access Token’daki kapsamların istenen API erişimi için yeterli olup olmadığını kontrol eder. Bu, daha ince taneli erişim kontrolü sağlar.
- Yetkilendirme Kararı ve İsteğin İletilmesi:
Eğer tüm doğrulama adımları başarılı olursa, Access Token geçerli kabul edilir ve API Gateway, isteği arka uç servisine (örneğin bir Lambda fonksiyonu veya başka bir HTTP uç noktası) iletir. Bu noktada, API Gateway, Access Token’daki kullanıcı bilgilerini (kullanıcı ID’si, gruplar vb.) arka uca HTTP başlıkları veya diğer mekanizmalar aracılığıyla aktarabilir. Bu bilgiler, arka uç servisinin iş mantığında daha fazla yetkilendirme kararı almak veya kullanıcıya özgü verileri işlemek için kullanılabilir.
- Hata Durumu:
Eğer doğrulama adımlarından herhangi biri başarısız olursa (örneğin, geçersiz imza, süresi dolmuş token, eksik kapsam), API Gateway isteği reddeder ve istemciye bir hata yanıtı (genellikle HTTP 401 Unauthorized veya 403 Forbidden) gönderir. Bu, API’nizin yetkisiz erişime karşı korunmasını sağlar.
Bu çalışma prensibi sayesinde, API Gateway, API’lerinizin ön cephesinde sağlam bir güvenlik duvarı oluştururken, Amazon Cognito ise kullanıcı kimlik yönetimi ve token üretim yükünü tamamen üstlenir. Bu, geliştiricilerin güvenliğe odaklanmak yerine iş mantığına yoğunlaşmasına olanak tanır ve ölçeklenebilir, güvenli uygulamaların temelini oluşturur.
Adım Adım Kurulum: API Gateway ile Cognito User Pool Yetkilendiricisi Nasıl Yapılandırılır?
Şimdi teoriden pratiğe geçelim ve AWS konsolu üzerinden API Gateway ile Cognito User Pool yetkilendiricisini adım adım nasıl yapılandıracağımızı inceleyelim. Bu süreç, birkaç temel adımı içerir ve nispeten basittir, ancak her adımın doğru bir şekilde yapılması önemlidir.
Cognito User Pool Oluşturma: Kullanıcı Yönetiminizin Temelini Atın
İlk olarak, kullanıcılarınızı yönetecek olan Cognito User Pool’u oluşturmanız gerekir:
- Cognito Konsoluna Gitme: AWS konsolunda “Cognito” hizmetini arayın ve User Pools bölümüne gidin.
- Yeni User Pool Oluşturma: “Create a user pool” butonuna tıklayın.
- Adım 1: Kullanıcı Deneyimi Yapılandırma:
- Cognito User Pool Girişi: Varsayılan ayarları kullanabilir veya kullanıcılarınızın nasıl oturum açacağını (kullanıcı adı, e-posta, telefon numarası gibi) seçebilirsiniz. Genellikle e-posta veya kullanıcı adı tercih edilir.
- Parola Politikası: Güçlü bir parola politikası belirleyin.
- MFA: İsteğe bağlı olarak Çok Faktörlü Kimlik Doğrulama (MFA) etkinleştirebilirsiniz (SMS veya TOTP tabanlı).
- Diğer ayarları (self-service signup, hesap kurtarma vb.) ihtiyaçlarınıza göre yapılandırın.
- Adım 2: Güvenlik Gereksinimlerini Yapılandırma:
- Uygulama istemcisi oluşturma (App Client): API Gateway’e veya uygulamanıza token sağlayacak bir “app client” oluşturmalısınız. “Create an app client” seçeneğini seçin, bir isim verin (örn.
WebApiClient). “Generate a client secret” seçeneğini işaretlemeyin; zira genel web veya mobil uygulamalar genellikle client secret kullanmaz. - Callback URL’leri ve Logout URL’leri gibi diğer OAuth ayarlarını, uygulamanızın yönlendirme mantığına göre yapılandırın.
- Kapsamlar (Scopes): Uygulamanızın ihtiyaç duyduğu özel kapsamları tanımlayabilirsiniz (örn.
api/read,api/write).
- Uygulama istemcisi oluşturma (App Client): API Gateway’e veya uygulamanıza token sağlayacak bir “app client” oluşturmalısınız. “Create an app client” seçeneğini seçin, bir isim verin (örn.
- Adım 3: İnceleme ve Oluşturma: Tüm ayarları gözden geçirin ve User Pool’u oluşturun. Oluşturduktan sonra, User Pool ID (örn.
us-east-1_xxxxxxxxx) ve App Client ID (örn.yyyyyyyyyyyyyyyyyyyyyy) değerlerini not edin. Bu bilgiler API Gateway yapılandırması için gereklidir.
API Gateway Üzerinde Yetkilendirici Tanımlama: Köprüyü Kurun
Cognito User Pool’unuz hazır olduğuna göre, şimdi API Gateway’de bu User Pool’u yetkilendirici olarak tanımlayalım:
- API Gateway Konsoluna Gitme: AWS konsolunda “API Gateway” hizmetine gidin.
- API’nizi Seçme veya Oluşturma: Mevcut bir REST API’nizi seçin veya yeni bir API oluşturun.
- Yetkilendiriciler Bölümüne Gitme: Sol menüden “Authorizers” (Yetkilendiriciler) seçeneğine tıklayın.
- Yeni Yetkilendirici Oluşturma: “Create new Authorizer” (Yeni yetkilendirici oluştur) butonuna tıklayın.
- Yetkilendirici Adı: Anlamlı bir isim verin (örn.
CognitoUserPoolAuthorizer). - Type (Tür): “Cognito” seçeneğini işaretleyin.
- Cognito User Pool: Açılır menüden daha önce oluşturduğunuz User Pool’u seçin (User Pool ID’sini kullanın).
- Token Source (Token Kaynağı): API Gateway’in Access Token’ı nereden alacağını belirtin. Varsayılan olarak
Authorizationbaşlığıdır. Bu başlık adı genellikleAuthorizationolarak kalır, çünkü istemciler genellikle token’larını bu başlık altında gönderirler. - Token Validation (İsteğe Bağlı): RegEx kullanarak token’ın belirli bir deseni takip etmesini sağlayabilirsiniz, ancak çoğu zaman buna gerek yoktur.
- Yetkilendirici Adı: Anlamlı bir isim verin (örn.
- Kaydetme: Yetkilendiriciyi kaydedin.
API Kaynakları ve Metotları Üzerinde Yetkilendirme Uygulama: Korunan Kapılar
Yetkilendiricinizi tanımladıktan sonra, şimdi bunu API kaynaklarınıza ve HTTP metotlarınıza uygulamanız gerekiyor:
- API’nizin Kaynaklarına Gitme: API Gateway konsolunda API’nizin “Resources” (Kaynaklar) bölümüne gidin.
- Metot Seçimi: Yetkilendirme uygulamak istediğiniz belirli bir kaynağı (örneğin
/items) ve bir HTTP metodunu (örneğinGETveyaPOST) seçin. - Metot İsteğini Yapılandırma: “Method Request” (Metot İsteği) bağlantısına tıklayın.
- Yetkilendiriciyi Seçme: “Authorization” (Yetkilendirme) açılır menüsünden, az önce oluşturduğunuz Cognito User Pool yetkilendiricisini seçin (örn.
CognitoUserPoolAuthorizer). - Kapsamları Ekleme (İsteğe Bağlı): Eğer API metodunuz belirli kapsamlar gerektiriyorsa, “OAuth Scopes” (OAuth Kapsamları) alanına bu kapsamları ekleyin (örn.
api/read). Bu, sadece ilgili kapsamlara sahip kullanıcıların bu API’ye erişmesini sağlar. - Kaydetme: Değişiklikleri kaydedin.
- API’yi Dağıtma: Yaptığınız değişikliklerin etkili olması için API’nizi bir “Stage” (Aşama) üzerine dağıtmanız gerekir. “Actions” menüsünden “Deploy API” (API’yi Dağıt) seçeneğini seçin ve mevcut bir aşamayı seçin veya yeni bir aşama oluşturun.
Bir Test İsteği Gönderme: Çalıştığını Doğrulama
Şimdi her şeyin doğru çalıştığını test edelim. Bir kullanıcı olarak oturum açıp bir Access Token almalı ve bu token ile API’ye istek göndermelisiniz. Postman, Insomnia veya cURL gibi araçları kullanabilirsiniz.
Öncelikle, Cognito User Pool’da bir kullanıcı oluşturun ve bu kullanıcıyla oturum açarak bir Access Token alın. Bu token’ı almak için Cognito’nun kimlik doğrulama akışlarını veya AWS SDK’yı kullanabilirsiniz. Örneğin, AWS Amplify kütüphanesi web/mobil uygulamalar için bu süreci kolaylaştırır.
Aldığınız Access Token’ı kullanarak aşağıdaki gibi bir cURL isteği gönderebilirsiniz:
curl -X GET 'https://your-api-gateway-id.execute-api.region.amazonaws.com/your-stage/your-resource' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
Eğer her şey doğru yapılandırıldıysa, API'nizden başarılı bir yanıt almalısınız. Eğer token geçersizse veya eksikse, bir 401 Unauthorized veya 403 Forbidden hatası alırsınız. Bu hataları AWS CloudWatch günlüklerinde de görebilirsiniz, bu da sorun giderme için önemli bir kaynaktır.
Bu adımlarla, API Gateway'nizi Amazon Cognito User Pool yetkilendiricisi ile başarıyla entegre etmiş ve API'lerinizi güvence altına almış olursunuz. Bu yapılandırma, hem güvenlik hem de yönetim kolaylığı açısından modern uygulamalar için güçlü bir temel sunar.
Gerçek Dünya Senaryoları ve İleri Düzey Kullanım İpuçları
Cognito User Pool yetkilendiricisi, sadece temel kimlik doğrulamadan çok daha fazlasını sunar. Gerçek dünya uygulamalarında karşılaşılan karmaşık güvenlik ve yetkilendirme ihtiyaçlarını karşılamak için çeşitli ileri düzey senaryolarda kullanılabilir. Bu bölümde, birkaç önemli kullanım senaryosu ve optimizasyon ipucunu ele alacağız.
Mikroservis Mimarilerinde Kimlik Doğrulama: API Gateway'in Rolü
Mikroservis mimarileri, uygulamanızın farklı işlevlerini bağımsız, küçük servisler halinde ayırmanızı sağlar. Bu mimarilerde, API Gateway, tüm mikroservisler için tek bir erişim noktası (API façade) görevi görür. Cognito User Pool yetkilendiricisini API Gateway seviyesinde yapılandırmak, bu mimarilerde kimlik doğrulamayı merkezileştirmenin en etkili yoludur. Kullanıcı, sadece API Gateway'e token'ını gönderir ve doğrulama burada gerçekleşir. API Gateway, isteği yetkilendirdikten sonra, isteği ilgili mikroservise (örneğin bir Lambda fonksiyonuna veya Fargate üzerindeki bir servise) iletir. Bu durumda, arka uç mikroservislerin her birinin kendi içinde token doğrulama mantığı içermesine gerek kalmaz. Ancak, arka uç servislerin token'dan gelen kullanıcı kimlik bilgilerini (kullanıcı ID'si, roller, gruplar) kullanarak daha ince taneli yetkilendirme kararları alması gerekebilir. API Gateway, bu bilgileri arka uç servisine HTTP başlıkları veya context nesnesi aracılığıyla iletebilir.
// Python Flask örneği - Gelen request header'dan kullanıcı ID'si alma
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/protected-resource')
def protected_resource():
# API Gateway'den gelen token bilgileri genellikle X-Amzn-Authorizer-Decoded-JWT veya benzeri başlıklarla gelir.
# Ya da Lambda integration ile context objesinde.
# Varsayımsal olarak, API Gateway userId'yi bir başlığa eklemiş olsun.
user_id = request.headers.get('X-User-ID')
if not user_id:
return jsonify({"message": "Unauthorized"}), 401
# İş mantığı burada başlar, user_id kullanılarak veritabanından kullanıcıya özel veriler çekilebilir
return jsonify({"message": f"Hello, user {user_id}! This is your protected data."}), 200
if __name__ == '__main__':
app.run(debug=True)
Bu yaklaşım, mikroservislerin "kimlik doğrulama" yükünden kurtulup sadece "yetkilendirme" ve iş mantığına odaklanmasını sağlar.
Özel Kapsamlar (Custom Scopes) ve Yetkilendirme: Daha İnce Taneli Kontrol
Bazen bir API kaynağına erişim için sadece kullanıcının kimliğinin doğrulanmış olması yeterli değildir; aynı zamanda belirli bir yetkiye veya role sahip olması da gerekebilir. Cognito User Pools, bu tür senaryolar için özel kapsamlar (custom scopes) tanımlama imkanı sunar. Örneğin, bir "admin" kullanıcısının admin.read ve admin.write kapsamlarına sahip olması gerekirken, "normal" bir kullanıcının sadece user.read kapsamına sahip olması yeterli olabilir. API Gateway'deki yetkilendiricinizi yapılandırırken, belirli API metotları için bu özel kapsamları belirtebilirsiniz. Böylece, API Gateway, Access Token'daki kapsamların (scope claim) gerekli kapsamları içerip içermediğini kontrol eder ve yalnızca uygun kapsama sahip token'lara sahip istekleri arka uca iletir.
// API Gateway'de bir metod için OAuth kapsamı belirleme örneği (pseudo kod)
// GET /admin/users metoduna sadece "admin.read" kapsamı ile erişilebilir
// API Gateway Console -> Resource -> GET Method -> Method Request -> Authorization -> OAuth Scopes: admin.read
Hata Yönetimi ve Gözlem (Monitoring): Sorunları Hızla Tespit Edin
API Gateway ve Cognito entegrasyonunda oluşan hataları anlamak ve gidermek için etkili gözlem önemlidir. API Gateway, tüm istekleri ve yetkilendirme kararlarını Amazon CloudWatch'a gönderir. Yetkilendirme günlüklerini etkinleştirerek, Access Token'ın neden reddedildiğine dair detaylı bilgilere (süresi dolmuş, geçersiz imza, eksik kapsam vb.) erişebilirsiniz. Bu, sorun giderme süreçlerini hızlandırır ve güvenlik olaylarını tespit etmenize yardımcı olur. CloudWatch Alarmları kurarak başarısız yetkilendirme denemeleri belirli bir eşiği aştığında bildirim alabilirsiniz.
AWS WAF ile Ek Güvenlik Katmanları: Çok Katmanlı Savunma
Cognito User Pool yetkilendiricisi, kimlik doğrulamayı sağlarken, API'nizin diğer yaygın web saldırılarına karşı korunmasını sağlamaz. AWS Web Application Firewall (WAF) ile API Gateway'inizi entegre ederek SQL Injection, Cross-Site Scripting (XSS), bot saldırıları ve DDoS saldırılarına karşı ek bir savunma katmanı ekleyebilirsiniz. WAF, API Gateway'e ulaşan istekleri, yetkilendirmeden önce belirli kurallara göre filtreleyerek potansiyel tehditleri engeller. Bu, çok katmanlı bir güvenlik stratejisinin önemli bir parçasıdır ve API'lerinizin genel dayanıklılığını artırır.
Bu ileri düzey kullanım senaryoları ve ipuçları, Cognito User Pool yetkilendiricisinin sadece basit bir kimlik doğrulama mekanizması olmadığını, aynı zamanda karmaşık, güvenli ve ölçeklenebilir bulut uygulamaları inşa etmek için esnek ve güçlü bir araç olduğunu göstermektedir. Doğru yapılandırma ve entegrasyon ile API'lerinizin güvenliğini en üst düzeye çıkarabilir ve geliştirme sürecinizi optimize edebilirsiniz.
Performans, Ölçeklenebilirlik ve Maliyet Optimizasyonu
Bir sistem tasarlarken, güvenlik kadar performans, ölçeklenebilirlik ve maliyet de temel unsurlardır. AWS API Gateway ve Amazon Cognito User Pool yetkilendiricisi, bu alanlarda da önemli avantajlar sunar, ancak doğru yapılandırma ve stratejilerle daha da optimize edilebilirler.
API Gateway Önbellekleme (Caching): Yetkilendirme Yükünü Azaltma
API Gateway'deki Cognito User Pool yetkilendiricisi, her gelen istek için Access Token'ı doğrular. Yüksek trafikli uygulamalarda bu, önemli bir işlem yükü oluşturabilir. API Gateway'in önbellekleme (caching) özelliğini kullanarak bu yükü azaltabilirsiniz. API Gateway, yetkilendirme sonuçlarını ve hatta arka uç yanıtlarını belirli bir süre boyunca önbellekte tutabilir. Eğer aynı geçerli token ile ardışık istekler gelirse, yetkilendirici her seferinde yeniden çağrılmaz, önbellekten yanıt verilir. Bu, hem gecikmeyi (latency) azaltır hem de API Gateway maliyetlerini düşürür.
- Yapılandırma: API Gateway'in "Stages" (Aşamalar) bölümünde önbellekleme ayarlarını etkinleştirebilirsiniz. "Cache capacity" (önbellek kapasitesi) ve "Cache TTL" (önbellek yaşam süresi) değerlerini belirleyin.
- Optimizasyon: Cache TTL'yi Access Token'ın geçerlilik süresinden daha kısa tutmanız önemlidir. Örneğin, Access Token 1 saat geçerliyse, önbellek TTL'sini 5-10 dakika olarak ayarlayarak, token süresi dolmadan önce önbelleğin yenilenmesini sağlayabilirsiniz. Bu, geçerliliğini yitirmiş token'ların önbellekte kalmasını engeller.
Cognito'nun Doğal Ölçeklenebilirliği
Amazon Cognito, AWS'nin tam olarak yönetilen bir hizmeti olduğu için, milyonlarca kullanıcıyı destekleyecek şekilde tasarlanmıştır. Kullanıcı tabanınız büyüdükçe, Cognito otomatik olarak ölçeklenir ve altyapı yönetimiyle uğraşmanıza gerek kalmaz. Bu, özellikle hızla büyüyen uygulamalar için büyük bir avantajdır. Kullanıcı havuzunuzun ve kimlik doğrulama taleplerinizin ölçeği ne olursa olsun, Cognito bu yükü kaldırabilir.
Maliyet Optimizasyon Stratejileri
Hem API Gateway hem de Cognito, kullandıkça öde (pay-as-you-go) modeline sahiptir. Maliyetleri optimize etmek için şunları göz önünde bulundurabilirsiniz:
- API Gateway İstekleri: API Gateway'e gelen her API çağrısı ve data transferi ücretlendirilir. Önbellekleme, tekrar eden istekler için arka uç çağrılarını ve dolayısıyla maliyetleri azaltır.
- Cognito Kullanıcı Havuzu: Cognito, aktif kullanıcı sayısına (aylık aktif kullanıcılar - MAU) göre ücretlendirilir. Büyük kullanıcı tabanlarında maliyetler artabilir, ancak genellikle rekabetçi bir fiyata sahiptir. Lambda tetikleyicileri kullanılıyorsa, Lambda çağrılarının da maliyeti olacaktır.
- Gözlem ve Günlükleme: CloudWatch günlükleri de depolama ve sorgu hacmine göre ücretlendirilir. Gereksiz veya aşırı detaylı günlüklemeyi kısıtlamak maliyetleri düşürebilir. Sadece kritik bilgileri günlüklemeye odaklanın.
Lambda Custom Authorizer ile Karşılaştırma: Doğru Yetkilendiriciyi Seçmek
API Gateway, Cognito User Pool yetkilendiricisinin yanı sıra, Lambda Custom Authorizer (Özel Lambda Yetkilendiricisi) seçeneği de sunar. Her ikisinin de kendine göre avantajları ve dezavantajları vardır:
| Özellik | Cognito User Pool Yetkilendiricisi | Lambda Custom Authorizer |
|---|---|---|
| Yönetim Kolaylığı | Tamamen yönetilen, yapılandırması kolay. | Lambda fonksiyonu yazmayı gerektirir, daha fazla yönetim. |
| Esneklik | Standart JWT doğrulamasına odaklı, belirli sınırlamalar var. | Herhangi bir kimlik doğrulama/yetkilendirme mantığını uygulayabilir (örneğin özel bir veritabanı, 3. taraf JWT sağlayıcılar). |
| Maliyet | Sadece API Gateway ve Cognito kullanımına bağlı. | API Gateway ve ek olarak Lambda çağrı maliyeti. |
| Performans | Düşük gecikme, yerel entegrasyon. | Lambda soğuk başlangıçları (cold start) nedeniyle daha yüksek gecikme olabilir. |
| Kullanım Alanı | Amazon Cognito tarafından yönetilen kullanıcılar ve OIDC/OAuth standartlarına uygun senaryolar. | Özel kimlik sağlayıcıları, karmaşık yetkilendirme mantığı veya çoklu kimlik doğrulama şemaları. |
Genel olarak, eğer kullanıcılarınız Amazon Cognito'da yönetiliyorsa ve standart OIDC/OAuth 2.0 tabanlı JWT doğrulama sizin için yeterliyse, Cognito User Pool yetkilendiricisi en basit, en uygun maliyetli ve en performanslı çözümdür. Ancak daha özel ve karmaşık yetkilendirme gereksinimleriniz varsa, Lambda Custom Authorizer daha fazla esneklik sunabilir.
Bu optimizasyon stratejileri, API Gateway ve Cognito entegrasyonunuzun sadece güvenli değil, aynı zamanda verimli, ölçeklenebilir ve maliyet-etkin olmasını sağlar. Doğru dengeyi bulmak, uygulamanızın uzun vadeli başarısı için kritik öneme sahiptir.
Sonuç: Güvenli ve Ölçeklenebilir API'ler İçin Anahtar
Bu kapsamlı rehber boyunca, AWS API Gateway ile Amazon Cognito User Pool yetkilendiricisinin entegrasyonunun modern, bulut tabanlı uygulamalar için neden vazgeçilmez bir güvenlik katmanı olduğunu detaylı bir şekilde inceledik. Temel kavramlardan adım adım kurulum süreçlerine, gerçek dünya senaryolarından ileri düzey optimizasyonlara kadar birçok önemli noktaya değindik. Görüldüğü üzere, bu entegrasyon, geliştiricilere hem güçlü bir güvenlik mekanizması sunuyor hem de kimlik yönetimi ve yetkilendirme süreçlerinin karmaşıklığını önemli ölçüde azaltıyor.
API Gateway, uygulamalarınız için bir ön kapı görevi görerek tüm API isteklerini merkezi bir noktadan yönetirken, Cognito User Pools ise kullanıcı kimlik doğrulamasını ve token üretimini üstleniyor. Bu iki servisin uyumlu çalışması sayesinde, API'lerinize yalnızca kimliği doğrulanmış ve uygun yetkilere sahip kullanıcıların erişimi sağlanıyor. Böylece, geliştiriciler, güvenlik endişeleriyle boğuşmak yerine, kendi iş mantıklarını geliştirmeye odaklanabiliyorlar. Ayrıca, AWS'nin sunduğu bu tam yönetilen hizmetler sayesinde, altyapı kurulumu, bakım ve ölçeklenebilirlik gibi operasyonel yükler de AWS tarafından üstleniliyor.
Önbellekleme, özel kapsamlar, çok faktörlü kimlik doğrulama ve WAF entegrasyonu gibi ek özelliklerle API'lerinizin güvenliğini ve performansını daha da artırabilirsiniz. Sonuç olarak, API Gateway'de Cognito User Pool yetkilendiricisini kullanmak, uygulamalarınız için sağlam, ölçeklenebilir ve maliyet-etkin bir güvenlik temeli oluşturmanın en etkili yollarından biridir. Bu rehberin, bu güçlü entegrasyonu anlamanıza ve kendi projelerinizde başarıyla uygulamanıza yardımcı olduğunu umuyoruz.
Sıkça Sorulan Sorular (SSS)
Bu bölümde, API Gateway'de Cognito User Pool yetkilendiricisi ile ilgili sıkça karşılaşılan soruları ve cevaplarını bulacaksınız.
Cognito User Pool Yetkilendiricisi ile Lambda Yetkilendiricisi arasındaki temel fark nedir?
Cevap: Temel fark, kimlik doğrulama mantığının nerede işlendiğidir. Cognito User Pool yetkilendiricisi, standart OIDC (OpenID Connect) ve OAuth 2.0 uyumlu JWT'leri (özellikle Cognito tarafından verilen token'ları) otomatik olarak doğrular. Bu, Cognito'yu kimlik sağlayıcı olarak kullandığınızda kurulumu kolay, yönetimi az olan bir çözümdür. Lambda Yetkilendiricisi ise, kimlik doğrulama ve yetkilendirme mantığını tamamen kendi yazdığınız bir Lambda fonksiyonuna devreder. Bu sayede özel bir veritabanı, üçüncü taraf bir kimlik sağlayıcı veya çok karmaşık iş mantığına dayalı yetkilendirme kuralları gibi her türlü senaryoyu uygulayabilirsiniz. Lambda yetkilendiricisi daha fazla esneklik sunarken, geliştirme ve bakım yükü de artar.
Refresh Token'lar API Gateway tarafından doğrulanır mı? Nasıl kullanılırlar?
Cevap: Hayır, Refresh Token'lar doğrudan API Gateway tarafından yetkilendirme için kullanılmaz veya doğrulanmaz. API Gateway, API isteklerindeki Access Token'ları doğrular. Refresh Token'lar, Access Token'ların süresi dolduğunda yeni bir Access Token ve ID Token almak için Cognito User Pools ile doğrudan iletişim kuran istemci uygulamalar (mobil, web) tarafından kullanılır. Bu, kullanıcının tekrar oturum açmasına gerek kalmadan uygulamanın kesintisiz çalışmasını sağlar. Genellikle, uygulamanızın SDK'sı (örneğin AWS Amplify) bu yenileme sürecini arka planda otomatik olarak yönetir.
API Gateway'de 401 Unauthorized hatası alıyorum, nasıl sorun giderebilirim?
Cevap: 401 Unauthorized hatası genellikle yetkilendirme sorunlarına işaret eder. İşte kontrol etmeniz gerekenler:
- Token Geçerliliği: Kullandığınız Access Token'ın süresinin dolmadığından emin olun.
- Token Formatı: İsteğinizin
Authorization: Bearer YOUR_ACCESS_TOKENformatında olduğundan emin olun. "Bearer" kelimesini unutmayın. - Cognito User Pool ID: API Gateway yetkilendiricisinde doğru Cognito User Pool ID'sini yapılandırdığınızdan emin olun.
- Uygulama İstemcisi ID (App Client ID): Access Token'ın verildiği uygulama istemcisi ID'sinin API Gateway yetkilendiricisi ile uyumlu olduğundan emin olun.
- CloudWatch Günlükleri: API Gateway ve Cognito'nun CloudWatch günlüklerini kontrol edin. Yetkilendirme hatalarının nedenini (örneğin imza doğrulama başarısızlığı, süresi dolmuş token, eksik kapsam) gösteren detaylı mesajlar bulabilirsiniz.
- API Dağıtımı: API Gateway'deki tüm değişikliklerinizi bir aşamaya dağıttığınızdan emin olun.
API Gateway ve Cognito entegrasyonunda özel kapsamlar (custom scopes) ne işe yarar?
Cevap: Özel kapsamlar, API'lerinizde daha ince taneli erişim kontrolü sağlamak için kullanılır. Bir kullanıcının kimliği doğrulanmış olsa bile, API'nin belirli bir işlevine (örneğin, "ürünleri oku" veya "ürünleri güncelle") erişebilmesi için gerekli olan spesifik izinleri tanımlamanıza olanak tanır. Cognito User Pool'unuzda özel kapsamlar tanımlayabilir ve uygulama istemcilerinize belirli kapsamları atayabilirsiniz. API Gateway'de, korunan bir metod için gerekli kapsamları belirterek, yalnızca Access Token'ında bu kapsamları içeren kullanıcıların o metoda erişmesine izin verebilirsiniz. Bu, güvenlik modelinizi "kullanıcı kimliği"nden "kullanıcının ne yapmasına izin verildiği" seviyesine taşır.