Ana içeriğe geç

Yapılandırma

Consul Guardian yapılandırması YAML dosyası, CLI flag'leri veya ortam değişkenleri ile yapılır. Öncelik sırası: CLI flag > ortam değişkeni > yapılandırma dosyası.

Tam YAML Referansı

# consul-guardian.yaml

# ──────────────────────────────────────────────
# Consul Bağlantı Ayarları
# ──────────────────────────────────────────────
consul:
address: "http://localhost:8500" # Consul HTTP adresi
token: "${CONSUL_HTTP_TOKEN}" # ACL token (ortam değişkeninden)
datacenter: "dc1" # Hedef datacenter
tls:
ca_file: "/path/to/ca.pem" # CA sertifikası
cert_file: "/path/to/cert.pem" # Client sertifikası
key_file: "/path/to/key.pem" # Client özel anahtarı

# ──────────────────────────────────────────────
# Watch (İzleme) Ayarları
# ──────────────────────────────────────────────
watch:
prefixes: # İzlenecek KV prefix'leri
- "config/"
- "env/"
- "feature-flags/"
exclude_prefixes: # Hariç tutulacak prefix'ler
- "config/ephemeral/"
poll_interval: "5m" # Blocking query bekleme süresi (max 10m)

# ──────────────────────────────────────────────
# Git Ayarları
# ──────────────────────────────────────────────
git:
repo_path: "/var/consul-guardian/repo" # Git repo dizini
remote: "origin" # Uzak repo adı
branch: "main" # Branch adı
auto_push: true # Her commit sonrası otomatik push
commit_author: "consul-guardian <guardian@consul.local>" # Commit yazarı
ssh_key: "/path/to/deploy_key" # SSH özel anahtarı (push için)

# ──────────────────────────────────────────────
# Snapshot Ayarları
# ──────────────────────────────────────────────
snapshot:
enabled: true # Zamanlanmış snapshot aktif mi
schedule: "0 */6 * * *" # Cron ifadesi (her 6 saatte)
storage:
type: "s3" # Depolama tipi: s3, gcs, local
bucket: "consul-backups" # Bucket adı (S3/GCS için)
prefix: "dc1/" # Depolamadaki prefix
region: "eu-west-1" # AWS region (S3 için)
endpoint: "" # Özel endpoint (MinIO için)
force_path_style: false # Path-style erişim (MinIO için true)
path: "/data/snapshots" # Yerel depolama dizini (local için)
retention:
count: 30 # Saklanacak max snapshot sayısı
max_age: "720h" # Max saklama süresi (30 gün)

# ──────────────────────────────────────────────
# Drift Tespiti Ayarları
# ──────────────────────────────────────────────
drift:
enabled: true # Zamanlanmış drift kontrolü
schedule: "*/15 * * * *" # Cron ifadesi (her 15 dk)
auto_reconcile: false # Otomatik düzeltme (dikkatli kullan!)
source: "git" # Kaynak: git

# ──────────────────────────────────────────────
# Uyarı Ayarları
# ──────────────────────────────────────────────
alerts:
slack:
webhook_url: "${SLACK_WEBHOOK_URL}" # Slack webhook URL
channel: "#devops-alerts" # Hedef kanal
webhook:
url: "https://api.example.com/events" # Webhook URL
headers:
Authorization: "Bearer ${WEBHOOK_TOKEN}"

# ──────────────────────────────────────────────
# Şifreleme Ayarları
# ──────────────────────────────────────────────
encryption:
enabled: false # SOPS şifreleme aktif mi
provider: "age" # Sağlayıcı: age, aws-kms, pgp
age:
recipients: # age alıcıları
- "age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# ──────────────────────────────────────────────
# Loglama Ayarları
# ──────────────────────────────────────────────
logging:
level: "info" # Seviye: debug, info, warn, error
format: "json" # Format: json, text
output: "stdout" # Çıkış: stdout, dosya yolu

Alan Açıklamaları

consul

AlanTipZorunluAçıklama
addressstringEvetConsul HTTP API adresi. Varsayılan: http://localhost:8500
tokenstringHayırACL token. Ortam değişkeninden alınabilir: ${CONSUL_HTTP_TOKEN}
datacenterstringHayırHedef datacenter. Boş bırakılırsa agent'ın varsayılan DC'si kullanılır
tls.ca_filestringHayırTLS CA sertifika dosyası. HTTPS kullanıyorsan gerekli
tls.cert_filestringHayırClient sertifikası (mTLS için)
tls.key_filestringHayırClient özel anahtarı (mTLS için)

watch

AlanTipZorunluAçıklama
prefixesstring[]Evetİzlenecek KV prefix listesi
exclude_prefixesstring[]HayırHariç tutulacak prefix'ler. prefixes altındaki belirli yolları çıkarmak için
poll_intervaldurationHayırBlocking query bekleme süresi. Varsayılan: 5m, max: 10m

