0Pricing
AWS Solutions Architect · Ders

Secrets Manager ve Parameter Store

Veritabanı kimlik bilgilerini Secrets Manager ile otomatik olarak yenileyin, gizli olmayan yapılandırmaları Parameter Store'da depolayın ve her ikisini Lambda ve ECS ile tümleştirin.

Secrets Manager ve Parameter Store, CoddyKit'te ücretsiz bir AWS Solutions Architect dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AWS Solutions Architect öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AWS Solutions Architect kursu toplamda 4 dersten oluşur.

Kod İçindeki Gizli Bilgiler Sorunu

Yaygın ve tehlikeli bir kötü uygulama, gizli bilgileri (veritabanı parolaları, API anahtarları, OAuth belirteçleri) uygulamanın kaynak kodunda, ortam değişkenlerinde veya sürüm denetimine eklenmiş yapılandırma dosyalarında saklamaktır. Bu depolar açığa çıktığında (yanlışlıkla herkese açık hâle getirildiğinde veya bir saldırgan tarafından erişildiğinde) tüm gizli bilgiler anında ele geçirilir. AWS, bu sorunu ortadan kaldırmak için iki yönetilen hizmet sunar: otomatik döndürme gerektiren kimlik bilgileri için AWS Secrets Manager ve yapılandırma değerleri ile döndürülmeyen gizli bilgiler için AWS Systems Manager Parameter Store.

# Anti-pattern: secrets in code (NEVER do this)
# db_password = 'supersecret123'
# api_key = 'sk-abc123def456'

# Best practice: retrieve at runtime
import boto3

client = boto3.client('secretsmanager', region_name='us-east-1')
response = client.get_secret_value(SecretId='prod/myapp/db-password')
password = response['SecretString']  # fresh value, always current

AWS Secrets Manager'a Genel Bakış

AWS Secrets Manager, gizli bilgileri depolamak, almak ve otomatik olarak döndürmek için kullanılan yönetilen bir hizmettir. Tüm gizli bilgileri KMS ile şifreler (varsayılan olarak AWS tarafından yönetilen bir anahtar veya sizin CMK'niz kullanılır). Gizli bilgiler, anahtar-değer biçimindeki bir JSON dizesi olarak her türlü yapılandırılmış veriyi depolayabilir. Secrets Manager için gizli bilgi başına aylık 0,40 ABD doları ve 10.000 API çağrısı başına 0,05 ABD doları ücret alınır. Parameter Store'dan temel farkı şudur: RDS, Redshift, DocumentDB ve Lambda döndürme işlevleri aracılığıyla özel gizli bilgiler için yerleşik otomatik döndürme sunar; döndürme sırasında uygulamada değişiklik yapılması gerekmez.

# Create a secret in Secrets Manager
aws secretsmanager create-secret \
  --name 'prod/myapp/database' \
  --description 'Production MySQL credentials' \
  --secret-string '{"username":"admin","password":"changeme123","host":"mydb.rds.amazonaws.com","port":3306,"dbname":"orders"}'

# Retrieve the secret (by application)
aws secretsmanager get-secret-value \
  --secret-id 'prod/myapp/database' \
  --query 'SecretString' \
  --output text | python3 -c 'import sys,json; s=json.load(sys.stdin); print(s["password"])'

Secrets Manager ile Otomatik Döndürme

Otomatik döndürme, Secrets Manager'ın en güçlü özelliğidir. RDS veritabanları için Secrets Manager parolaları yerel olarak şu şekilde döndürür: 1) Yeni bir parola oluşturur. 2) RDS'deki veritabanı kullanıcısının parolasını günceller. 3) Gizli bilgiyi yeni parolayla günceller. 4) Yeni kimlik bilgilerinin çalıştığını doğrular. Tüm bunlar uygulamanız çalışırken gerçekleşir; sıfır kesinti yaşanır ve manuel müdahale gerekmez. Uygulamalar güncel parolayı almak için her zaman get-secret-value çağrısını kullanır. Böylece döndürülen kimlik bilgilerini otomatik olarak kullanırlar.

# Enable automatic rotation for RDS secret
aws secretsmanager rotate-secret \
  --secret-id 'prod/myapp/database' \
  --rotation-rules AutomaticallyAfterDays=30 \
  --rotation-lambda-arn arn:aws:lambda:us-east-1:123:function:SecretsManagerRDSMySQLRotationSingleUser

