Merhaba Arkadaşlar,
Mobilhanem.com üzerinden anlattığımız AWS derslerimize bu yazımızda IAM Kimlikleri’nden (credentials) bahsedeceğiz. Özellikle mikro servis mimarilerinin artması ile beraber AWS servisleri ve kullanıcılar için güvenlik duvarları oluşturmak, doğru mimariyi yakalamak ve sistem güvenliğini maksimum seviyeye çıkarmak ilk ve elzem aşamalardan biridir. IAM kimlikler, Bir çok servis ile entegre olmasından dolayı diğer derslerimizde karşımıza sık sık çıkacağını söyleyebilirim.
AWS kimlikleri, açılan aws hesabını kullanan şahıs veya servisler için yaratılan farklı yetkilere sahip olan profillere denir. AWS’de karşımıza 3 farklı profil çıkmaktadır. Bunlar,
root Credentials
Hesaba bağlı tüm kaynaklara tam yetki ile bağlanmak için kullanılabilecek kimliktir. Kişisel veya araştırma amaçlı açılan hesaplar için kullanılabilir fakat büyük sistemlerde varlığı bile büyük güvenlik açığı oluşturabilmektedir.
Bazı farklı servisler root kimlik bilgilerine ihtiyaç duymaktadır. Bu nedenle kendisine bazı durumlar için ihtiyaç duyulmaktadır[1].
IAM User credentials
AWS hesabınıza birden farklı kişinin ve farklı amaçlar ile erişmesini istiyorsanız kullanmanızın kaçınılmaz olduğu bir özelliktir. Farklı insanlar için farklı kimlikler yaratabiliyorsunuz ve dinamik olarak kişilerin yetkilerini değiştirebiliyorsunuz.
Temporary credentials
AWS, STS( security Token Service)’si sayesinde kullanıcılarına belirli zaman aralığında kullanabilecekleri “token” sağlamaktadır. Bu tokenlar kullanıcılar ile paylaşılabilir ve belirli kullanıcılara belirli zaman aralığında belirli yetkiler sunabilirsiniz.
AWS kimlikleri nasıl kullanılır ?
Yukarıda teorik olarak tanımlamaya çalıştığımız IAM kimlikleri aslında “access key id” ve “access key” ikilisinden oluşmaktadır. Kişiler için rastgele üretilen ikili kodlar kişinin kullanım amacına göre farklı ortamlarda ve farklı şekillerde kullanılabilir. Mesela, açtığınız bir instance’da kullanabilir ya da farklı bir komutun içinde terminal ile kullanılmasını sağlayabilirsiniz.
AWS kimliklerini, AWS terminal arayüzü ya da API ile beraber kullanmak istiyorsanız eğer, kullanmayı hedeflediğiniz işletim sistemi üzerinde aşağıdaki aşamaları tekrar etmeniz yeterli olacaktır.
Linux işletim sistemi için, bir kaç çevre değişkenleri belirlemek ve anahtar çiftimizi belirtilen dizinde kopyalamak yeterlidir. Ayrıca, kullanılan servis uygulaması içinde veya API üzerinde açılacak istemcilerede açıkca verilebilir. AWS bu konuda kişiye, kendi servis ve yazılım mimarisine göre esneklik sunmaktadır.
- Dosya içinde saklamak için,
~/.aws/credentials dosyasını aşağıdaki gibi oluşturalım.
[default] aws_access_key_id={YOUR_ACCESS_KEY_ID} aws_secret_access_key={YOUR_SECRET_ACCESS_KEY} [profile2] aws_access_key_id={YOUR_ACCESS_KEY_ID} aws_secret_access_key={YOUR_SECRET_ACCESS_KEY}
Gördüğünüz gibi iki farklı profil oluşturduk. “AWS_PROFILE” çevre değişkenini değiştirerek istediğiniz profiller üzerinde gezebilir ve yetkileri bir anda değiştirebilirsiniz.
Ayrıca, “AWS_CREDENTIAL_PROFILES_FILE” çevre değişkeni de kişinin farklı konumdaki kimlik dosyalarının AWS’nin terminal arayüzü tarafından tanınmasını sağlamak için kullanılabilir.
- Direk Çevre değişkeni olarak saklamak için,
export AWS_ACCESS_KEY_ID=your_access_key_id export AWS_SECRET_ACCESS_KEY=your_secret_access_key
NOT: Eğer kullanacağınız servis AWS tarafından hizmete sunulan EC2 makinası ise, yetkileri tanımlanmış bir rolü makinaya atamak yeterli olacaktır.
AWS istemcisi ya da API’sı sırasıyla,
*komut satırında girilen access key ve id,
* çevresel değişkenler,
* kimlik dosyası,
* [istemci için geçerli]komut konfigurasyon dosyası (~/.aws/config)
* EC2 makinası ise Rolü
bakar. Eğer bir tanesi yok ise bir sonraki kontrol edilir ve sistem böyle devam eder. Böylelikle makinalara özel kimlikler, makinaların içinde bulunan uygulamanızın özel komutlarına farklı roller ya da kimlikler verebilirsiniz. Böylelikle, her makinenin farklı rolleri olabilir ve makine içindeki farklı işlemlerinde kendine özgü farklı rolleri olabilir.
Örnek vermek gerekirse,
Java API’si kullanılarak yazılan bir servis çalıştırıyorsunuz. Servisiniz Amazon üzerinde çalışan bir EC2 makinasında çalışıyor ve kendisine AWS nin S3 dosyalarına yazma okuma silme yetkisi verilmiş. Fakat, sizin S3 dosyalarınızı okuyan bir işleminiz var ve bu işi bir başka kişinin verisini silmesini istemiyorsunuz.
Özel yekileri olan bir AWS kimliğini çevre değişkeni olarak vererek makina üzerindeki her işleme s3 yazma veya silme yetkisi verebiliriz. Böylelikle, instance içinde S3 dosyası silebilen ve yazabilen veya sadece yazabilen işlemler olabilir. Aşağıdaki gibi yaratılan bir s3 istemcisi herhangi bir dosyayı silebilir ve ya dosya yükleyebilir.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(Regions.US_WEST_2) .build();
Fakat, sadece okuma yetkisi olan farklı bir kimlik verilirse, kişi artık herhangi bir dosyayı silemez . Böylelikle daha güvenli ve sürdürülebilir bir sistem yaratılabilir.
BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key_id"); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build();
IAM kimliği yaratma
Iam servisi sekmesinden sol taraftaki user sekmesi ile beraber kullanıcı sayfasına ulaşıyoruz. Önceden yaratılan kullanıcıları bu pencereden görebilirsiniz. “Add User” ile beraber aşağıdaki sekmeleri takip ederek kullanıcı ekleyebiliriz.
- Kullanıcı ismini ve kullanıcı tipini belirliyoruz. Kullanıcının sisteme api veya istemci ile mi bağlanacağını burada belirliyoruz.
- Bu aşamada kullanıcıları ihtiyaca göre grup yaratıp gruplara bölebiliyoruz. Ayrıca, kullanıcıları başka kullanıcının özelliklerini kopyalayarak veya var olan “policy”‘leri ekleyerek oluşturabiliyoruz.
- Son olarak, yaptığımız işleri tekrar gözden geçirerek kullanıcıyı yaratabiliriz. User yaratıldıktan sonra key id’sini ve key’i görebilir ve .csv formatı olarak indirebilirsiniz.
“User” sayfasından önceden yaratılan kullanıcıların izinlerini değiştirebilir veya kullanıcıları tamamen yok edebilirsiniz.
AWS Derslerimizden IAM kimlikleri dersimizin de sonuna gelmiş bulunuyoruz.
AWS Derslerimize tıklayarak devam edebilirsiniz.
[1] http://docs.aws.amazon.com/general/latest/gr/aws_tasks-that-require-root.html
0