git

AlanTipZorunluAçıklama
repo_pathstringEvetGit repo dizini. Mevcut değilse oluşturulur
remotestringHayırPush yapılacak uzak repo adı. Varsayılan: origin
branchstringHayırBranch adı. Varsayılan: main
auto_pushboolHayırHer commit sonrası otomatik push. Varsayılan: false
commit_authorstringHayırGit commit yazarı
ssh_keystringHayırSSH özel anahtar dosyası (uzak repo'ya push için)

snapshot

AlanTipZorunluAçıklama
enabledboolHayırZamanlanmış snapshot aktif mi. Varsayılan: false
schedulestringHayırCron ifadesi. Örnek: 0 */6 * * * (her 6 saatte)
storage.typestringEvetDepolama tipi: s3, gcs, local
storage.bucketstringKoşulluS3/GCS için bucket adı
storage.prefixstringHayırDepolamadaki yol öneki
storage.regionstringKoşulluAWS region (S3 için)
retention.countintHayırSaklanacak max snapshot sayısı
retention.max_agedurationHayırMax saklama süresi

drift

AlanTipZorunluAçıklama
enabledboolHayırZamanlanmış drift kontrolü. Varsayılan: false
schedulestringHayırCron ifadesi
auto_reconcileboolHayırDrift tespit edildiğinde otomatik düzelt. Varsayılan: false
sourcestringHayırKaynak (source of truth). Varsayılan: git

Ortam Değişkeni Override'ları

YAML'deki her alan CONSUL_GUARDIAN_ öneki ve _ ayırıcı ile ortam değişkeni olarak override edilebilir:

# consul.address -> CONSUL_GUARDIAN_CONSUL_ADDRESS
export CONSUL_GUARDIAN_CONSUL_ADDRESS=http://consul:8500

# consul.token -> CONSUL_GUARDIAN_CONSUL_TOKEN
export CONSUL_GUARDIAN_CONSUL_TOKEN=my-secret-token

# watch.poll_interval -> CONSUL_GUARDIAN_WATCH_POLL_INTERVAL
export CONSUL_GUARDIAN_WATCH_POLL_INTERVAL=10m

# git.auto_push -> CONSUL_GUARDIAN_GIT_AUTO_PUSH
export CONSUL_GUARDIAN_GIT_AUTO_PUSH=true

# snapshot.storage.type -> CONSUL_GUARDIAN_SNAPSHOT_STORAGE_TYPE
export CONSUL_GUARDIAN_SNAPSHOT_STORAGE_TYPE=s3

# logging.level -> CONSUL_GUARDIAN_LOG_LEVEL
export CONSUL_GUARDIAN_LOG_LEVEL=debug

ACL Gereksinimleri

Consul Guardian'ın düzgün çalışabilmesi için ACL token'ının yeterli izinlere sahip olması gerekir.

Minimum izinler (sadece watch + drift)

key_prefix "" {
policy = "read"
}

Bu izinler KV izleme ve drift tespiti için yeterlidir.

Tam izinler (snapshot + restore dahil)

# KV okuma ve yazma (restore için)
key_prefix "" {
policy = "write"
}

# Snapshot almak için
acl = "write"

# Session yönetimi (CAS restore için)
session_prefix "" {
policy = "write"
}
uyarı

Production ortamında en az yetki ilkesini (principle of least privilege) uygula. Sadece watch ve drift kullanıyorsan read izni yeterli. write izinlerini sadece restore ve snapshot gerektiğen durumlarda ver.

Örnek Yapılandırmalar

Minimal (sadece watch)

consul:
address: "http://localhost:8500"

watch:
prefixes: ["config/"]

git:
repo_path: "./consul-backup"

Production (tam özellik)

consul:
address: "http://consul.internal:8500"
token: "${CONSUL_HTTP_TOKEN}"
datacenter: "dc1"
tls:
ca_file: "/etc/ssl/consul/ca.pem"

watch:
prefixes: ["config/", "env/", "feature-flags/"]
exclude_prefixes: ["config/ephemeral/"]
poll_interval: "5m"

git:
repo_path: "/data/consul-backup"
auto_push: true
ssh_key: "/home/guardian/.ssh/deploy_key"

snapshot:
enabled: true
schedule: "0 */4 * * *"
storage:
type: "s3"
bucket: "consul-backups"
region: "eu-west-1"
retention:
count: 42
max_age: "168h"

drift:
enabled: true
schedule: "*/15 * * * *"

alerts:
slack:
webhook_url: "${SLACK_WEBHOOK_URL}"

logging:
level: "info"
format: "json"