Azure Kubernetes Service (AKS) içinde küme güvenliği ve yükseltmeleri için en iyi yöntemler

Kümelerinizi Azure Kubernetes Service (AKS) yönetirken iş yükü ve veri güvenliği önemli bir konudur. Mantıksal yalıtım kullanarak çok kiracılı kümeleri çalıştırsanız, özellikle kaynak ve iş yükü erişiminin güvenliğini sağlamanız gerekir. En son Kubernetes ve düğüm işletim sistemi güvenlik güncelleştirmelerini uygulayarak saldırı riskini en aza indirme.

Bu makalede AKS kümenizin güvenliğini sağlamaya odaklanabilirsiniz. Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:

  • API Azure Active Directory ve Kubernetes rol tabanlı erişim denetimi (Kubernetes RBAC) kullanın.
  • Düğüm kaynaklarına kapsayıcı erişiminin güvenliğini sağlama.
  • AKS kümesi en son Kubernetes sürümüne yükseltin.
  • Düğümleri güncel tutma ve güvenlik düzeltme eklerini otomatik olarak uygulama.

Kapsayıcı görüntüsü yönetimi ve pod güvenliği için en iyi yöntemleri de okuyabilirsiniz.

Tehditleri algılamaya ve AKS kümelerinizi güvenli hale getirmeye yönelik önerileri görüntülemenize yardımcı olması için Bulut için Defender ile Azure Kubernetes Services tümleştirmesini de kullanabilirsiniz.

API sunucusuna ve küme düğümlerine güvenli erişim

En iyi yöntemler kılavuzu

Kümenizin güvenliğini sağlamanın en önemli yollarından biri, Kubernetes API sunucusuna erişimin güvenliğini sağlamaktır. API sunucusuna erişimi kontrol etmek için Kubernetes RBAC'yi Azure Active Directory (Azure AD) ile tümleştirin. Bu denetimlerle AKS'nin güvenliğini Azure aboneliklerinize erişimin güvenliğini sağlamakla aynı şekilde sağlarsınız.

Kubernetes API sunucusu, isteklerin küme içinde eylem gerçekleştirmesi için tek bir bağlantı noktası sağlar. API sunucusuna erişimin güvenliğini sağlamak ve erişimi denetim altına almak için erişimi sınırla ve mümkün olan en düşük izin düzeylerini sağla. Bu yaklaşım Kubernetes için benzersiz değildir ancak AKS kümenizi çok kiracılı kullanım için mantıksal olarak yalıtılmış durumdayken özellikle önemlidir.

Azure AD, AKS kümeleriyle tümleştirilmiş, kurumsal kullanıma hazır bir kimlik yönetimi çözümü sağlar. Kubernetes bir kimlik yönetimi çözümü sağlamasa da API sunucusuna erişimi ayrıntılı bir şekilde kısıtlamak zor olabilir. AKS'de Azure AD tümleşik kümeleriyle, API sunucusunda kullanıcıların kimliğini doğrulamak için mevcut kullanıcı ve grup hesaplarınızı kullanırsınız.

Azure Active Directory AKS kümeleri için tümleştirme

Kubernetes RBAC ve Azure AD tümleştirmesini kullanarak API sunucusunun güvenliğini s güvence altına alır ve tek bir ad alanı gibi kapsamlı bir kaynak kümesi için gereken en düşük izinleri sebilirsiniz. Farklı Azure AD kullanıcıları veya gruplarına farklı Kubernetes rolleri veebilirsiniz. Ayrıntılı izinlerle API sunucusuna erişimi kısıtlar ve gerçekleştirilen eylemlerin net bir denetim izini sebilirsiniz.

Önerilen en iyi yöntem, tek tek kimlikler yerine dosyalara ve klasörlere erişim sağlamak için grupları kullanmaktır. Örneğin, kullanıcıları tek tek kullanıcılar yerine Kubernetes rollerine bağlamak için bir Azure AD grup üyeliği kullanın. Kullanıcının grup üyeliği değiştiklerinde AKS kümesinde erişim izinleri de buna göre değişir.

Bu arada, tek tek kullanıcıyı doğrudan bir role bağlayabilirsiniz ve kullanıcının iş işlevi değişir. Azure AD grup üyelikleri güncelleştirilirken, AKS kümesinde izinleri güncelleştirilz. Bu senaryoda kullanıcıya gerekenden daha fazla izin gerekir.

Azure AD tümleştirmesi, Kubernetes RBAC ve Azure RBAC hakkında daha fazla bilgi için bkz. AKS'de kimlik doğrulaması ve yetkilendirme için en iyi yöntemler.

Kaynaklara kapsayıcı erişiminin güvenliğini sağlama

