Konfiguratsiyalar va sirlarni boshqarish
Konfiguratsiyalar va sirlarni boshqarish
1) Nima uchun bu zarur?
Konfiguratsiyalari va sirlari - prod-platformaning «qoni». Konfigraning xatosi p95 ga tushadi, sir - P1 darajasidagi hodisa. Maqsad:- Bashorat qilinadigan (sxemalar, validatsiya, versiyalar).
- Xavfsiz (shifrlash, minimal huquqlar, rotatsiya).
- Boshqariladigan (GitOps, audit, orqaga qaytish).
- Bu oqlangan joylarda dinamik (feature flags, limitlarni parametrlashtirish).
2) Artefaktlarni tasniflash
Ommaviy konfigurlar: fichi, ostonalar, taymautlar, feature flags (sirsiz).
Sezgir konfigurlar: tanqidiy usullarning xatti-harakatlarini o’zgartiruvchi parametrlar (masalan, to’lov limitlari).
Sirlar: parollar/kalitlar/tokenlar/sertifikatlar/shifrlash materiallari.
Ishonch artefaktlari: ildiz/oraliq sertifikatlar, PKI siyosati, KMS kalitlari.
Alohida saqlash va huquqlar prinsipi: ommaviy ≠ sezgir ≠ sirlari.
3) Konfiguratsiyalar ierarxiyasi
«Piramida» qatlamlarini qurish:1. Global defaults (org-wide).
2. Environment (`prod/stage/dev`).
3. Region (`eu-central-1`, `us-east-1`).
4. Tenant/Brand (ko’p tenantlar uchun).
5. Service (aniq mikroservis).
6. Override (runtime) - vaqtinchalik almashtirgichlar.
Qo’shilish qoidalari: «quyida g’alaba qozonadi», mojaro - faqat MR/approval orqali.
Misol (YAML)
yaml defaults:
http:
timeout_ms: 800 retry: 2 prod:
http:
timeout_ms: 1200 service: payments-api overrides:
eu-central-1:
http:
timeout_ms: 1500
4) Sxemalar va validatsiya
Har bir - sxema bilan kontrakt (JSON Schema/OPA/CIdagi validatorlar).
Tiplar, diapazonlar, majburiy maydonlar, andoza qiymatlar.
«Guard-qoidalar» (’retry> 5’,’p95 _ target <50ms’qo’yish mumkin emas).
Avtomatik tekshirish (admission-webhook/KRM).
JSON Schema
json
{
"type":"object",
"properties":{
"http":{"type":"object","properties":{"timeout_ms":{"type":"integer","minimum":100,"maximum":10000},"retry":{"type":"integer","minimum":0,"maximum":5}},"required":["timeout_ms"]},
"feature_flags":{"type":"object","additionalProperties":{"type":"boolean"}}
},
"required":["http"]
}
5) Konfiguratsiyalarni yetkazib berish modellari
Static (image-baked): ishonchli, ammo qayta boshlashni talab qiladi.
Push/Watch: agentlar/sidecar yangilanishlarni (stream/poll) oladi va ilovaga signal beradi.
Pull on startup: start paytida snapshot olamiz (soddalashtiring hot-path).
Geo-taqsimlangan yuklar uchun Edge cache/proxy.
Asosiysi: snapshotlarning atomligi va versiyalashi, muvofiqlikni nazorat qilish va tezkor orqaga qaytish.
6) Asboblar va rollar
Konfiguratsiya omborlari: Git (haqiqat manbai) + GitOps (Argo/Flux), Parameter Store/Config Service.
Maxfiy saqlovchilar: Vault, AWS Secrets Manager/SSM, GCP Secrets, Azure KV.
Shifrlash: KMS/HSM, SOPS (age/GPG/KMS), Sealed Secrets, Transit-shifrlash (Vault).
Yetkazib berish: CSI Secrets Store, Vault Agent Injector/Sidecar, init-konteynerlar.
Bayroqlar/dinamika: fich-bayroqlar platformasi (shu jumladan avariyali kill-switch).
7) Shifrlash: modellar va amaliyotlar
At rest: Loyiha/muhit KMS-kalitlari, envelope-shifrlash.
In transit: oʻzaro autentifikatsiyalangan TLS/mTLS.
At use: dekodlash imkon qadar kechroq, afzalroq - jarayon xotirasida/sidecar (diskka yozmasdan).
Asosiy ierarxiya: root (HSM) → KMS CMK → data keys (DEK).
Rotatsiya: kalendar (90/180 kun) + hodisa bo’yicha (xodimning murosaga kelishi/ketishi).
8) Sirlarni boshqarish: patternlar
8. 1 GitOps + SOPS (statik snapshot)
Git’da faqat shifrotext saqlanadi.
CI/CD yoki klaster (KMS/age) da shifrlash.
(Flux/Argo) → Kubernetes Secret orqali foydalanish.
yaml apiVersion: v1 kind: Secret metadata: { name: psp-keys, namespace: payments }
type: Opaque data:
apiKey: ENC[AES256_GCM,data:...,sops]
8. 2 Vault Agent Injector (dinamik chiqarish)
Xizmat hisobi (JWT/SA) Vault-da autentifikatsiya qilinadi.
Sidecar tmpfs ga kreddlarni qo’yadi va TTL bo’yicha yangilaydi.
Dinamik kreditlarni qo’llab-quvvatlash (DB, cloud - izolyatsiya va qisqa muddat).
yaml annotations:
vault. hashicorp. com/agent-inject: "true"
vault. hashicorp. com/role: "payments-api"
vault. hashicorp. com/agent-inject-secret-db: "database/creds/payments"
8. 3 CSI Secrets Store
Sirni volume sifatida moslash, rotatsiya shaffof.
PKI uchun - sertifikatlar/kalitlarni avtomatik yangilash.
9) Kubernetes: amaliy jihatlar
ConfigMap - faqat ommaviy/nozik maʼlumotlar.
Secret - sezgir (base64 - shifrlash emas; etcd uchun Encryption at Rest qoʻshing).
Checksum-annotatsiyalar: konfig oʻzgarganda Deployment qayta boshlash.
Admission-control: «oq ro’yxat» dan tashqari sirlarni o’rnatishni taqiqlash, manifestlardagi «plain» parollarni taqiqlash.
NetworkPolicy: maxfiy provayderlarga (Vault/CSI) kirishni cheklash.
Checksum namunasi (Helm)
yaml annotations:
checksum/config: {{ include (print $.Template. BasePath "/configmap. yaml"). sha256sum }}
10) Foydalanish siyosati (RBAC/ABAC)
Least privilege: xizmat faqat o’z sirlarini ko’radi; namespace/label/prefix.
Split duties: maxfiylikni yaratish ≠ tarkibni oʻqish; har qanday o’qish auditi.
Vaqtinchalik kredlar: TTL va avtomatik rotatsiyaga ega dinamik loginlar (DB, cloud).
Segmentatsiya: prod/stage turli loyihalarda/akkauntlarda/KMS-kalitlarda.
11) Audit, jurnallashtirish, kuzatish
Sirlarni o’qish/berish daftarlari: kim/qachon/nima/qaerdan; relizlar va hodisalar bilan bog’liqlik.
Metrika: murojaatlar chastotasi, muddati o’tayotgan sirlar, muddati o’tgan sertifikatlar, dinamik kreditlar ulushi.
Xavfsizlik hodisalari: kvotalarning oshishi, IP/vaqt bo’yicha anomaliyalar, ko’plab muvaffaqiyatsiz autentifikatsiyalar.
12) Sirlar va sertifikatlarni rotatsiya qilish
Muddatlarni standartlashtiring: API-kalitlar - 90 kun, DB-parollar - 30 kun, TLS-sertlar - 60-90 kun.
Rotatsiya konturi: generatsiya → test → qo’sh nashr (grace) → o’zgartirish → eskisini chaqirib olish → verifikatsiya.
Ishlamay qolish: konfiguratsiyalar/sirlarni ikki marta yozish, mijozlarning mosligi (accept new + old).
PKI: o’z CA yoki tashqi bilan integratsiya; mTLS materiallarini CSI/Vault orqali avtomatik yangilash.
13) Dinamik konfiglar va feature flags
«Issiq» parametrlarni (limitlar, taymautlar) -servis/bayroq-platformadan oling.
Lokal kesh va stickiness (xesh variantini hisoblash), qisqa TTL.
Sezuvchan parametrlarni o’zgartirish uchun SLO-qo’riqchilar (avto-qaytish va kill-switch).
14) CI/CD va GitOps bilan integratsiya
Pre-commit/CI: sxemalar linterlari, SOPS tekshiruvlari, «yalang’och» sirlarni taqiqlash (skanerlar: gitleaks/trufflehog).
Policy Gate: OPA/Conftest - sxemasiz/egasining izohisiz/muhit belgilarisiz konfiguratsiyalarni taqiqlash.
Progressive delivery: konfiguratsiyalarni artefaktlar (semver) sifatida targ’ib qilish, parametrlarni o’zgartirish uchun canary.
Relizlarning izohlari: kim/nima/sirni o’zgartirdi; p95/5xx bilan tez korrelyatsiya.
15) Misollar
15. 1 OPA siyosati: konfigada ochiq SGlarni taqiqlash
rego package policy. config
deny[msg] {
input. kind == "SecurityGroupRule"
input. cidr == "0. 0. 0. 0/0"
input. port = = 5432 msg: = "Postgres open internet banned"
}
15. 2. «Snapshot» konfiga misoli (versiyalashtiriladigan)
yaml version: 1. 12. 0 owner: payments-team appliesTo: [ "payments-api@prod" ]
http:
timeout_ms: 1200 retry: 2 withdraw:
limits:
per_txn_eur: 5000 per_day_eur: 20000 flags:
new_withdrawal_flow: false
15. 3 Vault - BD dinamik kredlari
hcl path "database/creds/payments" {
capabilities = ["read"]
}
role issues user/password with TTL = 1h and auto-rollover
16) Anti-patternlar
Maxfiylar Git’da ochiq/shifrlanmagan holda Helm/Ansible oʻzgaruvchisida.
Barcha xizmatlar/atrof-muhit uchun yagona «mega-sir».
TTL/rotatsiyasiz uzoq umr ko’radigan tokenlar; «o’lmas» sertifikatlar.
Sxemasiz/validatsiyasiz va o’zgarishlar auditisiz dinamik konfiglar.
Etcd/KMS uchun Encryption at Rest va mTLS’siz tarmoq mavjud emas.
Protoddagi konfiguratsiyalarni qoʻlda tuzatish (GitOps aylanib chiqish).
Ishlab chiquvchilarning «har qanday holatda» prod-sirlardan foydalanish imkoniyati.
17) Joriy etish chek-varaqasi (0-60 kun)
0-15 kun
Konfiguratsiyalar uchun sxemalar/validatorlarni yoqish; repo «configs» va GitOps-oqimini ishga tushiring.
KMS va shifrlashni yuklash: SOPS/Sealed Secrets/Encryption at Rest etcd.
Pleyntext sirlarini CI (skaner) ga kiritishni taqiqlash, owners/approvals.
16-30 kun
Omborlarni ajratish: ommaviy konfiguralar vs sezgir vs sirlar.
Vault/Secrets Managerni joriy etish, yetkazib berish yoʻlini tanlash (Agent/CSI/SOPS).
TLS/DB/PSP-kreditlar rotatsiyasini moslash; dashbordlar «umr ko’rish/tugash muddati».
31-60 kun
SLO-geyting va avto-qaytish bilan dinamik konfiglar va bayroqlar.
OPA/Conftest siyosati; zero-trust (namespace/label-scoped kirish).
Game-day: sir va fors-rotatsiya simulyatsiyasi.
18) Etuklik metrikasi
% Git = 100% dan shifrlangan va toʻgʻridan-toʻgʻri ulanmagan maxfiylar.
Konfiguratsiyalarni sxemalar/validatsiya bilan qoplash ≥ 95%.
Tanqidiy sirlarning o’rtacha rotatsiya vaqti (maqsad: soatlar, kunlar emas).
Dinamik kreditlar ulushi (DB/cloud) ≥ 80%.
«plain secrets «/muddati o’tgan sertifikatlar tufayli 0 ta hodisa.
MTTR xato yuz berganda <5 daqiqa.
19) Jamoaviy rollar va jarayonlar
Config Owner: domen/sxemalar/siyosat egasi.
Security: siyosatlar, asosiy ierarxiya, kirish auditi.
Platform/SRE: GitOps, yetkazib berish/injeksiya, telemetriya.
App Teams: konfiguratsiyalar/sirlarni isteʼmol qilish, muvofiqlik testlari.
20) Xulosa
Konfiguratsiyalar va sirlarning ishonchli konturi + GitOps + shifrlash + rotatsiya + siyosat sxemalaridir. Oshkora va maxfiy bo’ling, hamma narsani shifrlang, konfiguralarni atom va versiya tarzida qo’llang, kreditlarning huquqlari va umrini minimallashtiring, rotatsiya va auditni avtomatlashtiring. Shunda o’zgarishlar tez va xavfsiz bo’ladi, sizib chiqish va yiqilish xavfi esa minimal bo’ladi.