Cara mengambil penyimpangan konfigurasi

Cara mengambil penyimpangan konfigurasi
[ad_1]
Meskipun Terraform memiliki model deklaratif untuk pengelolaan infrastruktur pada platform cloud, itu membuat asumsi skala besar yang langka: bahwa keadaan infrastruktur yang digunakan selalu dikelola secara eksklusif melalui Terraform. Dalam praktiknya, lingkungan berkembang. Di bawah tekanan seperti itu, tim secara manual melakukan perubahan, menerapkan perbaikan panas langsung di konsol cloud dan menggunakan infrastruktur dengan paraleling otomatisasi.
Perubahan ini membuat penyimpangan konfigurasi di luar siklus hidup Terraform. Infrastruktur tetap fungsional tetapi tidak selaras dengan basis kode Terraform, menyebabkan perilaku yang tidak terduga, harapan yang rusak dan kadang -kadang bahkan insiden produksi.
Untuk mengatasi masalah ini, kami memiliki sistem deteksi drift otomatis yang berjalan terus menerus di lingkungan multi-bebas kami (AWS, Azure, GCP). Ini adalah sistem yang mendeteksi dan melaporkan perbedaan antara apa yang disediakan dan apa yang dinyatakan dalam git. Dalam artikel ini, kami menjelaskan cara kerjanya, bagaimana kami mengintegrasikannya ke dalam alur kerja kami dan keputusan yang telah kami ambil untuk memastikan bahwa ia telah berkembang dengan andal.
Memahami penyimpangan konfigurasi
Bagaimana penyimpangan terjadi dalam alur kerja terraform
Drift konfigurasi terjadi ketika infrastruktur dimodifikasi di luar terraform – melalui modifikasi manual, alat eksternal atau perbaikan darurat yang tidak dilampirkan pada kode. Ini bisa terjadi melalui:
- Perubahan manual di konsol cloud
- Perbaikan panas tidak diikuti selama insiden
- Alat dan API lain yang memodifikasi sumber daya
- Faktor lingkungan seperti penskalaan otomatis atau penandaan bagian ketiga
Terraform tidak mendeteksi modifikasi yang dibuat langsung ke infrastruktur kecuali jika negara secara eksplisit disegarkan, dan bahkan kemudian, modifikasi kecil dapat tanpa disadari. Dia membandingkan kode Terraform dengan negara terakhir yang diketahui, bukan infrastruktur yang sebenarnya, kecuali jika disegarkan. Bahkan jika Anda melakukan ini, perubahan kecil atau dikelola oleh awan dapat tanpa disadari kecuali mereka dibedakan secara memadai.
Profil risiko drift
Meskipun penyimpangan tidak selalu mematahkan infrastruktur dengan cepat, perlahan -lahan menurunkan keandalan. Misalnya, kebijakan IAM yang tidak disimpan dalam kontrol versi dan karena itu dimodifikasi di luar sumber kebenaran umumnya tetap tidak berdokumen. Konfigurasi jaringan dapat membantu mengembalikan jaringan yang hilang sampai Terraform memecahkan masalah dengan perubahan yang kemudian menjadi tanggung jawab jangka panjang ketika Terraform kembali.
Drift memperkenalkan kerapuhan ke dalam lingkungan multi-tim. Semakin kecil perubahan merambat ketidakkonsistenan melalui lingkungan, semakin banyak insinyur kehilangan kepercayaan pada terraform, yang seharusnya menjadi sumber kebenaran.
Desain deteksi drift yang berkembang
Berlabuh ke git, bukan hanya negara terraform
Dalam konsepsi kami, prinsip dasarnya adalah memperlakukan git sebagai sumber kebenaran tentang infrastruktur daripada negara terraform. Kami mengukur penyimpangan dengan memeriksa lingkungan hidup terakhir (dengan terraform-refresh = true) baru terhadap keadaan kode sebagai terlibat dalam kontrol versi.
Di setiap modul, kami telah menambahkan karya di bawah ini, yang berfungsi pada jadwal reguler dan didasarkan pada setiap PR. Bekerja:
- Ini menyegarkan kondisi terraform pemasok.
- Mengeksekusi rencana terhadap kode di git sha saat ini
- Bandingkan output dengan rencana yang diharapkan (komitmen atau garis dasar sebelumnya
Modul dilaporkan jika ada perbedaan dan bahwa tidak ada perubahan kode yang sesuai ditemukan.
Dukungan multi-cloud
Karena infrastruktur kami didistribusikan AWS, GCP dan AzurePelari modular membantu kami melakukan kontrol drift oleh pemasok cloud. Di setiap lingkungan, detektor drift terprogram dijalankan dalam konteks membaca terbatas, yang mencegah modifikasi yang tidak disengaja dan memungkinkannya berjalan dalam produksi.
Rincian hash, validasi ID, horoding dan diff. Data ini muncul dan dikumpulkan melalui Slack Alerts dan Grafana Dashboards.
Mengintegrasikan deteksi ke dalam aliran kerja pengembang
Integrasi permintaan menggambar
Surfing drift langsung selama siklus pengembangan. Kami juga memeriksa apakah modul yang sesuai melayang ketika permintaan traksi yang hanya memodifikasi kode infrastruktur terbuka.
Jika penyimpangan terjadi, kami memberi anotasi PR dengan rencana terperinci berbeda dan peringatan. Ini memungkinkan pengembang untuk memeriksa apakah penyimpangan jinak atau harus direkonsiliasi. Misalnya, jika aturan kelompok keselamatan telah diubah secara manual, diff menunjukkan apa yang telah diubah sebelum PR menghapusnya.
Penghapusan non-problublicms yang diketahui
Penyimpangan apa pun tidak dapat dieksploitasi. Pemasok cloud menambah atau sering memodifikasi metadata (misalnya, beacon, last_updated, self_link dan dinamis) untuk membuat aplikasi lebih dinamis. Ini tidak memerlukan koreksi.
Untuk memperbaiki ini, kami telah memperkenalkan aturan penghapusan yang dapat dikonfigurasi dengan modul. Dengan aturan -aturan ini, pekerjaan deteksi drift hanya memberikan perbedaan yang dapat digunakan, cukup untuk membuat pekerjaan deteksi drift yang dapat berkonsentrasi oleh tim.
Tingkatkan sinyal dan tanggung jawab
Manusia diff-by
Dalam iterasi sebelumnya, sistem ini hanya akan menerbitkan surat kabar “drift terdeteksi”. Lansiran ini tidak berguna. Kami juga telah melakukan perbaikan pada rantai alat yang menyajikan perbedaan yang dapat dibaca oleh manusia antara kode dan konfigurasi langsung, yang dikelompokkan berdasarkan jenis sumber daya dan atribut untuk keperluan keterbacaan.
Ini memungkinkan pengembang dan SRES untuk memperlakukan kegagalan acak mereka tanpa harus menjalankan rencana secara lokal atau manual menelusuri konsol cloud.
Prioritas penuaan dan penyimpangan
Kami juga mengikuti usia drift (perubahan yang telah bertahan melalui beberapa siklus kontrol tanpa resolusi). Penyimpanan dalam database pengembangan tiga hari sudah benar. Penyimpangan lebih dari 15 menit berorientasi di depan umum ke kebijakan IAM tidak.
Dengan model penuaan ini, kita dapat merosot peringatan dengan cara yang tepat tanpa tim yang luar biasa selama penyortiran.
Pelajaran produksi
Mulailah dengan modul kritis
Oleh karena itu kami mulai dengan mendorong deteksi hanya pada modul yang terkait dengan lingkungan produksi dan sumber daya yang peka terhadap keamanan seperti IAM, VPCdan jalan setapak berorientasi eksternal. Ketika penyimpangan terjadi, nafas sumber daya ini adalah yang terburuk.
Karena penyebaran telah progresif, kami telah membangun kepercayaan diri sambil menunjukkan nilai lebih awal tanpa memperlambat pengiriman atau memperkenalkan gesekan yang tidak perlu.
Deteksi sebelum menegakkan
Pada awalnya, kami tidak menerapkan pintu keras untuk penyimpangan. Tujuannya adalah kesadaran. Setelah tim memiliki visibilitas, mereka proaktif untuk membantu menyimpan dan mengkodifikasi perubahan manual.
Saat ini, modul kami yang paling kritis cenderung memecah pemeriksaan PR jika ada penyimpangan yang diketahui. Beberapa melaporkan tetapi tidak memblokir penyebaran. Ini memungkinkan perbaikan sementara tanpa menolak konsistensi jangka panjang.
Kesimpulan
Penggunaan alat infrastruktur sebagai kode seperti Terraform adalah dasar yang solid untuk mengelola sumber daya cloud; Namun, tanpa deteksi penyimpangan, mereka beroperasi dengan kepercayaan buta. Ini bukan lingkungan di dunia nyata, jadi modifikasi manual, pengecualian yang tidak dikelola dan perbaikan hotten akan selalu ada di bidang dunia nyata. Caranya adalah menangkapnya lebih awal, sebelum terjadi dalam kerusakan atau regresi.
Kami telah menggabungkan terraform, riwayat git, CI otomatis dan laporan terstruktur untuk membangun sistem yang mendeteksi ketika infrastruktur tidak konsisten dengan kode. Ini tidak aktif semua risiko, tetapi siap untuk loop umpan balik yang diperlukan untuk mempertahankan konsistensi skala besar.
Untuk operasi apa pun di lingkungan multi-cloud yang bekerja pada beberapa tim, pendekatan ini bukan opsional. Pada dasarnya, ini adalah perbedaan antara konfigurasi sebagai dokumentasi dan konfigurasi sebagai kenyataan.
[ad_2]