OpenShift - Güvenlik

OpenShift güvenliği, esas olarak güvenlik kısıtlamalarını yöneten iki bileşenin birleşimidir.

  • Güvenlik Bağlamı Kısıtlamaları (SCC)
  • Hizmet Hesabı

Güvenlik Bağlamı Kısıtlamaları (SCC)

Temel olarak kapsül kısıtlaması için kullanılır, yani bir kapsülün sınırlamalarını, hangi eylemleri gerçekleştirebileceği ve kümede erişebileceği her şeyde olduğu gibi tanımladığı anlamına gelir.

OpenShift, yönetici tarafından kullanılabilen, değiştirilebilen ve genişletilebilen bir dizi önceden tanımlanmış SCC sağlar.

$ oc get scc
NAME              PRIV   CAPS  HOSTDIR  SELINUX    RUNASUSER         FSGROUP   SUPGROUP  PRIORITY
anyuid            false   []   false    MustRunAs  RunAsAny          RunAsAny  RunAsAny  10
hostaccess        false   []   true     MustRunAs  MustRunAsRange    RunAsAny  RunAsAny  <none>
hostmount-anyuid  false   []   true     MustRunAs  RunAsAny          RunAsAny  RunAsAny  <none>
nonroot           false   []   false    MustRunAs  MustRunAsNonRoot  RunAsAny  RunAsAny  <none>
privileged        true    []   true     RunAsAny   RunAsAny          RunAsAny  RunAsAny  <none>
restricted        false   []   false    MustRunAs  MustRunAsRange    RunAsAny  RunAsAny  <none>

Önceden tanımlanmış herhangi bir scc kullanmak istenirse, bu sadece kullanıcı veya grubu scc grubuna ekleyerek yapılabilir.

$ oadm policy add-user-to-scc <scc_name> <user_name>
$ oadm policy add-group-to-scc <scc_name> <group_name>

Hizmet Hesabı

Hizmet hesapları, temel olarak, ana makinelerin veya düğüm makinelerinin herhangi birinden bir komut veya istek çalıştırıldığında çağrılan OpenShift ana API'sine erişimi kontrol etmek için kullanılır.

Bir uygulama veya işlem, kısıtlı SCC tarafından verilmeyen bir yeteneği gerektirdiğinde, belirli bir hizmet hesabı oluşturmanız ve hesabı ilgili SCC'ye eklemeniz gerekecektir. Bununla birlikte, bir SCC gereksinimlerinize uymuyorsa, en uygun olanı kullanmak yerine gereksinimlerinize özgü yeni bir SCC oluşturmak daha iyidir. Sonunda, dağıtım yapılandırması için ayarlayın.

$ oc create serviceaccount Cadmin
$ oc adm policy add-scc-to-user vipin -z Cadmin

Konteyner Güvenliği

OpenShift'te, konteynerlerin güvenliği, konteyner platformunun ne kadar güvenli olduğu ve konteynerlerin nerede çalıştığı kavramına dayanır. Konteyner güvenliği ve nelere dikkat edilmesi gerektiği hakkında konuştuğumuzda ortaya çıkan birçok şey var.

Image Provenance - Üretim ortamında çalışan konteynerlerin nereden geldiğini tam olarak ve tartışılmaz bir şekilde tanımlayan güvenli bir etiketleme sistemi mevcuttur.

Security Scanning - Bir görüntü tarayıcı, tüm görüntüleri bilinen güvenlik açıklarına karşı otomatik olarak kontrol eder.

Auditing - Tüm kapların güncel kaplara dayandığından ve hem ana bilgisayarların hem de kapların güvenli bir şekilde yapılandırıldığından emin olmak için üretim ortamı düzenli olarak denetlenir.

Isolation and Least Privilege- Kapsayıcılar, etkili bir şekilde çalışması için gereken minimum kaynaklar ve ayrıcalıklarla çalışır. Ev sahibine veya diğer kaplara gereksiz yere müdahale edemezler.

Runtime Threat Detection - Çalışma zamanında kapsayıcıya alınmış uygulamaya karşı etkin tehditleri algılayan ve buna otomatik olarak yanıt veren bir yetenek.

Access Controls - Erişim kontrollerini uygulamak için AppArmor veya SELinux gibi Linux güvenlik modülleri kullanılır.

Konteyner güvenliğinin arşivlendiği birkaç anahtar yöntem vardır.

  • OAuth aracılığıyla erişimi kontrol etme
  • Self servis web konsolu aracılığıyla
  • Platform Sertifikalarına göre

OAuth aracılığıyla Erişimi Kontrol Etme

Bu yöntemde, API kontrol erişiminde kimlik doğrulama, OpenShift ana makinesinde yerleşik olarak gelen OAuth sunucuları aracılığıyla kimlik doğrulaması için güvenli bir belirteç alınarak arşivlenir. Yönetici olarak, OAuth sunucu yapılandırmasının yapılandırmasını değiştirme olanağına sahipsiniz.

OAuth sunucu yapılandırması hakkında daha fazla ayrıntı için bu eğiticinin 5. Bölümüne bakın.

Self Servis Web Konsolu aracılığıyla