# AWS provides pre-built rotation Lambda functions for:
# - RDS MySQL/PostgreSQL/MariaDB/Oracle/SQL Server
# - DocumentDB
# - Redshift
# - Custom: write your own Lambda for other services

# Application code: always call GetSecretValue, never cache long-term

Gizli Bilgileri Yerel Olarak Önbelleğe Alma

Her veritabanı sorgusunda Secrets Manager'ı çağırmak pahalı ve yavaştır. En iyi uygulama, gizli bilgiyi kısa bir süre boyunca bellekte yerel olarak önbelleğe almaktır. AWS, gizli bilgileri yapılandırılabilir bir TTL boyunca önbelleğe alan Java ve Python için resmi Secrets Manager önbelleğe alma istemcileri sağlar. Önbelleğin süresi dolduğunda istemci, gizli bilgiyi Secrets Manager'dan yeniden alır. Bir uygulama, parolanın döndürüldüğünü gösteren bir kimlik doğrulama hatası alırsa önbelleği hemen yeniler ve isteği yeniden dener. Bu yaklaşım, Secrets Manager API'sini aşırı yüklemeden performans ve güncellik sağlar.

# Python: Secrets Manager caching client
# pip install aws-secretsmanager-caching

from botocore.session import get_session
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig

client = get_session().create_client('secretsmanager')
cache = SecretCache(
    config=SecretCacheConfig(secret_refresh_interval=3600),  # cache 1 hour
    client=client
)

# Returns cached value unless refresh interval expired
secret = cache.get_secret_string('prod/myapp/database')

AWS Systems Manager Parameter Store

AWS Systems Manager Parameter Store, yapılandırma verileri ve gizli bilgiler için ücretsiz (standart parametrelerde) hiyerarşik bir anahtar-değer deposudur. String, StringList ve SecureString parametre türlerini destekler. SecureString, değerleri KMS ile şifreler. Secrets Manager'ın aksine Parameter Store otomatik döndürmeyi DESTEKLEMEZ; nadiren değişen yapılandırma değerleri için tasarlanmıştır. Standart parametreler ücretsizdir ve en fazla 4 KB veri depolayabilir. Gelişmiş parametreler daha büyük değerleri (en fazla 8 KB), parametre ilkelerini (sona erme ve döndürme hatırlatıcıları) destekler ve parametre başına aylık 0,05 ABD dolarıdır.

# Create Parameter Store parameters
aws ssm put-parameter \
  --name '/prod/myapp/db-host' \
  --value 'mydb.cluster-abc.us-east-1.rds.amazonaws.com' \
  --type String

aws ssm put-parameter \
  --name '/prod/myapp/db-password' \
  --value 'mysecretpassword' \
  --type SecureString \
  --key-id alias/my-kms-key

# Retrieve parameter
aws ssm get-parameter \
  --name '/prod/myapp/db-password' \
  --with-decryption \
  --query 'Parameter.Value' --output text

Parameter Store Hiyerarşisi ve IAM

Parameter Store değerlerini, ortamınızı ve uygulama mimarinizi yansıtan hiyerarşik bir yol yapısı kullanarak düzenleyin. Bu yapı, yoldaki ön eke göre parametrelere erişim izni veren ayrıntılı IAM ilkeleri oluşturmanızı sağlar. Örneğin, bir Lambda işlevine yalnızca /prod/payment-service/ altındaki parametrelere erişim izni verebilirsiniz; işlev diğer hizmetlerin parametrelerine erişemez. Yapılandırma için en az ayrıcalık ilkesi, güvenliği ihlal edilmiş bir hizmetin başka bir hizmetin gizli bilgilerini okumasını önler.

# Parameter hierarchy
/prod/payment-service/db-password
/prod/payment-service/stripe-api-key
/prod/order-service/db-password
/prod/order-service/redis-url
/staging/payment-service/db-password

# IAM policy: payment-service Lambda can ONLY read its params
{
  'Effect': 'Allow',
  'Action': ['ssm:GetParameter', 'ssm:GetParameters', 'ssm:GetParametersByPath'],
  'Resource': 'arn:aws:ssm:us-east-1:123:parameter/prod/payment-service/*'
}