En iyi yöntemler kılavuzu

Kapsayıcıların gerçekleştirecekleri eylemlere erişimi sınırla. En az sayıda izin girin ve kök erişimin veya ayrıcalıklı yükseltmenin kullanımından kaçının.

Kullanıcılara veya gruplara gereken en düşük ayrıcalıkları aynı şekilde, kapsayıcıları da yalnızca gerekli eylem ve işlemlerle sınırlamanız gerekir. Saldırı riskini en aza indirmek için, yükseltme ayrıcalıkları veya kök erişim gerektiren uygulamaları ve kapsayıcıları yapılandırmaktan kaçının.

Örneğin, allowPrivilegeEscalation: false pod bildiriminde ayarlayın. Bu yerleşik Kubernetes pod güvenlik bağlamları, farklı çalıştıracak kullanıcı veya grup veya ortaya çıkarıla Linux özellikleri gibi ek izinler tanımlamaya imkan sağlar. Daha iyi yöntemler için bkz. Kaynaklara pod erişiminin güvenliğini sağlama.

Kapsayıcı eylemlerinin daha da ayrıntılı denetimi için AppArmor ve seccomp gibi yerleşik Linux güvenlik özelliklerini de kullanabilirsiniz.

  1. Linux güvenlik özelliklerini düğüm düzeyinde tanımlayın.
  2. Pod bildirimi aracılığıyla özellikleri uygulama.

Yerleşik Linux güvenlik özellikleri yalnızca Linux düğümlerde ve podlarda kullanılabilir.

Not

Şu anda Kubernetes ortamları çok kiracılı saldırgan kullanımlar için tamamen güvenli değildir. Düğümler için AppArmor, *seccomp,*Pod Güvenlik İlkeleri veya Kubernetes RBAC gibi ek güvenlik özellikleri açıkları verimli bir şekilde engelleyebilir.

Saldırgan çok kiracılı iş yüklerini çalıştırmaya yönelik gerçek güvenlik için yalnızca bir hipervizöre güvenin. Kubernetes için güvenlik etki alanı tek bir düğüm değil kümenin tamamı olur.

Bu tür saldırgan çok kiracılı iş yükleri için fiziksel olarak yalıtılmış kümeleri kullanabilirsiniz.

App Armor

Kapsayıcı eylemlerini sınırlamak için AppArmor Linux çekirdek güvenlik modülünü kullanabilirsiniz. AppArmor, temel AKS düğümü işletim sistemi kapsamında kullanılabilir ve varsayılan olarak etkindir. Okuma, yazma veya yürütme eylemlerini veya dosya sistemleri bağlama gibi sistem işlevlerini kısıtlayan AppArmor profilleri oluşturabilirsiniz. Varsayılan AppArmor profilleri çeşitli ve konumlara erişimi kısıtlar ve kapsayıcıları temel düğümden /proc mantıksal olarak yalıtmak /sys için bir yol sağlar. AppArmor yalnızca Kubernetes podları için değil Linux üzerinde çalışan tüm uygulamalarda çalışır.

Kapsayıcı eylemlerini sınırlamak için AKS kümesinde kullanımda olan AppArmor profilleri

