Halaman ini memberikan informasi tentang mode komputasi aman (seccomp) Linux di Google Kubernetes Engine (GKE). Gunakan informasi ini untuk memahami tindakan yang dapat dilakukan aplikasi dalam container di virtual machine (VM) host yang mendukung node Anda.
Apa itu seccomp?
Mode komputasi aman, atau seccomp, adalah kemampuan keamanan di Linux yang memungkinkan Anda membatasi panggilan sistem (syscall) yang dapat dilakukan oleh suatu proses ke kernel Linux.
Secara default, node GKE menggunakan sistem operasi Container-Optimized OS dengan runtime container containerd. containerd melindungi kernel Linux dengan membatasi kemampuan Linux yang diizinkan ke daftar default. Anda juga dapat membatasi lebih lanjut syscall yang diizinkan dengan profil seccomp. containerd memiliki profil seccomp default yang tersedia. Penerapan profil seccomp default oleh GKE untuk Anda tergantung pada mode cluster yang Anda gunakan:
- Autopilot (direkomendasikan): GKE menerapkan profil seccomp default containerd ke semua beban kerja secara otomatis.
- Standard: GKE tidak menerapkan profil seccomp default containerd ke semua workload secara otomatis. Sebaiknya terapkan profil seccomp default atau profil seccomp kustom ke workload Anda.
Profil seccomp containerd default menyediakan hardening dasar sekaligus mempertahankan kompatibilitas dengan sebagian besar workload. Definisi profil seccomp lengkap untuk containerd tersedia di GitHub.
Kemampuan dan syscall Linux
Proses non-root yang berjalan di sistem Linux mungkin memerlukan hak istimewa khusus untuk melakukan tindakan sebagai pengguna root. Linux menggunakan kemampuan untuk membagi hak istimewa yang tersedia menjadi beberapa grup, sehingga proses non-root dapat melakukan tindakan tertentu tanpa diberi semua hak istimewa. Agar suatu proses berhasil membuat syscall tertentu, proses tersebut harus memiliki hak istimewa yang sesuai yang diberikan oleh kemampuan.
Untuk daftar semua kemampuan Linux, lihat capabilities .
Syscall yang ditolak di profil seccomp GKE default
Profil seccomp default containerd memblokir semua syscall, lalu secara selektif mengizinkan syscall tertentu, yang beberapa di antaranya bergantung pada arsitektur CPU dari VM node dan versi kernel. Variabel syscalls
dalam fungsi DefaultProfile
mencantumkan syscall yang diizinkan untuk semua arsitektur.
Profil seccomp default memblokir syscall yang dapat digunakan untuk mengabaikan batas isolasi container dan mengizinkan akses hak istimewa ke node atau ke container lainnya. Tabel berikut mendeskripsikan beberapa syscall signifikan yang ditolak oleh profil seccomp default:
Syscall yang ditolak | |
---|---|
mount , umount , umount2 ,
fsmount , mount_setattr |
Membatasi proses agar tidak mengakses atau memanipulasi sistem file node di luar batas container. Juga ditolak karena
kemampuan |
bpf |
Membatasi proses agar tidak membuat program eBPF di kernel, yang
dapat menyebabkan eskalasi hak istimewa pada node. Misalnya, CVE-2021-3490 menggunakan syscall Juga ditolak karena
kemampuan |
clone , clone3 , unshare |
Membatasi proses agar tidak membuat proses baru di namespace baru yang mungkin berada di luar namespace yang dibatasi milik container. Proses
baru ini mungkin memiliki izin dan kemampuan yang ditingkatkan. Misalnya, CVE-2022-0185 menggunakan syscall Juga ditolak karena
kemampuan |
reboot |
Membatasi proses agar tidak memulai ulang node. Juga ditolak karena
kemampuan |
open_by_handle_at , name_to_handle_at |
Membatasi akses ke file di luar container. Syscall ini digunakan di salah satu eksploit container escape Docker paling awal. Juga ditolak karena
kemampuan |
Cara menggunakan seccomp di GKE
Dalam cluster Autopilot, GKE otomatis menerapkan profil seccomp default containerd ke semua workload Anda. Tidak diperlukan tindakan lebih lanjut. Upaya untuk membuat syscall terbatas gagal. Autopilot tidak mengizinkan profil seccomp kustom karena GKE mengelola node.
Di cluster Standard, Anda harus menerapkan profil seccomp secara manual. GKE tidak menerapkan profil untuk Anda.
Mengaktifkan seccomp di cluster Standard
Terapkan profil seccomp secara manual dengan menetapkan Konteks Keamanan Pod atau container menggunakan kolom spec.securityContext.seccompProfile
dalam spesifikasi Pod, seperti dalam contoh berikut. Sebaiknya gunakan profil
seccomp untuk workload, kecuali jika kasus penggunaan Anda memerlukan penggunaan syscall
yang dibatasi. Dua jenis seccompProfile
yang didukung adalah sebagai berikut:
RuntimeDefault
: profil default yang ditentukan oleh runtime containerd.Localhost
: definisi profil kustom.
Contoh manifes berikut menetapkan profil seccomp ke profil default runtime:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
app: default-pod
spec:
replicas: 3
selector:
matchLabels:
app: default-pod
template:
metadata:
labels:
app: default-pod
spec:
securityContext:
seccompProfile:
type: RuntimeDefault
containers:
- name: seccomp-test
image: nginx
Saat Anda men-deploy manifes ini, jika container di Pod mencoba membuat syscall yang melanggar profil seccomp default runtime, Pod atau workload mungkin akan mengalami perilaku yang tidak terduga. Misalnya, Pod yang membuat syscall yang dibatasi selama proses mulai sistem akan gagal dimulai. Jika aplikasi mencoba membuat syscall yang dibatasi saat Pod sedang berjalan, Anda mungkin melihat error dalam container. Tingkat keparahan kegagalan syscall bergantung pada cara aplikasi menangani error.
Menggunakan profil seccomp kustom di cluster Standard
Jika profil seccomp default runtime terlalu ketat untuk aplikasi (atau tidak cukup ketat), Anda dapat menerapkan profil seccomp kustom ke Pod di cluster Standard. Proses ini memerlukan akses ke sistem file pada node. Untuk tutorial tentang cara memuat dan menggunakan profil seccomp kustom, lihat Membatasi Syscall Container dengan seccomp.
Langkah berikutnya
- Menggunakan PodSecurityAdmission untuk menerapkan kebijakan tingkat Pod yang telah ditetapkan
- Menggunakan Layanan Kebijakan Organisasi untuk menetapkan kebijakan tingkat organisasi atau project