# Get all parameters for an app at once
aws ssm get-parameters-by-path \
  --path '/prod/payment-service/' \
  --with-decryption --recursive

Secrets Manager ve Parameter Store: Hangisini Ne Zaman Kullanmalı?

İki hizmet arasından gereksinimlerinize göre seçim yapın: Secrets Manager'ı şu durumlarda kullanın: gizli bilgilerin otomatik olarak döndürülmesine ihtiyacınız varsa, veritabanı kimlik bilgilerini depoluyorsanız, gizli bilginin birden fazla AWS hesabı arasında paylaşılması gerekiyorsa veya uyumluluk gereksinimleri belgelenmiş döndürme ilkeleri gerektiriyorsa. Parameter Store'u şu durumlarda kullanın: yapılandırma değerlerine (gizli olmayan değerlere) ihtiyacınız varsa, basit anahtar-değer depolama için ücretsiz bir çözüm istiyorsanız, yol tabanlı erişim denetimine sahip hiyerarşik yapılandırmaya ihtiyacınız varsa veya parametre sürüm geçmişini depolamanız gerekiyorsa. Birçok mimari ikisini birlikte kullanır: yapılandırma için Parameter Store, kimlik bilgileri için Secrets Manager.

# Usage comparison:
# Secrets Manager:
#   Cost: $0.40/secret/month
#   Rotation: Automatic (RDS, custom Lambda)
#   Cross-account: Yes
#   Best for: Database passwords, API keys, OAuth tokens

# Parameter Store:
#   Cost: Free (standard) / $0.05/month (advanced)
#   Rotation: Manual only
#   Cross-account: No (use Secrets Manager)
#   Best for: Config values, feature flags, non-rotating secrets

Lambda ve ECS ile Entegrasyon

Lambda işlevleri ve ECS görevleri, gizli bilgileri her çağrıda değil, başlangıçta almalıdır. Lambda için: gizli bilgileri başlatma kodunda (işleyici işlevinin dışında) alın ve genel değişkenlerde önbelleğe alın; Lambda yürütme ortamı çağrılar arasında kalıcı olduğundan, gizli bilgiler her ortamın yaşam süresi boyunca yalnızca bir kez alınır. ECS için: Secrets Manager değerlerini veya Parameter Store SecureString değerlerini ortam değişkenleri olarak eklemek üzere görev tanımındaki secrets alanını kullanın; ECS bunları, uygulama kodunda herhangi bir değişiklik gerektirmeden görev başlatılırken alır ve ekler.

# ECS task definition: inject secret as environment variable
{
  'containerDefinitions': [{
    'name': 'api',
    'image': 'my-api:latest',
    'secrets': [
      {
        'name': 'DB_PASSWORD',
        'valueFrom': 'arn:aws:secretsmanager:us-east-1:123:secret:prod/myapp/database:password::'
      },
      {
        'name': 'API_KEY',
        'valueFrom': '/prod/myapp/api-key'
      }
    ]
  }]
}
# Application reads DB_PASSWORD from env var
# ECS injects the current secret value at task start

EC2 AMI Kimlikleri için Parameter Store

Parameter Store'un pratik ancak çoğu zaman gözden kaçan bir kullanım alanı, AMI kimliklerini ve diğer dağıtım başvurularını depolamaktır. Yeni AMI'ler yayımlandığında güncelliğini yitiren AMI kimliklerini CloudFormation şablonlarınıza sabit olarak yazmak yerine bir Parameter Store değerine başvurun. CI/CD işlem hattınız, her yeni altın AMI oluşturulduğunda AMI kimliğini Parameter Store'da günceller. CloudFormation, dağıtım sırasında en güncel AMI kimliğini Parameter Store'dan okur. AWS ayrıca, doğrudan başvurabileceğiniz herkese açık Parameter Store yollarında en güncel Amazon Linux AMI kimliklerini yayımlar.

# Get AWS public AMI ID from Parameter Store
aws ssm get-parameter \
  --name '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64' \
  --query 'Parameter.Value' --output text

# CloudFormation: reference public AMI parameter
Parameters:
  LatestAmiId:
    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
    Default: '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64'

Resources:
  MyEC2:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref LatestAmiId

Gizli Bilgiler için Denetim ve Uyumluluk

