TLDR;1
Uzun zaman önce şirkette olan organizasyon şemasının değişmesi ile daha fazla Kubernetes, Linux güvenlik konularında çalışmaya başladım. Belli başlı güvenlik önlemlerini almak ile yükümlü olduğumuz sistem genellikle OpenShift mimarisinden oluşmakta.
Bildiğiniz üzere güvenlik dediğiniz kısım çok geniş bir kavram. Verimerkezinin kapısına asma kilit vurmak da, çalışan uygulamanın hangi dosyalara erişeceğini belirlemek de güvenlik çatısı altında konuşulabilir. 2 Benim ve takımımın yaptığı iş, sistemde bulunan Kubernetes node’larının güvenliğini arttırmak.
Tabiki bu işleri yaparken belli başlı makalelerden veya programlardan yararlanmamız gerekiyor. Eğer bu konu ile ilgileniyorsanız Redhat’in yayınladığı Openshift Platform Security Guide dokümanını biçilmiş kaftan.
İçerisinde konteyner nedir? den başlayıp, OpenShift ortamında bir konteyner nasıl daha güvenli olarak çalıştırılır veya daha güvenli bir mimari nasıl oluşturulmalı gibi bölümler bulunmakta. Eğer güvenlik konuları ile ilgileniyorsanız bu dokümanı okumanızda fayda var.
Devir otomasyon devri, eğer bir sistem koda dökülmedi ise ilerleme yavaş oluyor. Biz de hali hazırda kullandığımız sistemi kubebench isimli araç ile test edip gerekli görülen sistem açıklarını kapatıyoruz.
Araç open source bir araç kullanması da bir hayli kolay. https://github.com/aquasecurity/kube-bench
Nedir
kube-bench is a Go application that checks whether Kubernetes is deployed securely by running the checks documented in the CIS Kubernetes Benchmark.
Tam çeviri yaparsak,
Sistemi, CIS Kubernetes Benchmark dokumasyonunda belirlenen kurallara göre test eden bir adet go programı 🙂
Nasıl kullanılır
İşin güzel tarafı go binary dosyası olduğu için dilerseniz direk indirip çalıştırmak mümkün yada, docker ile sisteminize pulllayıp da çalıştırabilirsiniz. Ben bu yazıda docker ile nasıl çalıştıracağınızıdan bahsedeceğim.
Örnek komut docker run –pid=host -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest [master|node] –version [ocp-3.11]
- Dikkat etmeniz noktalar
- Hangi node yapısınız test ediyorsanız, o parametre ile çalıştırmanız gerekiyor. (Örn: master, node).
- Hangi kubernetes yapısı kullanıyorsanız3 gerekiyor ise o configürasyon yapısını seçmeniz gerekiyor.
Eğer proje ile ilgileniyorsanız cfg klasörünün altındaki dosyalara bakarak size uygun olan parametreyi bulabilir veya kuralların neler olduğuna bakabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
. ├── cfg │ ├── cis-1.3 │ ├── cis-1.4 │ ├── cis-1.5 │ ├── gke-1.0 │ └── rh-0.7 ├── check ├── cmd ├── docs ├── hack ├── hooks ├── images └── integration └── testdata ├── cis-1.3 ├── cis-1.4 └── cis-1.5 |
Program çıktısı
Aslına bakarsanız programın çıktısı gayet başarılı hazırlanmış FAIL PASS WARN INFO şeklinde Bilal’e anlatır gibi çıktılar sunuyor. Bir de üstüne hataları hata bulunan kısımların nasıl düzeltilebileceği hakkında örnekler bulunduruyor.
Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[FAIL] 1.17 Configure API server auditing - audit log backup retention 1.17 Edit the Openshift master config file /etc/origin/master/master-config.yaml, update the maximumRetainedFiles entry, set enabled to true and restart the API server. auditConfig: auditFilePath: ""/etc/origin/master/audit-ocp.log"" enabled: true maximumFileRetentionDays: 30 maximumFileSizeMegabytes: 10 maximumRetainedFiles: 10 Make the same changes in the inventory/ansible variables so the changes are not lost when an upgrade occurs. |
Daha ne olsun 🙂