AppArmor'ı uygulamalı olarak görmek için, aşağıdaki örnek dosyalara yazmayı engelleyen bir profil oluşturur.

  1. AKS düğümüne SSH.

  2. deny-write.profile adlı bir dosya oluşturun.

  3. Aşağıdaki içeriği yapıştırın:

    #include <tunables/global>
    profile k8s-apparmor-example-deny-write flags=(attach_disconnected) {
      #include <abstractions/base>
    
      file,
      # Deny all file writes.
      deny /** w,
    }
    

AppArmor profilleri komutu kullanılarak apparmor_parser eklenir.

  1. Profili AppArmor'a ekleyin.

  2. Önceki adımda oluşturulan profilin adını belirtin:

    sudo apparmor_parser deny-write.profile
    

    Profil doğru şekilde ayrıştırıldıysa ve AppArmor'a uygulandıysa, herhangi bir çıkış görmeyebilirsiniz ve komut istemine döndürülürsiniz.

  3. Yerel makineden aks-apparmor.yaml adlı bir pod bildirimi oluşturun. Bu bildirim:

    • için bir ek açıklama container.apparmor.security.beta.kubernetes tanımlar.
    • Önceki adımlarda oluşturulan reddetme-yazma profiline başvurur.
    apiVersion: v1
    kind: Pod
    metadata:
      name: hello-apparmor
      annotations:
        container.apparmor.security.beta.kubernetes.io/hello: localhost/k8s-apparmor-example-deny-write
    spec:
      containers:
      - name: hello
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]
    
  4. Pod dağıtıldığında hello-apparmor pod'unu engellenmiş olarak gösterip göstermey olduğunu doğrulayın:

    $ kubectl get pods
    
    NAME             READY   STATUS    RESTARTS   AGE
    aks-ssh          1/1     Running   0          4m2s
    hello-apparmor   0/1     Blocked   0          50s
    

AppArmor hakkında daha fazla bilgi için bkz. Kubernetes'te AppArmor profilleri.

Güvenli bilgi işlem

AppArmor herhangi bir Linux uygulaması için çalışırken, seccomp (sec ure comp uting) işlem düzeyinde çalışır. Seccomp aynı zamanda bir Linux çekirdek güvenlik modülüdür ve AKS düğümleri tarafından kullanılan Docker çalışma zamanı tarafından yerel olarak de desteklemektedir. Seccomp ile kapsayıcı işlem çağrılarını sınırabilirsiniz. Kapsayıcıya yalnızca aşağıdakiler tarafından çalışması için en az izin verilmesini en iyi yönteme uygun şekilde hizalarsınız:

  • ile tanımlama, izin ver veya reddedilen eylemleri filtreler.
  • Seccomp filtresiyle ilişkilendirmek için pod YAML bildirimi içinde açıklama.

Seccomp'ın nasıl işlemde olduğunu görmek için, bir dosyada izinlerin değiştirilmesini engelleyen bir filtre oluşturun.

  1. AKS düğümüne SSH.

  2. /var/lib/kubelet/seccomp/prevent-chmod adlı bir seccomp filtresi oluşturun.

  3. Aşağıdaki içeriği yapıştırın:

    {
      "defaultAction": "SCMP_ACT_ALLOW",
      "syscalls": [
        {
          "name": "chmod",
          "action": "SCMP_ACT_ERRNO"
        },
        {
          "name": "fchmodat",
          "action": "SCMP_ACT_ERRNO"
        },
        {
          "name": "chmodat",
          "action": "SCMP_ACT_ERRNO"
        }
      ]
    }
    

    Sürüm 1.19 ve sonraki sürümlerde, şunları yapılandırmalı:

    {
      "defaultAction": "SCMP_ACT_ALLOW",
      "syscalls": [
        {
          "names": ["chmod","fchmodat","chmodat"],
          "action": "SCMP_ACT_ERRNO"
        }
      ]
    }
    
  4. Yerel makineden aks-seccomp.yaml adlı bir pod bildirimi oluşturun ve aşağıdaki içeriği yapıştırın. Bu bildirim:

    • için bir ek açıklama seccomp.security.alpha.kubernetes.io tanımlar.
    • Önceki adımda oluşturulan prevent-chmod filtresine başvurur.
    apiVersion: v1
    kind: Pod
    metadata:
      name: chmod-prevented
      annotations:
        seccomp.security.alpha.kubernetes.io/pod: localhost/prevent-chmod
    spec:
      containers:
      - name: chmod
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command:
          - "chmod"
        args:
         - "777"
         - /etc/hostname
      restartPolicy: Never
    

    Sürüm 1.19 ve sonraki sürümlerde, şunları yapılandırmalı:

    apiVersion: v1
    kind: Pod
    metadata:
      name: chmod-prevented
    spec:
      securityContext:
        seccompProfile:
          type: Localhost
          localhostProfile: prevent-chmod
      containers:
      - name: chmod
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command:
          - "chmod"
        args:
         - "777"
         - /etc/hostname
      restartPolicy: Never
    
  5. kubectl apply komutunu kullanarak örnek pod'u dağıtın:

    kubectl apply -f ./aks-seccomp.yaml
    
  6. kubectl get pods komutunu kullanarak pod durumunu görüntüleme.

    • Pod bir hata raporlar.
    • Aşağıdaki chmod örnek çıktıda gösterildiği gibi komutun seccomp filtresi tarafından çalıştırması engellenmiş olur:
    $ kubectl get pods
    
    NAME                      READY     STATUS    RESTARTS   AGE
    chmod-prevented           0/1       Error     0          7s
    

Kullanılabilir filtreler hakkında daha fazla bilgi için bkz. Docker için seccomp güvenlik profilleri.

Kubernetes'in en son sürümüne düzenli olarak güncelleştirme

En iyi yöntemler kılavuzu

Yeni özellikler ve hata düzeltmeleri hakkında güncel kalmak için AKS kümenizin Kubernetes sürümünü düzenli olarak yükseltin.

Kubernetes, daha geleneksel altyapı platformlarından daha hızlı bir şekilde yeni özellikler yayımlar. Kubernetes güncelleştirmeleri şunları içerir:

  • Yeni özellikler
  • Hata veya güvenlik düzeltmeleri

Yeni özellikler tipik olarak Alfa ve Beta durumunu kararlı hale gelmeden önce taşır. Kararlı olduktan sonra, genel olarak kullanılabilir ve üretim kullanımı için önerilir. Kubernetes yeni özellik yayınlama çevrimi, Kubernetes 'i düzenli olarak bozmadan veya dağıtımlarınızı ve şablonlarınızı ayarlamadan güncelleştirmenize olanak tanır.

AKS, Kubernetes 'in üç alt sürümünü destekler. Yeni bir ikincil yama sürümü kullanıma sunulduktan sonra, desteklenen en eski ikincil sürüm ve düzeltme eki sürümleri kullanımdan kalkmıştır. İkincil Kubernetes güncelleştirmeleri düzenli aralıklarla gerçekleşir. Destek kapsamında kalmak için, gerekli yükseltmeleri denetlemek üzere bir idare işlemi kullandığınızdan emin olun. Daha fazla bilgi için bkz. desteklenen Kubernetes sürümleri AKS.

Kümeniz için kullanılabilen sürümleri denetlemek için, aşağıdaki örnekte gösterildiği gibi az aks Get-yükseltmeler komutunu kullanın:

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster

Daha sonra, az aks Upgrade komutunu kullanarak aks kümenizi yükseltebilirsiniz. Yükseltme işlemi güvenli:

  • Tek seferde bir düğümü korbağlar ve boşaltır.
  • Kalan düğümlerde Pod zamanlar.
  • En son işletim sistemi ve Kubernetes sürümlerini çalıştıran yeni bir düğüm dağıtır.

Önemli

Yeni küçük sürümleri bir geliştirme testi ortamında test edin ve yeni Kubernetes sürümüyle iş yükünüzün sağlıklı olduğunu doğrulayın.

Kubernetes, iş yüklerinizin kullandığı API 'Leri (sürüm 1,16 ' de olduğu gibi) kullanımdan kaldırır. Yeni sürümler üretime getirilirken, ayrı sürümlerde birden çok düğüm havuzu kullanmayı ve tek tek havuzları tek seferde yükseltmeyi göz önünde bulundurun. Birden çok küme çalıştırıyorsanız, etki veya değişiklik için tek seferde bir kümeyi aşamalı olarak izlemeye yükseltin.

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version KUBERNETES_VERSION

AKS 'teki yükseltmeler hakkında daha fazla bilgi için bkz. aks 'de desteklenen Kubernetes sürümleri ve aks kümesini yükseltme.

Linux düğüm güncelleştirmelerini işleme

AKS içindeki her akşam Linux düğümü, kendi sahip oldukları güncelleştirme kanalıyla güvenlik düzeltme ekleri alır. Bu davranış, düğümler bir AKS kümesinde dağıtıldığında otomatik olarak yapılandırılır. Çalışma yüklerini çalıştırmaya yönelik kesintiyi ve olası etkiyi en aza indirmek için, bir güvenlik düzeltme eki veya çekirdek güncelleştirmesi gerektiriyorsa düğümler otomatik olarak yeniden başlatılır. Düğüm yeniden başlatmaların nasıl işleneceği hakkında daha fazla bilgi için bkz. AKS 'deki düğümlere güvenlik ve çekirdek güncelleştirmelerini uygulama.

Düğüm görüntüsü yükseltmeleri

Katılımsız yükseltmeler, Linux düğümü işletim sistemine güncelleştirmeler uygular, ancak kümeniz için düğüm oluşturmak için kullanılan görüntü değişmeden kalır. Kümenize yeni bir Linux düğümü eklenirse, düğümü oluşturmak için özgün görüntü kullanılır. Bu yeni düğüm, her gece otomatik denetim sırasında kullanılabilen tüm güvenlik ve çekirdek güncelleştirmelerini alacak, ancak tüm denetimler ve yeniden başlatmalar tamamlanana kadar düzeltme eki yüklenmemiş olur. Kümeniz tarafından kullanılan düğüm görüntülerini denetlemek ve güncelleştirmek için düğüm görüntüsü yükseltmesini kullanabilirsiniz. Nod görüntü yükseltme hakkında daha fazla bilgi için bkz. Azure Kubernetes Service (AKS) node Image Upgrade.

Windows sunucusu düğüm güncelleştirmelerini işle

Windows sunucu düğümleri için düzenli olarak bir düğüm görüntüsü yükseltme işlemini güvenli bir şekilde bir şekilde gerçekleştirin ve onları boşaltın ve güncelleştirilmiş düğümleri dağıtırsınız.