Gizli bilgilerin yönetimi, bu bilgilere kimin ve ne zaman eriştiğini bilmeyi gerektirir. AWS CloudTrail, Secrets Manager ve Parameter Store'a yapılan her API çağrısını kaydeder: GetSecretValue, PutParameter, GetParameter. Bu sayede uyumluluk için eksiksiz bir denetim izi elde edersiniz. Gizli bilgilere normal örüntülerin dışında erişildiğinde uyarı vermek için CloudTrail ölçümleri üzerinde CloudWatch alarmları kullanın. Örneğin bir üretim gizli bilgisine alışılmadık bir IAM sorumlusu veya bilinen aralığınızda olmayan bir IP adresinden erişilirse, inceleme için bir uyarı tetikleyin.

# CloudTrail metric filter: alert on unexpected secret access
aws logs put-metric-filter \
  --log-group-name CloudTrail/management-events \
  --filter-name 'SecretAccessOutsideHours' \
  --filter-pattern '{ $.eventSource = "secretsmanager.amazonaws.com" && $.eventName = "GetSecretValue" && $.userAgent != "lambda.amazonaws.com" }' \
  --metric-transformations \
    metricName=UnexpectedSecretAccess,metricNamespace=Security,metricValue=1

# Then create CloudWatch alarm on this metric
# Alert fires when non-Lambda principal accesses secrets

Hesaplar Arasında Gizli Bilgi Paylaşımı

Çok hesaplı mimarilerde, bir hesaptaki uygulamaların bazen başka bir hesapta yönetilen gizli bilgilere erişmesi gerekir (örneğin, merkezi bir Security hesabı tüm RDS parolalarını yönetebilir). Secrets Manager kaynak ilkeleri, hesaplar arası erişime izin verir. Gizli bilgi üzerinde, tüketici hesaptaki bir role GetSecretValue çağrısı yapma izni veren kaynak tabanlı bir ilke yapılandırın. Tüketici hesaptaki rolde ayrıca gizli bilginin ARN'sine çağrı yapılmasına izin veren bir IAM ilkesi bulunmalıdır. KMS anahtar ilkeleri de gizli bilgiyi şifrelemek için kullanılan CMK'ya tüketici hesabın erişmesine izin vermelidir.

# Secret resource policy: allow cross-account access
aws secretsmanager put-resource-policy \
  --secret-id 'prod/shared/rds-password' \
  --resource-policy '{
    "Statement": [{
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::999999999999:role/AppRole"
      },
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*"
    }]
  }'

# KMS key policy must also allow account 999999999999
# IAM policy in 999999999999 must allow GetSecretValue on ARN

Hızlı Kontrol

Bu derste ele alınan AWS Solutions Architect (SAA-C03) kavramlarını anlayıp anlamadığınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: Secrets Manager, veritabanı kimlik bilgileri ve API anahtarları için otomatik döndürme sağlar ve döndürülmesi gereken gizli bilgiler için tercih edilen seçenektir; Parameter Store, yol tabanlı IAM erişim denetimiyle ücretsiz hiyerarşik yapılandırma depolaması sağlar; ECS ve Lambda, uygulama kodunda değişiklik yapmadan gizli bilgileri ortam değişkenleri olarak ekleyebilir. CloudTrail, gizli bilgilere yapılan tüm erişimler için denetim izleri sağlar. Sırada WAF, Shield ve Network Firewall'ı inceleyeceğiz.

Sıkça Sorulan Sorular

“Secrets Manager ve Parameter Store” dersi ücretsiz mi?

Evet — “Secrets Manager ve Parameter Store” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AWS Solutions Architect kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AWS Solutions Architect kursu toplamda 4 dersten oluşur.

“Secrets Manager ve Parameter Store” dersinde ne öğreneceğim?

Veritabanı kimlik bilgilerini Secrets Manager ile otomatik olarak yenileyin, gizli olmayan yapılandırmaları Parameter Store'da depolayın ve her ikisini Lambda ve ECS ile tümleştirin. AWS Solutions Architect ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AWS Solutions Architect öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AWS Solutions Architect, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Secrets Manager ve Parameter Store” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AWS Solutions Architect dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AWS Solutions Architect dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. KMS, ACM ve Şifreleme Örüntüleri
  2. GuardDuty, Inspector ve Macie
  3. Secrets Manager ve Parameter Store
  4. WAF, Shield ve Network Firewall
← AWS Solutions Architect Sayfasına Dön