Daftar Keamanan Aplikasi
Daftar ini bertujuan untuk memberikan panduan dasar dalam mengamankan aplikasi yang berjalan di Kubernetes dari perspektif pengembang. Daftar ini tidak dimaksudkan untuk menjadi lengkap dan akan terus berkembang seiring waktu.
Cara membaca dan menggunakan dokumen ini:
- Urutan topik tidak mencerminkan urutan prioritas.
- Beberapa item daftar dijelaskan dalam paragraf di bawah daftar setiap bagian.
- Daftar ini mengasumsikan bahwa
pengembang
adalah pengguna kluster Kubernetes yang berinteraksi dengan objek dalam lingkup namespace.
Perhatian:
Daftar ini tidak cukup untuk mencapai postur keamanan yang baik dengan sendirinya. Postur keamanan yang baik membutuhkan perhatian dan peningkatan yang terus-menerus, tetapi daftar ini dapat menjadi langkah pertama dalam perjalanan tanpa akhir menuju kesiapan keamanan. Beberapa rekomendasi dalam daftar ini bisa jadi terlalu ketat atau terlalu longgar untuk kebutuhan keamanan spesifik kamu. Karena keamanan Kubernetes tidak bersifat "satu ukuran untuk semua", setiap kategori item daftar periksa harus dievaluasi berdasarkan kelebihannya.Penguatan keamanan dasar
Daftar berikut memberikan rekomendasi penguatan keamanan dasar yang akan berlaku untuk sebagian besar aplikasi yang di-deploy ke Kubernetes.
Desain aplikasi
- Ikuti prinsip keamanan yang tepat saat merancang aplikasi.
- Aplikasi dikonfigurasi dengan kelas QoS
yang sesuai melalui permintaan dan batas sumber daya.
- Batas memori ditetapkan untuk beban kerja dengan batas yang sama atau lebih besar dari permintaan.
- Batas CPU dapat ditetapkan pada beban kerja sensitif.
Akun layanan
- Hindari menggunakan
default
ServiceAccount. Sebagai gantinya, buat ServiceAccount untuk setiap beban kerja (workloads) atau layanan mikro. -
automountServiceAccountToken
harus disetel kefalse
kecuali pod secara khusus memerlukan akses ke API Kubernetes untuk beroperasi.
Rekomendasi securityContext
tingkat pod
- Terapkan
runAsNonRoot: true
. - Konfigurasikan container untuk dijalankan sebagai pengguna dengan hak istimewa lebih rendah
(misalnya, menggunakan
runAsUser
danrunAsGroup
), dan konfigurasikan izin yang sesuai pada file atau direktori di dalam image container. - Opsional, tambahkan grup tambahan dengan
fsGroup
untuk mengakses volume persisten. - Aplikasi di-deploy ke namespace yang menerapkan standar keamanan Pod yang sesuai. Jika kamu tidak dapat mengontrol penerapan ini untuk kluster tempat aplikasi di-deploy, pertimbangkan ini melalui dokumentasi atau pertahanan tambahan secara mendalam.
Rekomendasi securityContext
tingkat container
- Nonaktifkan eskalasi hak istimewa menggunakan
allowPrivilegeEscalation: false
. - Konfigurasikan sistem file root agar hanya dapat dibaca dengan
readOnlyRootFilesystem: true
. - Hindari menjalankan container dengan hak istimewa (atur
privileged: false
). - Hapus semua kemampuan dari container dan tambahkan kembali hanya yang spesifik yang diperlukan untuk operasi container.
Kontrol Akses Berbasis Peran (RBAC)
- Izin seperti create, patch, update, dan delete hanya boleh diberikan jika diperlukan.
- Hindari membuat izin RBAC untuk membuat atau memperbarui peran yang dapat menyebabkan eskalasi hak istimewa.
- Tinjau binding untuk grup
system:unauthenticated
dan hapus jika memungkinkan, karena ini memberikan akses kepada siapa saja yang dapat menghubungi server API pada tingkat jaringan.
Verba create, update, dan delete harus diizinkan dengan hati-hati. Verba patch jika diizinkan pada Namespace dapat mengizinkan pengguna memperbarui label pada namespace atau deployment yang dapat meningkatkan permukaan serangan.
Untuk beban kerja sensitif, pertimbangkan untuk menyediakan ValidatingAdmissionPolicy yang direkomendasikan yang lebih membatasi tindakan tulis yang diizinkan.
Keamanan image
- Gunakan alat pemindaian image untuk memindai image sebelum mendepoy container di kluster Kubernetes.
- Gunakan penandatanganan container untuk memvalidasi tanda tangan image container sebelum men-deploy ke kluster Kubernetes.
Kebijakan jaringan
- Konfigurasikan NetworkPolicies untuk hanya mengizinkan lalu lintas masuk dan keluar yang diharapkan dari pod.
Pastikan bahwa kluster kamu menyediakan dan menerapkan NetworkPolicy. Jika kamu menulis aplikasi yang akan di-deploy pengguna ke kluster yang berbeda, pertimbangkan apakah kamu dapat mengasumsikan bahwa NetworkPolicy tersedia dan diterapkan.
Penguatan keamanan tingkat lanjut
Bagian ini mencakup beberapa poin penguatan keamanan tingkat lanjut yang mungkin berharga berdasarkan pengaturan lingkungan Kubernetes yang berbeda.
Keamanan container Linux
Konfigurasikan Security Context untuk pod-container.
- Tetapkan Profil Seccomp untuk Container.
- Batasi Akses Container ke Sumber Daya dengan AppArmor.
- Tetapkan Label SELinux ke Container.
Kelas runtime
- Konfigurasikan kelas runtime yang sesuai untuk container.
Beberapa container mungkin memerlukan tingkat isolasi yang berbeda dari yang disediakan oleh
runtime default kluster. runtimeClassName
dapat digunakan dalam podspec
untuk mendefinisikan kelas runtime yang berbeda.
Untuk beban kerja sensitif, pertimbangkan menggunakan alat emulasi kernel seperti gVisor, atau isolasi virtual menggunakan mekanisme seperti kata-containers.
Dalam lingkungan dengan tingkat kepercayaan tinggi, pertimbangkan menggunakan mesin virtual rahasia untuk lebih meningkatkan keamanan kluster.
Items on this page refer to third party products or projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for those third-party products or projects. See the CNCF website guidelines for more details.
You should read the content guide before proposing a change that adds an extra third-party link.