Mengapa GitOps penting untuk DevSecOps
Diterbitkan: 2022-02-24Keuntungan DevOps untuk otomatisasi, keterlacakan, dan khususnya, kolaborasi di antara kelompok dan pemangku kepentingan yang sebelumnya tertutup sangat diterima. Namun karena grup DevOps secara signifikan ditugaskan untuk mengalihkan operasi ke lingkungan Kubernetes dalam container, taktik DevOps yang lama dicoba dan diuji dapat meluncur lebih pendek. Masalah keamanan — dan perangkap — juga dimanifestasikan dalam metode yang unik.
Informasi yang fantastis adalah bahwa GitOps berfungsi untuk mengisi pilihan celah di DevOps untuk stabilitas lingkungan terdistribusi. Ini karena proses GitOps sangat kondusif untuk DevSecOps, yang didefinisikan di sini sebagai taktik keamanan paling efektif yang berlaku untuk seluruh siklus hidup perangkat lunak.
Dalam artikel ini, kita melihat sekilas bagaimana GitOps menawarkan kerangka kerja penting untuk DevSecOps, untuk pemeriksaan keamanan yang meningkat melalui CI/CD, serta melalui fase penulisan-penempatan administrasi aplikasi di kluster Kubernetes.
Satu-satunya sumber realitas yang tidak dapat diubah
GitOps dapat digambarkan sebagai:
Desain yang berfungsi untuk Kubernetes dan sistem asli cloud lainnya, yang menyediakan serangkaian prosedur terbaik yang menyatukan penerapan, pengelolaan, dan pemantauan Git untuk klaster dan tujuan yang terkemas.
Jalur menuju pengalaman praktis pengembang untuk menangani program dengan tepat di mana saluran pipa CI/CD dan alur kerja Git digunakan untuk setiap operasi, dan pengembangan.
Git adalah satu-satunya sumber kebenaran sejati, karena konfigurasi yang diinginkan dideklarasikan di sini. Ada agen GitOps yang berjalan di dalam Kubernetes, ia secara teratur membandingkan titik asli di dalam Kubernetes dengan titik yang dicari yang disimpan di Git. Setiap variasi baru yang digabungkan ke dalam departemen yang dipantau di Git akan langsung diterapkan ke Kubernetes. Sebaliknya, setiap variasi buku pegangan yang digunakan untuk Kubernetes secara mekanis dikembalikan lagi ke keadaan ideal yang dideklarasikan di Git. Penyimpangan konfigurasi dihilangkan.
Git biasanya digambarkan dengan tepat sebagai satu-satunya sumber kebenaran yang sebenarnya seperti yang berlaku untuk GitOps, berkat komposisinya yang tidak dapat diubah. Antara lain, ini akan membantu mempertahankan batas — tidak bertentangan dengan firewall — yang memisahkan masalah antara CI dan CD. Dengan cara ini, berbagai cara yang terlibat dalam kemajuan aplikasi sebagai bagian dari CI — pull request, screening, commit, dan sebagainya. — tetap terpisah di Git.
Untuk pengembang yang membuat pull request, pull request, pada saat ditinjau dan diizinkan, digabungkan dan secara rutin digunakan ke cluster pada rekonsiliasi yang akan datang — yang biasanya membutuhkan waktu 15 menit.
Secara default, prosesnya dua arah — ini menyiratkan bahwa modifikasi yang dibuat langsung ke Kubernetes akan dibalas di Git ketika loop rekonsiliasi berikutnya berjalan (umumnya setiap 15 menit). Meski begitu, keadaan ini secara signifikan kurang dari yang terbaik, ketika anggota tenaga kerja DevOps atau, lebih buruk lagi, penyusup aktor negatif akan segera membuat variasi ke cluster. Variasi langsung-ke-cluster ini belum diperiksa dengan tepat melalui permintaan dan persetujuan gabungan, dan akibatnya melanggar teori GitOps tentang Git yang berfungsi sebagai pasokan kebenaran yang tidak dapat diubah dari masalah saat penyimpangan terjadi.
Sebagai alternatif untuk mencegah terjadinya penyimpangan, sumber daya pemeriksa GitOps dapat mengirimkan peringatan jika ada perubahan yang dibuat pada klaster yang sebelumnya tidak digunakan di Git. Ketika ini terjadi, berkat jejak audit, kode perangkat lunak pada Git kemudian dapat menukar modifikasi yang salah yang dirancang ke kluster, melalui pengontrol di titik yang diterapkan di lingkungan alami runtime.
Sebaliknya, ketika kekekalan tidak tercapai, penyimpangan bisa terjadi. Ini mungkin terwujud dalam serangan jaringan atau ketika anggota staf DevOps secara tidak sengaja mengubah konfigurasi cluster sehingga berbeda dari apa yang ada di Git. Ketidaksesuaian ditandai ketika ini terjadi — melalui penggunaan peralatan GitOps yang tepat — sehingga melambangkan DevSecOps klasik yang dihadirkan oleh proses GitOps.
Aplikasi yang sesuai mengotomatiskan sistem pemeriksaan yang sedang berlangsung untuk memastikan bahwa titik yang diinginkan dari konfigurasi pada repositori Git cocok dengan keadaan sebenarnya di cluster Kubernetes. Ini juga digunakan untuk merekonsiliasi dan penyebaran total segera setelah mereka secara efektif didedikasikan dalam kondisi repositori yang dideklarasikan.
Manajer audit
Fitur audit yang disajikan GitOps juga penting untuk bantuan DevSecOps. Dengan tetap berada di repositori Git sebagai satu-satunya pemasok fakta, semua aplikasi, kode, dan konfigurasi diversi, dan mempertahankan keseluruhan jalur audit, yang merupakan kebutuhan utama untuk setiap lingkungan alami yang dilindungi. Jejak audit ini juga biasanya ditawarkan kepada pengembang dan anggota staf operasi secara merata, agar mereka memperhatikan apa yang beroperasi di klaster (sebagian besar pengguna dibatasi untuk mengakses konfigurasi klaster saja).
Pengembang mungkin tidak selalu perlu bergantung pada jejak audit seperti halnya pelanggan fungsi dan staf DevSecOps, tetapi mereka dapat menggunakan kemampuan untuk memahami variasi apa yang telah terjadi dan apa dorongan di balik penyesuaian pada repositori yang terjadi . Singkatnya, untuk pengembang — serta untuk semua anggota staf DevOps — semuanya hanyalah log Git.
Jejak audit di Git juga tersedia dan sangat sederhana bagi pembangun untuk muncul saat diperlukan. Hal ini disebabkan oleh fakta bahwa warisan akhir dari proses tersebut ditangkap dalam laporan program Git, yang dipahami oleh pembangun.
Dengan tersedianya jejak audit, juga memungkinkan untuk mengembalikan penyesuaian dengan cepat ke aplikasi yang telah memicu kesulitan. Ini sangat bermanfaat ketika cluster telah disusupi atau salah dikonfigurasi. Dalam hal ini, sebagai alternatif untuk membangun kembali sebuah cluster dari awal, jejak audit terdiri dari poin-poin yang dicari dalam repo. Konfigurasi klaster dan program dengan titik yang diinginkan dari jejak audit kemudian disebarkan dan prosedur pembangunan kembali dilakukan secara otomatis.
Jumlah 'kunci kerajaan'

