Merhaba Mobilhanem.com okurları , AWS Dersleri’mizde bu dersimizde AWS Cognito‘dan bahsedeceğiz
Günümüzde bulut sistemleri ile geliştirilen ürünlerde güvenlik en büyük kalemlerden birini oluşturmaktadır. Bir çok ürün performans, sağlamlık ve esneklik açısından tam not almış olsa da kurumsal firmalara hitap edebilmesi için güvenliğin de diğer özelliklerin yanına gelmesi gerekmektedir.
Servislerde Kullanıcı Güvenliği nedir ?
Güvenlik kavramı farklı bakış açıları sebebiyle farklı anlamlar kazanmaktadır. Bir web sunucusu için Authentication ve Authorization’den oluşmaktayken bir api için user key’lerinin sağlıklı yönetilmesi olabilir. Bu yazımızda “Authentication” ve “Authorization” üzerinde konuşacağız ve AWS cognito ile neler kazandığımızdan bahsedeceğiz.
Authentication (Doğrulama)
Web ya da mobil sunucuları için doğrulama kişinin kullanıcı adı ve şifresi ile yapılmaktadır. Fakat artık bunların ötesinde ikinci bir doğrulama kodu kullanılmaya başlanmıştır.
Bunlardan bazıları SMS ile atılan kodlar veya sesli mesajlar diyebiliriz. Ayrıca, Zaman odaklı çalışan algoritmalar sayesinde kullanıcıda çalışan sistem ile sunucudaki sistem ortak bir kod üreteci kullanmaya başlar ve böylelikle şifre’den başka devamlı değişen ikinci bir kod hayatımıza girmiş olur.
MFA( multi factor authentication) kavramı kişinin bir den çok farklı doğrulama işlemi yapması olarak açıklanabilir. Genellikle kişinin cep telefonu ile sunucu arasındaki anlaşma ile sağlanır. Kişi sisteme kayıt olduğunda kişinin telefonu ile sunucu arasında bir anahtar paylaşılır. Paylaşılan algoritma ile anlık zaman değişimi sayesinde kişiye özel periyodik kodlar üretilir. Telefon ile karekod okutarak ve açık anahtar algoritmaları yardımıyla oluşturulan algoritmalar kullanıcı telefonu ile sunucu konuşmadan aynı kodu üretmelerini sağlamaktadır.
Authorization (yetkilendirme)
Genellikle doğrulama ve yetkilendirme işlemleri birbirleri ile çok fazla karıştırılan kavramlardır. Karışık sistemlerde genellikle sadece kişinin bir yere kayıt olması ve doğrulama aşamalarını geçmesi yeterli değildir. Kişinin neler yapabileceğini kontrol eden ve onaylayan bir alt sisteme daha ihtiyaç vardır. Bu sistem yetkilendirme olarak adlandırılmaktadır.
Bu ihtiyaç doğrultusunda yetkiler gruplandırılır ve kişiler gruplara dahil edilip ve çıkarılarak yönetim gerçekleştirilir.
AWS IAM servisi sayesinde kişiler aws kaynaklarına erişimi user ve group oluşturarak ve grouplara policy’ler takarak sağlamaktadır. Bu konuda detaylı bilgi için bu yazıya bakabilirsiniz.
AWS Cognito
Authentication ve Authorization kavramlarını açıkladıktan sonra şimdi AWS nin cognitonun bu sorunlara nasıl çözüm getirdiğini inceleyebiliriz. AWS, kişilerin kendi ürünlerinde kullanmaları için yetenekli bir servis sunmaktadır. Mobil uygulamalar tarafından ya da web client’lar tarafından kişilerin authentication’ı sadece aws servisi ile konuşarak yönetilebilmektedir. Ayrıca, Başka bir Identity provider ile entegrasyonu cognito sayesinde hızlıca sağlanabilmektedir.
Örneğin,
AWS kaynakları ile geliştirdiğiniz bir sistem hayal edelim. AWS kaynaklarından bazılarına tüm istemciler bazılarına sadece bazı üyeler erişecektir. IAM rolleri yaratarak kolaylıkla bunu sağlayabilir ve erişimi yönetebilirsiniz. 2 tane iam rolü yaratıyor ve AWS Cognito pool ayarlarından rolleri tanımlıyoruz. Böylelikle cognito’da yaratılan api url’ine giden requestlerin hepsi tüm istemcilere verilen izinler doğrultsunda çalışabilmektedir. Fakat, sadece üye olanların yapacakları başka bir IAM rolünde tanımlandığı için o işlemler ancak üye olduktan sonra gerçekleştirilebilir.
Linkten ulaşabileceğiniz örnek proje üzerinden devam edecek olursak eğer projede üye olmayan insanların hiç bir şey yapamadığını fakat üyelik sonrası s3 bucket’larını okuma yetkisi olduğunu göreceksiniz.
Üyelik oluşturma:
signUp işlemi için sadece Request objesini kullanıcının bilgileri ile doldurmak ve request göndermek yeterlidir. Sonrasında kişinin kullanımına göre onay beklendiği durumlarda kişinin bilgileri ile SMS veya mail ile gönderilen kod AWS cognito’ya tek request objesinde gönderilir. Böylelikle hem confirmation hem de üyelik işlemi 2 request ile tamamlanmış olur.
Üye Girişi
Öncelikle Authentication başlatılması için request gönderilir. Gönderilen Requestin içeriğinde challenge kodu bulunmaktadır. Bu kodu kullanarak SRP protokolünü password ile beraber uygularsınız ve çıkan sonuç validation için servis’e gönderilir. Gönderilen cevapta kişinin session bilgileri varsa eğer üye girişi yapılmış demektir. Fakat, yeni bir challenge daha gelmiş olabilir. Örneğin,Kişinin üyeliği için kişiye SMS onay kodu gönderiliyor ise gelen response ile beraber SMS kodu tekrar gönderilir ve işlem tamamlanır.
Kurulum ve önemli konfigurasyonlar
AWS Cognito kullanmak için bir tane pool yaratmanız gereklidir. Yaratılan pool yaratılma aşamasında sistemin çalışması için gerekli bir çok değişken bulunmaktadır. Üyelerin nasıl üye olabileceği, ne tür şifre belirleyebileceği gibi. Bunlar yaratıldıktan sonra aşağıdaki listeden (sadece önemli gördüklerimi yazdım) farklı konfigurasyonlar yapabilirsiniz.
- General Settings
- Users and Groups
- App Clients Settings
- Triggers
- MFA and Verifications
- ..
- App Integration
- App client Settings
- Domain Name
- UI Customization
- Resource Servers
Örneğin,
- kişilere gidecek onay maillerini ya da mesajlarını belirleyebilir ya da Triggers kısmında yazan eventler olduğunda AWS lambda’da bulunan lambdalarınızı çağırabilirsiniz. Authentication olmadan önce ya da olduktan sonra veya confirmation aşamasında lambda ile araya girip farklı kodlar çalıştırabilirsiniz.
- AWS Cognito’nun en dikkat çeken özelliği AWS’nin authentication sistemini kullanabilir ve AWS kaynaklarını kullanıcı bazlı yönetebilmeniz dışında farklı Authentication sistemlerini de kullanabiliyor olmanızdır. Bu işlemi Identity Provider sekmesinden kolaylıkla yapabilirsiniz.
- Kendi App’inizi sisteme APP integration kısmı ile tanımlıyorsunuz. İsterseniz custom bir signIn page tasaralayıp onu sunabiliyorsunuz. Konsol üzerinden tanımladığınız callback ve sign out URL’leri sayesinde kişinin nerelere yönlendirileceğini de belirleyebiliyorsunuz.
- Erişimi kontrol ettiğiniz bir Resource server’iniz var ise bunu AWS cognito’da tanımlayabilir ve access token’ları oradan yönetebilirsiniz. Böylelikle, AWS’nin sunduğu Access token yerine kendi Auth 2.0 Resource server’ini kullanabilirsiniz.
AWS Cognito uğraştıkça sizlere süprizler sunabilen servislerden birtanesidir. Bu servisi kullanarak developer’lar güvenlik açısından yapması gereken bir çok sorumluluğu güvenebileceği bir sisteme vermiş oluyor. Ayrıca, yoğun dönemlerde esneklik sağlama gibi scalibility problemlerini de ortadan kaldırmış bulunuyorsunuz.
AWS ile diğer derslerimize buradan ulaşabilirsiniz.
3