Keamanan Cloud Native dan Kubernetes

Konsep untuk menjaga keamanan workload cloud-native Kamu.

Kubernetes berdasarkan pada arsitektur cloud-native dan mengikuti saran dari CNCF tentang praktik terbaik untuk keamanan informasi cloud-native.

Baca halaman ini untuk gambaran umum tentang bagaimana Kubernetes dirancang untuk membantu kamu menerapkan platform cloud-native yang aman.

Keamanan informasi cloud-native

Whitepaper CNCF white paper tentang keamanan cloud-native yang mendefinisikan kontrol keamanan dan praktik yang sesuai untuk berbagai fase siklus hidup.

Fase siklus hidup Develop

  • Pastikan integritas lingkungan pengembangan.
  • Rancang aplikasi mengikuti praktik terbaik untuk keamanan informasi, sesuai dengan konteks kamu.
  • Pertimbangkan keamanan pengguna akhir sebagai bagian dari desain solusi.

Untuk mencapainya, kamu dapat:

  1. Mengadopsi arsitektur, seperti zero trust, yang meminimalkan permukaan serangan, bahkan untuk ancaman internal.
  2. Mendefinisikan proses tinjauan kode yang mempertimbangkan masalah keamanan.
  3. Membangun model ancaman untuk sistem atau aplikasi kamu yang mengidentifikasi batas kepercayaan. Gunakan model tersebut untuk mengidentifikasi risiko dan menemukan cara untuk mengatasinya.
  4. Mengintegrasikan otomatisasi keamanan tingkat lanjut, seperti fuzzing dan rekayasa kekacauan keamanan, jika diperlukan.

Fase siklus hidup Distribute

  • Pastikan keamanan rantai pasokan untuk container image yang kamu jalankan.
  • Pastikan keamanan rantai pasokan untuk klaster dan komponen lain yang menjalankan aplikasi kamu. Contohnya adalah database eksternal yang digunakan oleh aplikasi cloud-native kamu untuk penyimpanan.

Untuk mencapainya, kamu dapat:

  1. Memindai container image dan artefak lainnya untuk kerentanan yang diketahui.
  2. Memastikan distribusi perangkat lunak menggunakan enkripsi dalam transit, dengan rantai kepercayaan untuk sumber perangkat lunak.
  3. Mengadopsi dan mengikuti proses untuk memperbarui dependensi saat pembaruan tersedia, terutama sebagai tanggapan terhadap pengumuman keamanan.
  4. Menggunakan mekanisme validasi seperti sertifikat digital untuk memastikan keamanan rantai pasokan.
  5. Berlangganan feed dan mekanisme lainnya untuk memberi tahu kamu tentang risiko keamanan.
  6. Membatasi akses ke artefak. Tempatkan container image di registry privat yang hanya mengizinkan klien yang berwenang untuk menarik image.

Fase siklus hidup Deploy

Pastikan pembatasan yang sesuai pada apa yang dapat diterapkan, siapa yang dapat menerapkannya, dan di mana itu dapat diterapkan. kamu dapat menerapkan langkah-langkah dari fase distribute, seperti memverifikasi identitas kriptografi dari artefak container image.

Saat kamu menerapkan Kubernetes, kamu juga menetapkan fondasi untuk lingkungan runtime aplikasi kamu: sebuah klaster Kubernetes (atau beberapa klaster). Infrastruktur TI tersebut harus memberikan jaminan keamanan yang diharapkan oleh lapisan yang lebih tinggi.

Fase siklus hidup Runtime

Fase Runtime mencakup tiga area penting: akses, komputasi, dan penyimpanan.

Perlindungan Runtime: akses

API Kubernetes adalah inti dari klaster kamu. Melindungi API ini adalah kunci untuk memberikan keamanan klaster yang efektif.

Halaman lain dalam dokumentasi Kubernetes memiliki detail lebih lanjut tentang cara mengatur aspek kontrol akses tertentu. Daftar periksa keamanan memiliki serangkaian pemeriksaan dasar yang disarankan untuk klaster kamu.

Selain itu, mengamankan klaster kamu berarti menerapkan autentikasi dan otorisasi yang efektif untuk akses API. Gunakan ServiceAccounts untuk menyediakan dan mengelola identitas keamanan untuk beban kerja dan komponen klaster.

Kubernetes menggunakan TLS untuk melindungi lalu lintas API; pastikan untuk menerapkan klaster menggunakan TLS (termasuk untuk lalu lintas antara node dan control plane), dan lindungi kunci enkripsi. Jika kamu menggunakan API Kubernetes untuk CertificateSigningRequests, berikan perhatian khusus untuk membatasi penyalahgunaan di sana.

Perlindungan Runtime: komputasi

Container menyediakan dua hal: isolasi antara aplikasi yang berbeda, dan mekanisme untuk menggabungkan aplikasi yang terisolasi tersebut untuk dijalankan pada komputer host yang sama. Kedua aspek ini, isolasi dan agregasi, berarti bahwa keamanan runtime melibatkan mengidentifikasi trade-off dan menemukan keseimbangan yang sesuai.