Bu web konsolu güvenlik özelliği OpenShift web konsolunda yerleşiktir. Bu konsol, birlikte çalışan tüm ekiplerin kimlik doğrulama olmadan diğer ortamlara erişememesini sağlar. OpenShift'teki çoklu telnet ana birimi aşağıdaki güvenlik özelliklerine sahiptir:

  • TCL katmanı etkinleştirildi
  • Kimlik doğrulama için x.509 sertifikası kullanır
  • Ana makinede etcd yapılandırmasını güvenli hale getirir

Platform Sertifikalarına Göre

Bu yöntemde, her ana bilgisayar için sertifikalar, Ansible aracılığıyla kurulum sırasında yapılandırılır. Rest API üzerinden HTTPS iletişim protokolünü kullandığından, farklı bileşenlere ve nesnelere TCL güvenli bağlantıya ihtiyacımız var. Bunlar önceden tanımlanmış sertifikalardır, ancak erişim için ana kümeye özel bir sertifika bile yüklenebilir. Ana cihazın ilk kurulumu sırasında, özel sertifikalar, mevcut sertifikalar kullanılarak geçersiz kılınarak yapılandırılabilir.openshift_master_overwrite_named_certificates parametre.

Example

openshift_master_named_certificates = [{"certfile": "/path/on/host/to/master.crt", 
"keyfile": "/path/on/host/to/master.key", 
"cafile": "/path/on/host/to/mastercert.crt"}]

Özel sertifikaların nasıl oluşturulacağı hakkında daha fazla ayrıntı için aşağıdaki bağlantıyı ziyaret edin -

https://www.linux.com/learn/creating-self-signed-ssl-certificates-apache-linux

Ağ güvenliği

OpenShift'te, iletişim için Yazılım Tanımlı Ağ (SDN) kullanılır. Ağ ad alanı, kümedeki her bölme için kullanılır; burada her bölme, üzerinde ağ trafiğini almak için kendi IP'sini ve bir dizi bağlantı noktasını alır. Bu yöntemle, diğer projedeki podlarla iletişim kuramadığı için podlar izole edilebilir.

Bir Projeyi İzole Etmek

Bu, aşağıdakiler kullanılarak küme yöneticisi tarafından yapılabilir oadm command CLI'den.

$ oadm pod-network isolate-projects <project name 1> <project name 2>

Bu, yukarıda tanımlanan projelerin kümedeki diğer projelerle iletişim kuramayacağı anlamına gelir.

Birim Güvenliği

Hacim güvenliği, OpenShift kümesindeki projelerin PV ve PVC'sini güvence altına almak anlamına gelir. OpenShift'te birimlere erişimi kontrol etmek için başlıca dört bölüm vardır.

  • Ek Gruplar
  • fsGroup
  • runAsUser
  • seLinuxOptions

Ek Gruplar - Ek gruplar, normal Linux gruplarıdır. Sistemde bir işlem çalıştığında, bir kullanıcı kimliği ve grup kimliği ile çalışır. Bu gruplar, paylaşılan depolamaya erişimi kontrol etmek için kullanılır.

Aşağıdaki komutu kullanarak NFS montajını kontrol edin.

# showmount -e <nfs-server-ip-or-hostname>
Export list for f21-nfs.vm:
/opt/nfs *

Aşağıdaki komutu kullanarak bağlama sunucusundaki NFS ayrıntılarını kontrol edin.

# cat /etc/exports
/opt/nfs *(rw,sync,no_root_squash)
...
# ls -lZ /opt/nfs -d
drwxrws---. nfsnobody 2325 unconfined_u:object_r:usr_t:s0 /opt/nfs
# id nfsnobody
uid = 65534(nfsnobody) gid = 454265(nfsnobody) groups = 454265(nfsnobody)

/ Opt / nfs / ihracat UID ile ulaşılabilir454265 ve grup 2325.

apiVersion: v1
kind: Pod
...
spec:
   containers:
   - name: ...
      volumeMounts:
      - name: nfs
         mountPath: /usr/share/...
   securityContext:
      supplementalGroups: [2325]
   volumes:
   - name: nfs
      nfs:
      server: <nfs_server_ip_or_host>
      path: /opt/nfs

fsGroup

fsGroup, kapsayıcı ek grupları eklemek için kullanılan dosya sistemi grubunu ifade eder. Ek grup kimliği, paylaşılan depolama için kullanılır ve fsGroup, blok depolama için kullanılır.

kind: Pod
spec:
   containers:
   - name: ...
   securityContext:
      fsGroup: 2325

runAsUser

runAsUser, iletişim için kullanıcı kimliğini kullanır. Bu, kapsayıcı görüntüsünün kapsül tanımında tanımlanmasında kullanılır. Gerekirse tüm konteynerlerde tek bir ID kullanıcı kullanılabilir.

Kapsayıcı çalıştırılırken, tanımlanmış kimlik, dışa aktarmadaki sahip kimliği ile eşleştirilir. Belirtilen kimlik dışarıda tanımlanırsa, bölmedeki tüm kaplar için genel olur. Belirli bir kapsülle tanımlanmışsa, o zaman tek bir kaba özgü hale gelir.

spec:
   containers:
   - name: ...
      securityContext:
         runAsUser: 454265