Day 21: AWS IAM Politikaları ve Yönetimini Terraform ile Kurulumu
Bulut ortamlarında güvenlik, her zaman en üst önceliklerden biridir ve AWS Identity and Access Management (IAM), bu güvenliğin temel taşını oluşturur. IAM, AWS kaynaklarınıza kimlerin erişebileceğini ve hangi eylemleri gerçekleştirebileceğini kontrol etmenizi sağlar. Ancak büyük ve dinamik altyapılarda IAM politikalarını manuel olarak yönetmek hem zaman alıcı hem de hata riskini artıran bir süreçtir. İşte tam bu noktada, altyapıyı kod olarak (Infrastructure as Code – IaC) yönetme aracı olan Terraform devreye girer. Bu makalede, Day 21 kapsamında AWS IAM politikalarını ve yönetimini Terraform kullanarak nasıl otomatize edeceğimizi, en iyi uygulamaları ve detaylı örnekleri ele alacağız.
Neden IAM Güvenliği Kritik?
AWS IAM, bulut altyapınızın kapısıdır. Yanlış yapılandırılmış bir IAM politikası, yetkisiz erişime, veri ihlallerine veya hizmet kesintilerine yol açabilir. Bu nedenle, kimlik ve erişim yönetimini doğru bir şekilde yapılandırmak, genel güvenlik duruşu için hayati öneme sahiptir. IAM, kullanıcıların, grupların ve rollerin AWS kaynaklarına erişimini detaylı bir şekilde kontrol etme yeteneği sunar.
Terraform’un IAM Yönetimindeki Rolü
Terraform, AWS IAM kaynaklarını tanımlamanıza, dağıtmanıza ve yönetmenize olanak tanır. Politikaları, rolleri, kullanıcıları ve grupları kod olarak tanımlayarak, tekrarlanabilir, sürdürülebilir ve denetlenebilir bir süreç oluşturursunuz. Bu yaklaşım, manuel hataları azaltır, değişiklikleri izlemeyi kolaylaştırır ve “altyapı sürüklenmesi” (drift) riskini minimize eder. Terraform ile IAM yönetimi, güvenlik ve operasyonel verimliliği bir araya getirir.
Day 21 Kapsamında Ne Öğreneceğiz?
Bu bölümde, AWS IAM’in temel bileşenlerini, Terraform ile bunların nasıl tanımlanacağını, en iyi güvenlik uygulamalarını ve yönetim stratejilerini adım adım inceleyeceğiz. Amacımız, güçlü ve güvenli bir IAM yapısını Terraform kullanarak otomatize etme yeteneği kazanmaktır.
AWS IAM Temelleri ve En İyi Uygulamalar
IAM Kimlikleri: Kullanıcılar, Gruplar ve Roller
AWS IAM’de üç temel kimlik türü bulunur:
- Kullanıcılar (Users): AWS ile etkileşim kuran bireyler veya uygulamalar için kalıcı kimliklerdir. Her kullanıcının kendi kimlik bilgileri (parola veya erişim anahtarları) bulunur.
- Gruplar (Groups): Birden fazla kullanıcıyı bir araya getirmek için kullanılır. Bir gruba uygulanan politikalar, o gruptaki tüm kullanıcılara otomatik olarak uygulanır. Bu, izin yönetimini basitleştirir.
- Roller (Roles): Kullanıcılar, uygulamalar veya AWS hizmetleri tarafından üstlenilebilen geçici kimliklerdir. Roller, kalıcı kimlik bilgileri yerine geçici güvenlik kimlik bilgileri sağlar ve genellikle çapraz hesap erişimi veya AWS hizmetlerine yetki vermek için kullanılır.
IAM Politikaları: İzinlerin Kalbi
IAM politikaları, AWS kaynakları üzerinde hangi eylemlere izin verildiğini veya reddedildiğini tanımlayan JSON formatındaki belgelerdir. Politikalar, kullanıcılar, gruplar veya rollere atanabilir. Bir politika, bir veya daha fazla ifade (statement) içerir ve her ifade aşağıdaki öğeleri belirtir:
- Effect: İzin (Allow) veya Reddet (Deny)
- Action: İzin verilen veya reddedilen AWS API eylemleri (örn.
s3:GetObject,ec2:RunInstances) - Resource: Eylemin uygulanacağı AWS kaynağı (örn.
arn:aws:s3:::my-bucket/*) - Principal: Politikayı uygulayan kimlik (sadece kaynak tabanlı politikalarda kullanılır)
- Condition: İznin geçerli olması için karşılanması gereken koşullar (örn. IP adresi, MFA durumu)
En Az Ayrıcalık Prensibi (Least Privilege)
En az ayrıcalık prensibi, kullanıcılara, gruplara veya rollere yalnızca görevlerini yerine getirmek için kesinlikle gerekli olan minimum izinleri vermeyi savunur. Bu, yetkisiz erişimden kaynaklanan güvenlik risklerini önemli ölçüde azaltır. Terraform ile IAM politikaları tanımlarken, bu prensibi her zaman göz önünde bulundurmalısınız.
Multi-Factor Authentication (MFA) Önemi
MFA, AWS hesabınızın güvenliğini artırmak için kritik bir adımdır. Kullanıcı adı ve parolaya ek olarak, fiziksel bir cihaz veya sanal bir uygulama aracılığıyla ikinci bir doğrulama faktörü gerektirir. Özellikle root kullanıcı ve yönetici ayrıcalıklarına sahip kullanıcılar için MFA’nın zorunlu kılınması şiddetle tavsiye edilir.
Terraform ile IAM Politikalarını Tanımlama
aws_iam_policy Kaynağını Kullanma
Terraform’da özel IAM politikaları oluşturmak için aws_iam_policy kaynağını kullanırız. Bu kaynak, politika belgesini (JSON formatında) ve politikanın adını alır.
resource "aws_iam_policy" "s3_read_only_policy" {
name = "S3ReadOnlyAccessPolicy"
description = "S3 bucketlarına salt okunur erişim sağlar."
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"s3:GetObject",
"s3:ListBucket",
]
Effect = "Allow"
Resource = [
"arn:aws:s3:::my-data-bucket",
"arn:aws:s3:::my-data-bucket/*",
]
},
]
})
}
JSON Politika Dokümanları Oluşturma
Yukarıdaki örnekte gördüğünüz gibi, politika içeriği JSON formatında policy argümanına geçirilir. Terraform'un jsonencode fonksiyonu, HCL'den JSON'a dönüştürmeyi kolaylaştırır. Karmaşık politikalar için ayrı bir .json dosyası oluşturup file() fonksiyonu ile okumak da mümkündür, ancak küçük politikalar için doğrudan HCL içinde tanımlamak genellikle daha pratiktir.
resource "aws_iam_policy" "ec2_read_only_policy" {
name = "EC2ReadOnlyAccessPolicy"
description = "EC2 kaynaklarına salt okunur erişim sağlar."
policy = file("policies/ec2-read-only.json")
}
policies/ec2-read-only.json dosya içeriği:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:Get*",
"ec2:ReportInstanceStatus"
],
"Resource": "*"
}
]
}
Politika Versiyonlama ve Güncelleme
IAM politikalarında yapılan her değişiklik, yeni bir versiyon olarak kaydedilir. AWS, bir politikanın en fazla 5 versiyonunu tutar. Terraform ile bir politikayı güncellediğinizde, Terraform mevcut politikayı değiştirir ve AWS otomatik olarak yeni bir versiyon oluşturur. Bu, değişikliklerin izlenebilirliğini artırır ve gerekirse önceki versiyonlara geri dönme imkanı sunar.
IAM Rolleri ve Güven İlişkileri (Trust Policies) ile Çalışma
aws_iam_role Kaynağı
IAM rolleri, AWS hizmetleri, federasyon kullanıcıları veya başka AWS hesapları tarafından üstlenilebilen geçici kimliklerdir. Terraform'da aws_iam_role kaynağını kullanarak bir rol tanımlarız.
resource "aws_iam_role" "my_ec2_instance_role" {
name = "MyEC2InstanceRole"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "ec2.amazonaws.com"
}
},
]
})
tags = {
Environment = "Development"
}
}