Kubernetes mengandalkan container runtime untuk benar-benar mengatur dan menjalankan container. Proyek Kubernetes tidak merekomendasikan runtime container tertentu, dan kamu harus memastikan bahwa runtime yang kamu pilih memenuhi kebutuhan keamanan informasi kamu.

Untuk melindungi komputasi kamu saat runtime, kamu dapat:

  1. Menerapkan standar keamanan Pod untuk aplikasi, untuk membantu memastikan mereka berjalan hanya dengan hak istimewa yang diperlukan.

  2. Menjalankan sistem operasi khusus pada node kamu yang dirancang khusus untuk menjalankan beban kerja yang dikontainerisasi. Biasanya ini berbasis pada sistem operasi hanya-baca (immutable image) yang hanya menyediakan layanan penting untuk menjalankan container.

    Sistem operasi khusus container membantu mengisolasi komponen sistem dan menghadirkan permukaan serangan yang lebih kecil jika terjadi pelarian container.

  3. Mendefinisikan ResourceQuotas untuk mengalokasikan sumber daya bersama secara adil, dan menggunakan mekanisme seperti LimitRanges untuk memastikan bahwa Pod menentukan persyaratan sumber daya mereka.

  4. Membagi beban kerja di berbagai node. Gunakan mekanisme isolasi node, baik dari Kubernetes itu sendiri atau dari ekosistem, untuk memastikan bahwa Pod dengan konteks kepercayaan yang berbeda dijalankan pada set node yang terpisah.

  5. Gunakan container runtime yang menyediakan pembatasan keamanan.

  6. Pada node Linux, gunakan modul keamanan Linux seperti AppArmor atau seccomp.

Perlindungan Runtime: penyimpanan

Untuk melindungi penyimpanan untuk klaster kamu dan aplikasi yang berjalan di sana, kamu dapat:

  1. Mengintegrasikan klaster kamu dengan plugin penyimpanan eksternal yang menyediakan enkripsi saat data tidak aktif untuk volume.
  2. Mengaktifkan enkripsi saat data tidak aktif untuk objek API.
  3. Melindungi daya tahan data menggunakan cadangan. Verifikasi bahwa kamu dapat memulihkan data tersebut kapan pun diperlukan.
  4. Mengautentikasi koneksi antara node klaster dan penyimpanan jaringan apa pun yang mereka andalkan.
  5. Menerapkan enkripsi data dalam aplikasi kamu sendiri.

Untuk kunci enkripsi, menghasilkan kunci ini dalam perangkat keras khusus memberikan perlindungan terbaik terhadap risiko pengungkapan. Sebuah hardware security module dapat memungkinkan kamu melakukan operasi kriptografi tanpa memungkinkan kunci keamanan untuk disalin ke tempat lain.

Jaringan dan keamanan

Kamu juga harus mempertimbangkan langkah-langkah keamanan jaringan, seperti NetworkPolicy atau service mesh. Beberapa plugin jaringan untuk Kubernetes menyediakan enkripsi untuk jaringan klaster kamu, menggunakan teknologi seperti virtual private network (VPN) overlay. Secara desain, Kubernetes memungkinkan kamu menggunakan plugin jaringan kamu sendiri untuk klaster kamu (jika kamu menggunakan Kubernetes yang dikelola, orang atau organisasi yang mengelola klaster kamu mungkin telah memilih plugin jaringan untuk kamu).

Plugin jaringan yang kamu pilih dan cara kamu mengintegrasikannya dapat memiliki dampak besar pada keamanan informasi dalam transit.

Observabilitas dan keamanan runtime

Kubernetes memungkinkan kamu memperluas klaster kamu dengan alat tambahan. kamu dapat mengatur solusi pihak ketiga untuk membantu kamu memantau atau memecahkan masalah aplikasi kamu dan klaster tempat mereka berjalan. kamu juga mendapatkan beberapa fitur observabilitas dasar yang sudah ada di Kubernetes itu sendiri. Kode kamu yang berjalan dalam container dapat menghasilkan log, menerbitkan metrik, atau menyediakan data observabilitas lainnya; pada waktu penerapan, kamu perlu memastikan klaster kamu memberikan tingkat perlindungan yang sesuai di sana.

Jika kamu mengatur dasbor metrik atau sesuatu yang serupa, tinjau rantai komponen yang mengisi data ke dalam dasbor tersebut, serta dasbor itu sendiri. Pastikan bahwa seluruh rantai dirancang dengan ketahanan yang cukup dan perlindungan integritas yang cukup sehingga kamu dapat mengandalkannya bahkan selama insiden di mana klaster kamu mungkin mengalami degradasi.

Jika sesuai, terapkan langkah-langkah keamanan di bawah tingkat Kubernetes itu sendiri, seperti boot yang diukur secara kriptografis, atau distribusi waktu yang diautentikasi (yang membantu memastikan keandalan log dan catatan audit).

Untuk lingkungan dengan jaminan tinggi, terapkan perlindungan kriptografi untuk memastikan bahwa log tidak dapat diubah dan tetap rahasia.

Selanjutnya

Keamanan cloud-native

Kubernetes dan keamanan informasi