Sitemap
Cloud Türkiye

We write, talk and discuss the cloud.

Amazon RDS — AWS IAM (Veritabanlarınıza güvenli bir şekilde bağlanın)

--

Herkese merhaba, ben Azmi Mengü. Medium üzerindeki ilk blog yazım ile karşınızdayım. Uzun yıllardır yazılım sektöründe edindiğim tecrübe ve birikimleri belirli aralıklarla sizlere aktarmaya çalışacağım.

Bu yazıda Amazon RDS servisindeki bir veritabanımıza, AWS IAM servisini kullanarak, uygulamalarımızın daha güvenli bir şekilde bağlantı kurmasını sağlayacağız. Uygulama örneğini ise Node.js ile gerçekliyor olacağız.

Motivasyon

  • Veritabanı bilgilerini uygulamalar ile paylaşmamak
  • Veritabanı erişimlerini AWS üzerinden ve kullanıcı bazlı anlık olarak kontrol edebilmek

Neler Gerekli

  • AWS hesabı
  • AWS CLI
  • Amazon RDS üzerinde koşan bir veritabanı (PostgreSQL ya da MySQL kullanabilirsiniz)

Uygulamaya geçmeden önce gerçekleyeceğimiz mimariyi aşağıdaki şekil yoluyla kısaca bir anlayalım.

Connect Amazon RDS with AWS IAM

Önceden uygulamalarımız veritabanına bağlantı sağlarken; host, kullanıcı adı ve şifre kullanarak bağlantılar sağladığını düşünelim.

Yeni yapıyla birlikte uygulamamız bir AWS IAM rolü kullanarak, bu rolün vermiş olduğu yetkilerle birlikte Amazon RDS veritabanına bağlantı sağlamayı mümkün kılmakta. Bunu yaparken uygulama içerisinden RDS’e bağlanabileceğimiz bir Token sahibi oluyor ve bu Token ile veritabanı işlemlerimizi gerçekleştiriyoruz.

Amazon RDS, AWS IAM ve Node.Js ile ilgili detaylara bu yazıda giriş yapılmayacaktır. Yazının içeriği dahilinde, sadece ilgili alanlardaki işlemleri gerçekleştireceğiz.

Amazon RDS Ayarları ve Gerekli Bilgiler

Amazon RDS servisimizdeki makine detayına girdikten sonra “Configuration” kısmından ARN (Amazon Resource Name) ve Resource id bilgillerimizi alıyoruz.

Amazon RDS database configuration

Bununla beraber, RDS Dashboard’unda makinemizi seçtikten sonra “Modify” aksiyonuyla birlikte, veritabanı ayarlarımızdan “Database authentication” kısmına gelerek RDS makinemize şifre ve IAM ile bağlanma opsiyonunu etkinleştiriyoruz.

Amazon RDS database authentication

Amazon RDS kısmındaki yapmamız gerekenler bu kadar. Şimdi RDS’e bağlantı için gerekli AWS IAM ile ilgili işlemlere geçebiliriz.

AWS IAM Role ve Policy Yaratma

AWS IAM servisinden, daha sonra başka rol ve kullanıcılar için de kullanabileceğimiz bir “Policy” oluşturalım. Bu Policy’i yaratırken yukarıda bilgilerini almış olduğumuz RDS makinemizin ARN ve Resource id bilgilerini kullanacağız.

Oluşturacağımız Policy’nin “Resource” alanına ARN ve veritabanımızın Resource ID’si ile birlikte yukarıda gösterildiği gibi giriş yapıyoruz. Yaratmış olduğumuz Policy’i bir Role’e ya da bir User’a direkt olarak bağlayarak bu kısmı da tamamlayalım.

Kullanmış olduğunuz lokal makineniz ya da EC2, ECS, EKS gibi sistemler için ilgili kullanıcı/rol bağlantısını gerçekleştirdikten sonra Amazon RDS’i, AWS IAM aracılığıyla kullanmaya başlayabiliriz!

Veritabanı kullanıcısı “rds_user” da nereden çıktı? Şu an ne yapmam gerekiyor bilmiyorum. İşe yaramaz bir blog post okudum.

Demeyin. Şimdi her şey tamam gibi gözüküyor. Bir noktayı daha ekleyelim. İlk kısımda ilgili RDS makinemizde, bağlantı yapacağınız veritabanı için AWSAuthenticationPlugin’iyle yetkilendirme yapabilecek bir kullanıcı yaratıyoruz. İkinci kısımda bu kullanıcı için “development” veritabanındaki yetki alanı ve aksiyonlarını belirliyoruz.

CREATE USER rds_user IDENTIFIED WITH AWSAuthenticationPlugin AS ‘RDS’;GRANT ALL ON development.* TO ‘rds_user’@’%’;

Her şey bu kadar :)

Örnek Node.js Uygulamasına Yakından Bakış

Şimdi Sequelize kütüphanesini kullanarak RDS üzerinde çalışan bir MySQL veritabanımıza Node.js uygulamamızdan nasıl bağlandığımıza yakından bir bakalım.

Burada aws-sdk kütüphanesini kullanarak “RDS.Signer” metodu ve mevcut yetkilerimiz yardımıyla bir Token isteğinde bulunuyoruz. Bu Token’ı veritabanımıza bağlanırken, password alanı yerine koyuyoruz ve ilgili veritabanı bağlantı işlemi gerçekleşmiş oluyor. 🎉

Tamamlanmış örnek proje için Github linkini ziyaret edebilirsiniz.

--

--

Azmi Mengü
Azmi Mengü

Written by Azmi Mengü

Software Architect, AWS Community Builder

No responses yet