AWS Secrets Manager & Parameter Store: Güvenlik Best Practices
AWS Secrets Manager ve Systems Manager Parameter Store'u karşılaştıran kapsamlı teknik rehber - hangi servisi ne zaman kullanmalı ve gerçek dünya implementation pattern'leri.
AWS'de çalışan mühendisler sık sık aynı dilemmayla karşılaşır: secrets management için Secrets Manager mi yoksa Parameter Store mu kullanmalı? Her iki servis de sensitive data saklıyor ama farklı amaçlara hizmet ediyorlar ve farklı maliyet yapıları var. Bu rehber teknik karar kriterleri, complete implementation pattern'leri ve gerçek dünyadan öğrenilmiş dersleri içeriyor. Kısa kural: statik config → Parameter Store; RDS şifreleri ve rotation → Secrets Manager.
Servisleri Anlamak
Implementation'a geçmeden önce, bu servisler arasındaki teknik farkları ortaya koyalım. Cross-account secret paylaşımı gerekiyorsa Secrets Manager resource policy'leri daha esnek; Parameter Store için RAM (Resource Access Manager) kullanırsınız.
Servis Karşılaştırması
Önemli Teknik İçgörü: Parameter Store SecureString ile KMS encryption kullanır ve ücretsiz temel secrets management sağlar. Secrets Manager buna otomatik rotation, native RDS entegrasyonu ve staging label'ları ile built-in versioning ekler.
Karar Framework'ü
Doğru servisi seçmek için bu teknik decision tree'yi kullan:
Maliyet Analizi Örneği:
- 10 statik API key → Parameter Store Standard: $0/ay
- 5 RDS password rotation ile → Secrets Manager: $2.00/ay
- 20 configuration value → Parameter Store Standard: $0/ay
- Toplam: 10.00/ay
Cross-Account Secret Sharing
En yaygın requirement'lardan biri AWS account'ları arasında secret paylaşımı. İşte complete implementation pattern:
Architecture Genel Bakış
Implementation - Account A (Secret Owner)
Implementation - Account B (Secret Consumer)
Warning: Account B'de KMS decrypt permission'ını unutmak yaygın bir hatadır. Secrets Manager policy doğru olsa bile secret retrieval "AccessDeniedException" ile fail olur.
Troubleshooting: CloudTrail'de error code'lu KMS API call'larını kontrol et. "AccessDenied" ile fail olan "Decrypt" operation'larına bak.
Parameter Store Reference Pattern
Parameter Store API'yi standardize ederken gerçek secret'ları Secrets Manager'da saklayabilirsin:
Application code'unda sadece Parameter Store SDK gerekir:
Fayda: Basitleştirilmiş application code, tek API surface area, servisler arası daha kolay migration path.
Container Secrets Injection
Container'lara secret inject etmek için birden fazla pattern var, her birinin farklı trade-off'ları var.
Pattern A: Environment Variable Injection (ECS)
Bu native ECS yaklaşımı - secret'lar container startup'ında inject ediliyor.
Raw Task Definition JSON:
Warning: Secret'lar SADECE container startup'ında inject edilir. Rotate edilen secret'lar container restart (yeni task launch) gerektirir.
Pattern B: Runtime Retrieval with Caching
Restart olmadan rotation handle etmesi gereken uygulamalar için:
Maliyet Analizi:
- Startup injection: Container başına 1 API call (~$0.05/10,000 call)
- 5 dakikalık cache ile runtime retrieval: Container başına
288 API call/gün ($1.44/ay) - Her request'te runtime retrieval: Binlerce API call olası (pahalı, tavsiye edilmez)
Pattern C: AWS Parameters and Secrets Lambda Extension
Lambda function'lar için built-in caching sağlayan extension'ı kullan:
Faydaları:
- Built-in caching (API call'ları ~%90 azaltır)
- Caching için application logic'te değişiklik gerektirmez
- Hem Secrets Manager hem Parameter Store'u destekler
Deployment:
Tip: Lambda extension API call'ları %99 azaltır. Yüksek trafikli function'lar için maliyet 0.05/ay'a düşer.
EKS Secrets with CSI Driver
EKS üzerinde Kubernetes workload'ları için native entegrasyon sağlayan Secrets Store CSI Driver'ı kullan.
Architecture Setup
SecretProviderClass Configuration
IRSA ile Pod Configuration
Pod Identity için IAM Role
Önemli Fark - IRSA vs Pod Identity:
- IRSA (eski metod): OIDC provider setup gerektirir, EKS 1.17+ ile çalışır
- Pod Identity (yeni metod, 2024+): Basitleştirilmiş setup, daha iyi performance, EKS 1.24+ gerektirir
Secret Rotation Implementation
Otomatik rotation Secrets Manager'ın önemli faydalarından biri. İşte doğru implementation:
Rotation Flow
Lambda Rotation Function - RDS MySQL
CDK Setup for Rotation
Built-in destekli RDS database'leri için:
Custom uygulamalar için:
Warning: Yaygın hatalar:
- Network Access: Lambda'nın database'e erişmek için VPC access'e ihtiyacı var. VPC subnet'leri doğru configure et.
- Timeout: Default 3 saniye çok kısa. Rotation için 5 dakikaya ayarla.
- Permission'lar: Lambda'nın secret'a hem read hem write ve KMS decrypt/encrypt permission'ları gerekir.
- Idempotency: Yeni oluşturmadan önce AWSPENDING version'ının var olup olmadığını her zaman kontrol et.
- Connection Pooling: Eski password kullanan açık connection'lar otomatik olarak yeni password'u almaz. Uygulamalar connection refresh'i handle etmeli.
Alternating Users Strategy
High-availability uygulamalarda zero-downtime rotation için:
Architecture:
- İki database user:
app_user_aveapp_user_b - Her iki user'ın da identik permission'ları var
- Rotation hangi user'ın password'ünün güncelleneceğini alterne eder
- Uygulama rotation sırasında her zaman bir geçerli credential'a sahip
Faydaları:
- Downtime penceresi yok
- Aktif connection'lar rotation sırasında çalışmaya devam eder
- Connection refresh handle edemeyecek uygulamalar için uygun
Trade-off: User'ları clone etmek için ayrı bir secret'ta superuser credential'ları gerektirir.
Multi-Region Secrets Replication
Disaster recovery senaryoları için Secrets Manager otomatik replication destekler.
Replication ile Primary Secret
ARN Yapısı:
- Primary:
arn:aws:secretsmanager:us-east-1:123456789012:secret:prod/database-credentials-AbCdEf - Replica:
arn:aws:secretsmanager:us-west-2:123456789012:secret:prod/database-credentials-AbCdEf
Önemli Noktalar:
- Secret suffix (
-AbCdEf) region'lar arasında identik - Replication otomatik ve near real-time
- Primary region'daki rotation replica'lara propagate olur
- Her replica ayrı secret olarak faturalanır ($0.40/ay her biri)
- Replica'lar read-only, update'ler primary region'da olmalı
Failover ile Disaster Recovery
Maliyet Optimizasyonu Alternatifi
Replication yerine cross-region secret access kullan (daha yüksek latency, daha düşük maliyet):
Trade-off: Replica başına $0.40/ay tasarruf eder ama cross-region API latency ekler (~50-150ms).
Break-Glass Emergency Access
Emergency access prosedürleri incident response için kritik. İşte güvenli implementation:
Break-Glass Role Architecture
Break-Glass Access Monitoring
Emergency Access Prosedürü
Aktivasyon:
- Security team break-glass password'ü fiziksel kasadan alır
- İkinci kişi YubiKey'i ayrı güvenli konumdan alır
- İkisi de mevcut olmalı (two-person rule)
Access:
Post-Incident:
- Temporary credential'ları hemen revoke et
- Erişilen tüm secret'ları 4 saat içinde rotate et
- Alınan tüm aksiyonları incident report'a dokümante et
- Complete audit trail için CloudTrail log'larını review et
- Neden break-glass'a ihtiyaç duyulduğu konusunda post-mortem yap
Audit Logging with CloudTrail
Kapsamlı audit logging güvenlik ve uyumluluk için esansiyel.
CloudTrail Configuration
Warning: CloudTrail default olarak sadece management event'leri log'lar. Data event'leri (
GetSecretValuedahil) explicit olarak enable edilmeli.Maliyet Etkisi: ~0.01/ay.
Analiz için Athena Query'leri
Maliyet Analizi & Optimizasyon
Maliyet yapısını anlamak, güvenlikten ödün vermeden harcamayı optimize etmene yardımcı olur.
Detaylı Maliyet Senaryoları
Senaryo 1: 10 Statik API Key (Rotation Yok)
- Parameter Store Standard: $0/ay (ücretsiz tier)
- Secrets Manager: $4.00/ay
- Tavsiye: Parameter Store Standard
- Tasarruf: $4.00/ay
Senaryo 2: 5 RDS Password (Aylık Rotation)
- Parameter Store: $0.25/ay + manuel rotation iş gücü + downtime riski
- Secrets Manager: 0 rotation = $2.00/ay
- Tavsiye: Secrets Manager
- ROI: Otomasyon maliyete değer
Senaryo 3: Yüksek Trafikli Lambda
- Extension olmadan: 1M invocation/ay × 1 API call = $5.00/ay
- Extension ile: API call'lar %99 azaldı = $0.05/ay
- Tasarruf: $4.95/ay (%99 azalma)
Maliyet Optimizasyon Stratejileri
Strateji 1: Hybrid Yaklaşım
Statik configuration için Parameter Store, rotating credential'lar için Secrets Manager kullan:
Strateji 2: Secret'ları Consolidate Et
Her credential component için ayrı secret yerine:
Strateji 3: Seçici Replication
Sadece kritik production secret'ları replicate et:
Maliyet Analizi:
- 20 secret, 2 replica: $24/ay
- 5 kritik replicated + 15 sadece primary: $10/ay
- Tasarruf: $14/ay (%58 azalma)
Yaygın Hatalar & Çözümler
Karşılaştığım teknik sorunlar ve nasıl çözüldükleri:
Hata 1: Cross-Account Access için Default KMS Key
Problem: Default aws/secretsmanager key kullanırken cross-account sharing "AccessDeniedException" ile fail oluyor.
Root Cause: AWS-managed key'lerin policy'leri cross-account access için modifiye edilemiyor.
Çözüm: Her zaman customer-managed KMS key'ler oluştur:
Hata 2: Rotation için Lambda VPC Configuration
Problem: Rotation Lambda VPC'deki RDS'e bağlanırken timeout oluyor.
Root Cause: Lambda VPC access ile configure edilmemiş.
Çözüm:
Hata 3: ECS Secret'ları Sadece Startup'ta Inject Ediliyor
Problem: Rotation sonrası container'lar authentication error ile fail oluyor.
Root Cause: ECS secret'ları sadece startup'ta inject ediyor.
Çözüm: Graceful connection handling implement et:
Hata 4: Aşırı Lambda API Çağrıları
Problem: Secrets Manager maliyetleri ayda $50+ seviyesine çıkıyor.
Root Cause: Her invocation'da secret fetch ediliyor, caching yok.
Çözüm: Lambda Extension kullan (Pattern C'de gösterildi).
Sonuç: %99 maliyet azalması.
Hata 5: Eksik CloudTrail Data Event'leri
Problem: GetSecretValue operasyonları için audit trail yok.
Root Cause: Data event'ler varsayılan olarak enable değil.
Çözüm: Data event logging'i enable et (Audit Logging bölümünde gösterildi).
Hata 6: Gizli Olmayan Config'i Secrets Manager'da Saklamak
Problem: Gizli olmayan değerler için ayda $0.40 ödeniyor.
Çözüm: Karar framework'ü kullan:
Önemli Çıkarımlar
AWS secrets management ile çalışmak bana şu önemli dersleri öğretti:
-
Servis Seçimi Use Case Hakkında: Secrets Manager'ı rotating credential'lar için ayır. Geri kalan her şey için Parameter Store kullan. Bu basit kural maliyetlerde %80 tasarruf sağlayabilir.
-
Cross-Account Access Customer-Managed Key Gerektirir: Default
aws/secretsmanagerkey çalışmaz. Migration acısından kaçınmak için ilk günden customer-managed KMS key'ler oluştur. -
Container Injection Tek Seferlik: Startup'ta inject edilen secret'lar rotation'da güncellenmez. Uygulamaları connection refresh handle edecek şekilde tasarla veya alternating-users strategy kullan.
-
Lambda Extension Maliyeti %99 Azaltır: Yüksek trafikli Lambda function'lar için extension'ın built-in caching'i esansiyel. Tek satırlık bir ekleme önemli para tasarrufu sağlar.
-
CloudTrail Data Event'leri Kritik: İlk günden enable et. Maliyet ihmal edilebilir (~$0.10 per 100,000 event) ama audit değeri ölçülemez.
-
Multi-Region Replication İş Kararı: Her şeyi replicate etme. RTO/RPO requirement'larını analiz et ve sadece kritik secret'ları replicate et. Cross-region API call'lar genellikle kabul edilebilir.
-
Break-Glass Prosedürleri Test Edilmeli: Test edilmemiş emergency access incident'lar sırasında işe yaramaz. Hem teknik hem organizasyonel hazırlığı validate etmek için quarterly test yap.
-
Otomasyon Süreci Yener: Manuel rotation mühendis zamanında ayda 4'a mal olur. ROI anında gerçekleşir.
Anahtar güvenlik, maliyet ve operasyonel kompleksiteyi dengelemek. Statik config için Parameter Store ile basit başla, sensitive credential'ları Secrets Manager'a migrate et, database'ler için rotation implement et ve sadece gerektiğinde cross-region replication ekle.
İlgili Konular: