Güvenlik bağlamı, bir pod veya kapsayıcı için ayrıcalık ve erişim denetimi ayarlarını tanımlar. Hangi Linux çekirdek parametrelerinin etkin olduğunu, iş yükünüzü hangi kullanıcı kimliğinin çalıştırdığını ve kapsayıcı süreçlerine hangi Linux yeteneklerinin verildiğini denetlemek için bu özelliği kullanın.
ECI, iki düzeyde güvenlik bağlamını destekler:
Pod güvenlik bağlamı — Ayarlar, örnekteki tüm kapsayıcılara ve birimlere uygulanır. Sysctl parametrelerini yapılandırmak için bu seçeneği kullanın.
Kapsayıcı güvenlik bağlamı — Ayarlar yalnızca belirtilen kapsayıcıya uygulanır. Kullanıcı kimliğini, yetenekleri ve ayrıcalıklı modu yapılandırmak için bu seçeneği kullanın.
Kubernetes güvenlik bağlamları hakkında arka plan bilgisi için bkz. Bir Pod veya Kapsayıcı İçin Güvenlik Bağlamı Yapılandırma.
Pod güvenlik bağlamı yapılandırma
Nasıl çalışır
Linux'ta sysctl arayüzü, çalışma zamanı çekirdek parametrelerini okumanıza ve değiştirmenize olanak tanır. ECI, sysctl yapılandırmasını Kubernetes güvenli/güvensiz ayrımına karşılık gelen iki API parametresi aracılığıyla sunar:
SecurityContext.Sysctl— Güvenli sysctl'ler için. Güvenli sysctl'ler varsayılan olarak etkindir ve örnek ile izole edilir; bu nedenle yapılan değişiklikler aynı düğümdeki diğer iş yüklerini etkilemez.HostSecurityContext.Sysctl— Güvensiz sysctl'ler için. Güvensiz sysctl'ler, düğüm kararlılığını veya komşu iş yüklerini etkileyebileceğinden açık yapılandırma gerektirir.
Bir ECI örneğinin geçerli çekirdek parametrelerini görüntülemek için aşağıdaki komutu çalıştırın:
sysctl -a
Referans betiği için bkz. sysctl.sh.
Sysctl parametrelerini yanlış şekilde değiştirmek işletim sistemini kararsız hale getirebilir. Değişiklikleri uygulamadan önce her bir parametrenin etkisini anlayın. Parametre referansı için bkz. sysctl(8).
Desteklenen sysctl parametreleri
Güvenli sysctl'ler (SecurityContext.Sysctl kullanın):
| Parametre | Notlar |
|---|---|
net.ipv4.ping_group_range |
|
net.ipv4.ip_unprivileged_port_start |
Güvensiz sysctl'ler (HostSecurityContext.Sysctl kullanın):
| Parametre | Notlar |
|---|---|
kernel.shm* |
kernel.shm_rmid_forced hariç |
kernel.msg* |
|
kernel.sem |
|
fs.mqueue.* |
|
net.* |
net.ipv4.ip_local_port_range, net.ipv4.tcp_syncookies, net.ipv4.ping_group_range ve net.ipv4.ip_unprivileged_port_start hariç |
vm.min_free_kbytes değerini de değiştirebilirsiniz. Bu değerin toplam örnek belleği boyutunun %20'sinden fazla olmamasını öneririz.
API parametreleri
Bir ECI örneği oluştururken bu parametreleri CreateContainerGroup API'sine iletin.
| Parametre | Tür | Örnek | Açıklama |
|---|---|---|---|
SecurityContext.Sysctl.N.Name |
string | net.ipv4.ping_group_range |
Ayarlanacak güvenli sysctl adı |
SecurityContext.Sysctl.N.Value |
string | 1 |
Güvenli sysctl değeri |
HostSecurityContext.Sysctl.N.Name |
string | kernel.msgmax |
Ayarlanacak güvensiz sysctl adı |
HostSecurityContext.Sysctl.N.Value |
string | 65536 |
Güvensiz sysctl değeri |
Kapsayıcı güvenlik bağlamı yapılandırma
Desteklenen parametreler
Kapsayıcı düzeyinde bir güvenlik bağlamı yapılandırmak için Container.N.SecurityContext ile ilgili parametreleri CreateContainerGroup API'sine iletin.
| Parametre | Tür | Örnek | Açıklama |
|---|---|---|---|
Container.N.SecurityContext.RunAsUser | long | 1000 | Kapsayıcıyı çalıştıran kullanıcı kimliği. Dockerfile'daki USER yönergesini geçersiz kılar. |
Container.N.SecurityContextRunAsGroup | long | 3000 | Kapsayıcıyı çalıştıran grup kimliği. |
Container.N.SecurityContextRunAsNonRoot | boolean | true | Kapsayıcının kök olmayan bir kullanıcı olarak çalıştırılıp çalıştırılmayacağı. Varsayılan: false. |
Container.N.SecurityContextPrivileged | boolean | true | Kapsayıcının ayrıcalıklı modda çalıştırılıp çalıştırılmayacağı. Varsayılan: false. Not Bu özellik dahili ön izleme aşamasındadır. Etkinleştirmek için bir destek bileti oluşturun. |
Container.N.SecurityContext.Capability.Add.N | array | NET_ADMIN | Kapsayıcı süreçlerine verilecek Linux yetenekleri. |
Container.N.SecurityContext.ReadOnlyRootFilesystem | boolean | true | Kapsayıcının kök dosya sisteminin salt okunur olup olmadığı. true olarak ayarlayın. |
Desteklenen yetenekler
Linux yetenek sabitleri çekirdek belgelerinde CAP_XXX biçimindedir, ancak ECI API'si CAP_ ön eki olmadan adı kullanır. Örneğin, CAP_NET_ADMIN yeteneğini vermek için değeri NET_ADMIN olarak ayarlayın.
| Yetenek | Açıklama |
|---|---|
AUDIT_WRITE | Kayıtları çekirdek denetim günlüğüne yazar. |
CHOWN | Dosya UID'lerinde ve GID'lerinde keyfi değişiklikler yapar. |
DAC_OVERRIDE | Dosya okuma, yazma ve çalıştırma izin denetimlerini atlar. |
FOWNER | Dosya sistemi UID'sinin süreç UID'siyle eşleşmesini gerektiren işlemler için izin denetimlerini atlar. |
FSETID | Bir dosya değiştirildiğinde set-user-ID ve set-group-ID izin bitlerini temizlemez. |
KILL | Sinyal gönderme işlemleri için izin denetimlerini atlar. |
MKNOD | mknod(2) kullanarak özel dosyalar oluşturur. |
NET_ADMIN | Arayüzleri ve yönlendirme tablolarını yapılandırma gibi ağ ile ilgili işlemleri gerçekleştirir. |
NET_BIND_SERVICE | Bir soketi ayrıcalıklı bir bağlantı noktasına (1024'ten küçük bağlantı noktası numarası) bağlar. |
NET_RAW | Ham ve paket soketlerini kullanır. |
SETFCAP | Dosyalarda keyfi yetenekler ayarlar. |
SETGID | Süreç GID'lerinde ve ek GID listesinde keyfi değişiklikler yapar. |
SETPCAP | Süreç yetenek sınırlayıcı kümesini değiştirir. |
SETUID | Süreç UID'lerinde keyfi değişiklikler yapar. |
SYS_CHROOT | chroot(2) kullanır. |
SYS_PTRACE | ptrace(2) kullanarak keyfi süreçleri izler. |
SYS_RAWIO | G/Ç bağlantı noktası işlemleri gerçekleştirir. Not Süreçlere |
Desteklenmeyen parametreler
Aşağıdaki parametreler yapılandırılamaz ve sabit varsayılan değerler kullanılır:
| Parametre | Varsayılan değer |
|---|---|
AllowedProcMountTypes |
DefaultProcMount |
readOnlyRootFilesystem |
true |
Başlatma kapsayıcıları
Güvenlik bağlamları, yukarıda listelenen aynı parametreler kullanılarak başlatma kapsayıcıları için de yapılandırılabilir. Aşağıdaki parametreler başlatma kapsayıcıları için desteklenmez:
SecurityContextRunAsGroupSecurityContextRunAsNonRoot