Red Hat OpenShift'te securityContext ve runAsUser kullanımı oldukça önemlidir, çünkü bu özellikler konteynerlerinizin güvenliğini artırmanıza yardımcı olur. Şimdi adım adım bu konuyu açıklayacağım.
securityContext Nedir?
securityContext, bir konteyner veya pod için güvenlik ayarlarını belirlemenize olanak tanır. Bu ayarlar, bir konteynerin veya pod'un nasıl çalıştırılacağını, hangi izinlere sahip olacağını ve hangi kullanıcı ile çalıştırılacağını tanımlar. Bu, sisteminizin güvenliğini artırmanın ve izole etmenin bir yoludur.
runAsUser Nedir?
runAsUser, konteynerinizin hangi kullanıcı kimliği (UID) ile çalışacağını belirler. Bu, konteyner içindeki süreçlerin kök kullanıcı yerine belirli bir UID ile çalıştırılmasını sağlar ve böylece güvenlik risklerini azaltır.
securityContext ve runAsUser Kullanımı
runAsUser ve securityContext kullanımı için temel bir YAML dosyası örneği ile göstereceğim:
Örnek Yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginx
securityContext:
runAsUser: 1000
Bu örnekte:
- Bir Pod tanımlıyoruz ve adını mypod olarak belirtiyoruz.
- Pod içindeki bir konteyner nginx imajını kullanarak oluşturuluyor.
- securityContext kullanarak bu konteynerin 1000 UID'sine sahip bir kullanıcı ile çalışmasını sağlıyoruz. Bu UID, konteynerin root kullanıcısı yerine bu kullanıcı ile çalışmasını sağlar.
Neden runAsUser Kullanmalıyız?
- Güvenlik: Root kullanıcısıyla çalışan konteynerler daha büyük güvenlik riskleri taşır. runAsUser ile belirli bir UID kullanarak bu riskleri minimize edebilirsiniz.
- İzolasyon: Konteynerlerinizi diğer sistemlerden ve konteynerlerden izole ederek güvenlik açıklarını kapatmış olursunuz.
- Uygulama Gereksinimleri: Bazı uygulamalar belirli kullanıcı izinlerine ihtiyaç duyar. runAsUser bu gereksinimleri karşılamada yardımcı olur.
UID Kullanımı ve Standartları
UID (User ID), Linux sistemlerde kullanıcılara atanan benzersiz bir sayıdır. Konteynerlerde hangi UID'nin kullanılacağı konusunda birkaç önemli noktaya değinebiliriz:
Standart UID Prosedürleri ve Aralıkları
UID Aralıkları:
Linux sistemlerde UID genellikle 0 (root) ile başlar ve 65,535'e kadar gider. Kullanıcı UID'leri genellikle 1,000'den başlar.
Konteynerlerde UID seçimi, genellikle host sistemi üzerindeki UID aralıklarıyla uyumlu olmalıdır. Bu, kullanıcıların host üzerinde hangi UID'leri kullandığını dikkate alarak yapılır.
OpenShift’in UID Yönetimi:
OpenShift, konteynerlerin güvenliğini sağlamak için SELinux politikaları ve SCC (Security Context Constraints) kullanır. OpenShift ortamında, konteynerlerin UID'lerini izole eder ve her konteyneri rastgele bir UID ile çalıştırarak güvenliği artırır.
OpenShift, kullanıcı ve projelere UID aralıkları atayarak, bir konteynerin başka bir konteyner veya kullanıcı ile çakışmasını engeller. Bu aralıklar genellikle 10,000 ve 20,000 arasındadır.
Örneğin, bir proje için UID aralığı 10,000 ile 20,000 arasında olabilir ve bu aralıktaki UID'ler sadece bu proje için kullanılabilir.
Özel UID Atamaları:
Bazı uygulamalar belirli UID'lerle çalışmayı gerektirir. Bu durumda, runAsUser kullanarak belirli bir UID atayabilirsiniz. Örneğin, 1000 UID'sini kullanmak için runAsUser: 1000 olarak tanımlayabilirsiniz.
Özel UID kullanırken, seçtiğiniz UID'nin host sistemde veya başka projelerde kullanılmadığından emin olun. Bu, UID çakışmalarını önler ve sistem güvenliğini sağlar.
Güvenli UID Kullanımı:
Her zaman root (UID 0) kullanmaktan kaçının, çünkü root kullanıcı ile çalışan konteynerler, güvenlik açığı oluşturabilir.
Kullanıcılar ve projeler için atanmış UID aralıklarını takip edin ve konteynerlerin bu aralıklarda çalışmasını sağlayın.
UID Yönetimi Önerileri
- Projeler için Ayrılmış UID Aralıkları: Her projeye belirli bir UID aralığı atayın. Örneğin, bir proje için UID 10,000-10,500 aralığını kullanabilirsiniz.
- Güvenlik Kısıtlamaları: OpenShift üzerinde SCC kullanarak hangi UID'lerin kullanılabileceğini belirleyin.
- Kullanıcı Eğitimleri: Geliştiricilere UID kullanımı ve güvenliği hakkında eğitim verin. Böylece konteynerlerin UID'lerini doğru ve güvenli bir şekilde yönetebilirler.
Örnek Konfigürasyon
Örneğin, bir proje için UID aralığı belirlemek ve bu aralıkta bir konteyner çalıştırmak için aşağıdaki gibi bir SecurityContextConstraints (SCC) tanımlayabilirsiniz:
Örnek Yaml
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
name: custom-scc
runAsUser:
type: MustRunAsRange
uidRangeMin: 10000
uidRangeMax: 20000
# Diğer güvenlik ayarları buraya eklenebilir
Bu SCC ile, projelerinizin konteynerlerini 10,000 ile 20,000 arasında bir UID ile çalıştırabilirsiniz.
Daha Fazla detay ve bilgi bu adreste : Managing security context constraints | Authentication and authorization | OpenShift Container Platform 4.15