Yazılım Mimarileri ve Tasarım Desenleri Üzerine

.NET – Lambda Authorizer İle Amazon API Gateway’in Güvenliğini Sağlama

Merhaba,

Bu içeriğimizde, önceden .NET 7 – AWS Lambda İle Serverless Computing ve .NET İle Amazon API Gateway – AWS Lambda & DynamoDB Entegrasyonu başlıkları altında kaleme aldığımız makalelerimizde incelediğimiz AWS Lambda ve Amazon API Gateway konularının güvenliğini sağlayabilmek için Amazon tarafından sunulan Lambda Authorizer özelliğini inceleyecek ve teknik olarak nasıl yapılandırıldığını tecrübe ediyor olacağız.

Lambda Authorizer Nedir?

Oluşturduğumuz AWS Lambda Function’larını kullanabilmek için Amazon API Gateway tarafından üretilmiş olan endpoint’lere karşın erişim haklarını yönetmek için kullanılan esnek, yapılandırılabilir bir yetkilendirme mekanizmasıdır.

Lambda Authorizer iki farklı türde mevcuttur;

Lambda Authorizer Workflow’u Nasıldır?

Amazon API Gateway üzerinden AWS Lambda Function’larına yapılan istek süreçlerinde Lambda Authorizer’ın sergilediği davranışı anlayabilmek için aşağıdaki iş akışı diyagramına göz atabilirsiniz.

Tüm bu süreçte lambda authorizer ayarlarında önbelleğe alma(caching) etkinleştirildiyse eğer API Gateway bu policy’i önbelleğe alacaktır ve böylece bir sonraki request’te lambda authorizer sürecinin yeniden çalıştırılmasına gerek kalınmayacaktır.

.NET İle Lambda Authorizer Kullanımı

Şimdi .NET ile lambda authorizer kullanımını pratiksel olarak inceliyor olacağız. Bunun için örnek olarak bir önceki .NET İle Amazon API Gateway – AWS Lambda & DynamoDB Entegrasyonu başlıklı makalede oluşturduğumuz şu projeyi temel olarak baz alıyor olacağız.(İlgili makaledeki çalışmayı bu içeriğimiz için ben deniz baştan sona farklı bir projede tekrar geliştirmiş bulunuyorum. Bu içerikle birlikte geliştirilmiş nihai projeyi makalemizin sonundaki github adresinden edinebilirsiniz.)

Bir API Gateway’in tüm endpoint’lerine tek bir Lambda Authorizer eklenebileceği gibi her bir endpoint için ayrı Lambda Authorizer’da oluşturulabilir. Bu tamamen sizlerin tercihine, kullanım durumuna ve işin gereğine bağlıdır.

Altyapı projemizdeki genel davranışı hızlıca anımsarsak eğer; ‘persons’ adında bir DynamoDB tablosuna veri ekleyen, eklenmiş olan tüm person’ları elde eden ve id bazlı sorgulama gerçekleştiren üç adet lambda function’ımız mevcuttur. Ayrıca bu function’lara dışarıdan erişim göstermemizi sağlayan ve üç adet endpoint’e sahip olan API Gateway tasarlanmıştır. Şimdi bizler Lambda Authorizer ile bu endpoint’lerin güvenliğini sağlamaya çalışıyor olacağız. Bunun için iki yol benimseyeceğiz;

1. Yol 2. Yol
Username, password vs. gibi gönderilen kimlik bilgilerini(credentials) okuyacak ve bunları doğrulayacak bir lambda function geliştireceğiz. Bu doğrulama neticesinde bir JWT döndürecek ve client’ı böylece yetkilendireceğiz. Client elde edeceği bu JWT değeri ile request’lerini gerçekleştirecektir.

Yani anlayacağınız authentication sorumluluğunu üstlenecek bir uygulama oluşturacağız.

Lambda Authorizer, özünde authorizer olarak davranış sergileyen ap ayrı bir AWS Lambda projesidir. Yani function’dır. Bu function’ın sorumluluğu, client’lar tarafından yapılan istek süreçlerinde tarafımıza iletilen JWT değerlerini doğrulamaktır. Bu doğrulama neticesinde hedef lambda function tetiklenecek yok eğer doğrulama gerçekleşmezse Amazon API Gateway tarafından yorumlanabilecek/anlaşılabilecek bir IAM politikası döndürülecektir.

Bu da bir authorization sorumluluğu üstlenecek uygulama olacaktır.

O halde hadi başlayalım…

Authentication uygulamasını geliştirme;

Evet, görüldüğü üzere authentication uygulamasını başarıyla geliştirmiş bulunuyoruz. Şimdi sıra authorization uygulamasında…

Authorization(Lambda Authorizer) uygulamasını geliştirme;

Evet… Görüldüğü üzere Lambda Authorizer yapılandırması işte bu kadar 🙂 Kıssadan hisse yaparsak, bir authentication bir de authorization işlemlerinin sorumluluğunu üstlenen ayrı function’lar tarafından rahatlıkla gerçekleştirilebilmekte ve hangi endpoint’i koruyacaksak ilgili authorization uygulaması onunla eşleştirilmektedir.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Not : Örnek projeyi aşağıdaki github adresinden edinebilirsiniz.
https://github.com/gncyyldz/AWS.Lambda.Authorizer.Example

Mobil sürümden çık