Drift — Infrastructure as Code konfiguratsiyasida ifodalangan desired state bilan real infratuzilmaning joriy holati orasidagi farq. U console orqali qo‘lda tahrir, boshqa automation, provider defaulti, emergency o‘zgarish yoki tashqi tizim ta’siri sabab paydo bo‘ladi. Drift har doim nosozlik emas, lekin boshqaruv manbai noaniqlashganini ko‘rsatadi.
Kelib chiqishi
Operator incident vaqtida firewall qoidasini qo‘lda ochishi va keyin kodga kiritishni unutishi mumkin. Autoscaler instance sonini dinamik o‘zgartiradi; agar IaC bu fieldni ham qat’iy boshqarsa, har plan uni eski qiymatga qaytaradi. Cloud platforma computed atribut yoki defaultni o‘zgartirishi ham diff keltiradi.
| Drift manbasi | Misol |
|---|---|
| Manual change | Console’da security group tahriri |
| Parallel tool | Ikkinchi pipeline bir resource’ni boshqaradi |
| Platform controller | Autoscaler replica sonini o‘zgartiradi |
| Provider/API | Default yoki normalization o‘zgaradi |
| Tashqi hodisa | Sertifikat rotationi, IP almashishi |
Computed qiymatning o‘zgarishi har doim boshqarilishi kerak bo‘lgan drift emas. Ownership chegarasi qaysi atribut kimga tegishli ekanini belgilaydi.
Aniqlash
Refresh provider API’dan real atributlarni o‘qib state’ni yangilaydi. Keyingi plan konfiguratsiya bilan farqni ko‘rsatadi. Ayrim vositalar refresh-only plan yoki scheduled drift detection taqdim etadi. “No changes” natijasi faqat provider o‘qiy olgan va schema qamragan atributlarga tegishli.
Credential yetarli bo‘lmasa ayrim resource o‘qilmaydi. Provider unmanaged property’ni schema’ga kiritmagan bo‘lsa drift ko‘rinmaydi. Platforma-native policy va config inventory IaC planini to‘ldiradi.
Turlari
Resource drift mavjud obyekt atributi o‘zgarganda yuz beradi. Resource deletion driftida konfiguratsiyadagi obyekt tashqarida o‘chirilgan bo‘ladi. Unmanaged resource esa cloud’da mavjud, ammo kod va state’da yo‘q. IaC plan odatda oxirgi turdagi barcha “shadow IT”ni avtomatik topmaydi.
State drift state yozuvi real obyektga noto‘g‘ri bog‘langanda yoki state manual tahrir bilan buzilganda paydo bo‘ladi. Bu konfiguratsiya driftidan xavfliroq, chunki keyingi apply boshqa obyektni o‘zgartirishi mumkin.
Tuzatish yo‘llari
Real holat noto‘g‘ri bo‘lsa apply uni desired konfiguratsiyaga qaytaradi. Emergency o‘zgarish to‘g‘ri bo‘lsa kod shu holatga mos yangilanadi. Tashqi controller fieldning qonuniy egasi bo‘lsa IaC ownershipi undan olinadi yoki aniq ignore qoidasiga o‘tkaziladi.
Driftni ko‘r-ko‘rona avtomatik qaytarish incident fixini bekor qilishi mumkin. Diff risk bo‘yicha tasniflanadi: public access yoki encryption kabi security drift darhol, harmless tag farqi esa oddiy workflow orqali ko‘riladi.
Oldini olish
Production console’da to‘g‘ridan-to‘g‘ri write access minimal bo‘ladi. O‘zgarish pull request va pipeline orqali bajariladi. Break-glass huquqi qisqa muddatli, auditli va keyin kodga reconciliation talab qiladigan jarayon bilan beriladi.
Resource ownership tag, account va state boundary’da aniq ko‘rsatiladi. Ikki controller bitta fieldni boshqarmaydi. Policy as Code IaC tashqarisidagi public bucket yoki noto‘g‘ri encryptionni ham aniqlashi mumkin.
Monitoring va audit
Scheduled plan natijasi change turi, resource owner va muhit bo‘yicha event yaratadi. Har drift paging talab qilmaydi; kritik policy buzilishi va resource deletion yuqori ustuvorlik oladi. Takroriy “perpetual diff” provider yoki normalization muammosiga ishora qiladi.
Audit log kim qachon control-plane API’da o‘zgarish qilganini ko‘rsatadi. Drift timestampi deployment, ticket va user identity bilan bog‘lanadi. Bu farqning sababi hamda qonuniyligini aniqlashni tezlashtiradi.
Dynamic atributlar
Autoscaler boshqaradigan desired capacity, platforma yangilaydigan certificate expiry yoki service-generated endpoint kabi qiymatlar IaC’da qaysi darajada kuzatilishi aniqlanadi. Ignore-changes butun resource’ga emas, zarur fieldga tor qo‘llanadi. Aks holda xavfli farqlar ham yashirinadi.
Bog‘liq tushunchalar
Infrastructure as Code, Desired state, Plan, Apply, Remote state, Configuration management, Policy as Code