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
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
address | string | Evet | Consul HTTP API adresi. Varsayılan: http://localhost:8500 |
token | string | Hayır | ACL token. Ortam değişkeninden alınabilir: ${CONSUL_HTTP_TOKEN} |
datacenter | string | Hayır | Hedef datacenter. Boş bırakılırsa agent'ın varsayılan DC'si kullanılır |
tls.ca_file | string | Hayır | TLS CA sertifika dosyası. HTTPS kullanıyorsan gerekli |
tls.cert_file | string | Hayır | Client sertifikası (mTLS için) |
tls.key_file | string | Hayır | Client özel anahtarı (mTLS için) |
watch
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
prefixes | string[] | Evet | İzlenecek KV prefix listesi |
exclude_prefixes | string[] | Hayır | Hariç tutulacak prefix'ler. prefixes altındaki belirli yolları çıkarmak için |
poll_interval | duration | Hayır | Blocking query bekleme süresi. Varsayılan: 5m, max: 10m |
git
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
repo_path | string | Evet | Git repo dizini. Mevcut değilse oluşturulur |
remote | string | Hayır | Push yapılacak uzak repo adı. Varsayılan: origin |
branch | string | Hayır | Branch adı. Varsayılan: main |
auto_push | bool | Hayır | Her commit sonrası otomatik push. Varsayılan: false |
commit_author | string | Hayır | Git commit yazarı |
ssh_key | string | Hayır | SSH özel anahtar dosyası (uzak repo'ya push için) |
snapshot
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
enabled | bool | Hayır | Zamanlanmış snapshot aktif mi. Varsayılan: false |
schedule | string | Hayır | Cron ifadesi. Örnek: 0 */6 * * * (her 6 saatte) |
storage.type | string | Evet | Depolama tipi: s3, gcs, local |
storage.bucket | string | Koşullu | S3/GCS için bucket adı |
storage.prefix | string | Hayır | Depolamadaki yol öneki |
storage.region | string | Koşullu | AWS region (S3 için) |
retention.count | int | Hayır | Saklanacak max snapshot sayısı |
retention.max_age | duration | Hayır | Max saklama süresi |
drift
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
enabled | bool | Hayır | Zamanlanmış drift kontrolü. Varsayılan: false |
schedule | string | Hayır | Cron ifadesi |
auto_reconcile | bool | Hayır | Drift tespit edildiğinde otomatik düzelt. Varsayılan: false |
source | string | Hayır | Kaynak (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"