Builder biasanya bergantung pada Jenkins, server otomatisasi, untuk mengembangkan, menguji, dan membantu CI/CD untuk membuat pipeline untuk lingkungan Kubernetes. Tanpa GitOps, pengembang mungkin dalam kasus lain memiliki akses langsung ke kluster Kubernetes saat mereka menerapkan kode mereka secara langsung. Dengan kata dan frasa lain, pembangun — tidak peduli apakah mereka adalah komponen organisasi atau kontraktor yang beroperasi dari jarak jauh — akan memiliki akses langsung ke lingkungan keluaran dan akan memiliki "kunci kerajaan", begitulah sebaliknya. Ini jarang merupakan keadaan keamanan yang ideal.
Semua yang akan dipilihnya, dalam kasus yang disebutkan sebelumnya, adalah untuk pengguna yang tidak tepat — atau bahkan lebih buruk lagi, penyusup — untuk memiliki aksesibilitas perintah KubeConfig atau Kubectl ke cluster dalam manufaktur yang dapat mereka jalankan dari notebook mereka. Jika penyerang telah mengkompromikan proses CI dan kredensial yang ditetapkan, misalnya, mereka juga dapat memiliki aksesibilitas ke cluster mana pun yang dapat diakses oleh sistem CI.
Fakta sederhana bahwa GitOps membantu untuk mencegah pengguna — atau penyerang — dari memodifikasi konfigurasi cluster tanpa meninggalkan jejak apa pun sangat penting untuk tim operasi dan keselamatan — selain mendukung meminimalkan beban mental pengembang. Dengan memperoleh manage, misalnya, pengembang umumnya tidak perlu memiliki akses langsung ke node Kubernetes dan/atau baris perintah kubectl. GitOps merekonsiliasi hampir semua hal yang diuraikan oleh builder di Git tetapi tidak mengizinkan aksesibilitas manual ke kluster Kubernetes atau lingkungan manufaktur kecuali builder memiliki izin kontrol akses yang unik.
Fitur DevSecOps GitOps sebagai cara untuk menggagalkan situasi vektor serangan ini untuk CD sehingga melindungi "kunci kerajaan." Ketika operator GitOps, seperti Flux open source — lebih lanjut tentang ini di bawah — berjalan di dalam Kubernetes dan karenanya memiliki aksesibilitas ke cluster, kontrol akses tetap berada dalam kerangka kerja keamanan Kubernetes. Aksesibilitas konsumen ditetapkan dengan menetapkan hak istimewa ke ruang nama grup dan anggota grup yang berbeda.
Sebagai contoh bagaimana DevSecOps dan GitOps sangat kondusif untuk orang lain, Bagian Pertahanan (DoD) AS, Nicolas Chaillan, pejabat perangkat lunak utama Angkatan Udara AS, beberapa waktu lalu menjelaskan bagaimana DevSecOps dan GitOps — dengan Flux — melakukan bagian penting dalam kemajuan program perangkat lunaknya yang mendukung seluruh spektrum pasukan keamanan AS.
“Keselamatan dan keamanan tidak dapat ditawar, tetapi kami juga ingin perusahaan pengembang sendiri untuk meningkatkan efisiensi dan kecepatan,” kata Chaillan.
Sebagai contoh, GitOps adalah “kunci pencapaian kami dalam menyiapkan dan meluncurkan Platform Hanya satu di seluruh DoD,” klaim DoD. Menurut DoD, System Just one adalah “bermacam-macam distribusi Kubernetes yang memenuhi syarat Cloud Indigenous Computing Foundation (CNCF) yang diizinkan dan dikeraskan, infrastruktur sebagai buku pedoman kode, dan wadah yang diperkeras,” dengan jalur pipa keamanan yang terintegrasi.
Cek dan saldo
Prosedur DevSecOps digabungkan dengan pemeriksaan dan keseimbangan persediaan GitOps. Dengan cara ini, perintah aksesibilitas yang diberikannya membantu mencegah pengembang — atau penyusup — mengakses repositori kode suplai untuk memperkenalkan, misalnya, pintu belakang, zero-day, atau bentuk kerentanan lain selama CI prosedur. Ini hanya karena semua permintaan tarikan ditinjau oleh rekan sejawat.
Dengan DevSecOps yang mendukung sistem CI, penggunaan checks and balances sebelum kode didedikasikan di Git dan diterapkan di cluster. Pengembang biasanya akan memposting modifikasi sebagai permintaan tarik, yang ditinjau oleh rekan sejawat. Setelah ditinjau dan disahkan, kode tersebut digabungkan pada Git, dan file YAML dari status yang dicari kemudian diubah sesuai dengan itu.
Kondisi yang diinginkan akan segera diterapkan ke cluster Kubernetes. Seperti disebutkan sebelumnya, peralatan GitOps yang benar dengan fitur DevSecOps terus melacak kondisi yang tepat dalam proses tujuan, untuk memastikan itu membalas apa yang dinyatakan di Git. Peringatan dikeluarkan jika ada perbedaan, sehingga gerakan korektif dapat diambil.
DevSecOps berpendapat
Sejumlah instrumen GitOps membantu DevSecOps. Flux suplai terbuka, misalnya, membantu mempertahankan repositori Git sebagai satu-satunya sumber kebenaran sejati yang tidak dapat diubah. Kemampuan Flux juga memperpanjang aksesibilitas mengatur checks and balances selama CI/CD untuk kode yang didedikasikan dan disebarkan.
Untuk pertemuan Flux yang jauh lebih beropini, open source Weave GitOps Main menyederhanakan cara pertama untuk mengaktifkan CI/CD otomatis di banyak cluster. Sistem penempatan metode GitOps dan DevSecOps dengan Weave GitOps Main melibatkan beberapa perintah yang tidak rumit di konsol.
Weave GitOps Company telah muncul sebagai platform GitOps awal yang mengotomatiskan pengiriman aplikasi yang stabil dan pengelolaan operasional otomatis untuk Kubernetes pada skala apa pun di seluruh arsitektur hybrid cloud, multi-cloud, dan edge.
Semua beberapa alat membantu untuk mengotomatisasi pemantauan untuk menjamin bahwa konfigurasi cluster biasanya cocok dengan apa yang ada di Git untuk membantu menghindari penyimpangan. Jejak audit yang lengkap dan tersedia memungkinkan rollback aplikasi dan konfigurasi klaster diproduksi di atas fondasi yang sangat penting — tanpa harus membangun kembali klaster dari awal.
Singkatnya, GitOps menandakan evolusi DevOps untuk lingkungan Kubernetes yang tersebar, meskipun DevSecOps telah muncul sebagai cara penting untuk menjaga stabilitas CI/CD untuk GitOps, melalui siklus hidup aplikasi.
Steve Waterworth adalah Supervisor Pemasaran Teknis di Weaveworks .