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

Azure Kubernetes Service (AKS) içindeki kümeleri yönetirken, iş yükü ve veri güvenliği önemli bir konudur. Mantıksal yalıtım kullanarak çok kiracılı kümeler çalıştırdığınızda, özellikle kaynak ve iş yükü erişimini güvenli hale getirmeniz gerekir. En son Kubernetes ve düğüm işletim sistemi güvenlik güncelleştirmelerini uygulayarak saldırı riskini en aza indirin.

Bu makalede AKS kümenizin güvenliğini sağlama konusuna odaklanılmaktadır. Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:

  • apı sunucusu erişimini güvenli hale getirmek için Azure Active Directory ve kubernetes rol tabanlı erişim denetimi (kubernetes RBAC) kullanın.
  • Düğüm kaynaklarına güvenli kapsayıcı erişimi.
  • Bir AKS kümesini en son Kubernetes sürümüne yükseltin.
  • Düğümleri güncel tutun ve güvenlik düzeltme eklerini otomatik olarak uygulayın.

Ayrıca, kapsayıcı görüntüsü yönetimi ve Pod güvenliğiiçin en iyi yöntemleri okuyabilirsiniz.

Tehditleri algılamaya ve AKS kümelerinizi korumaya yönelik önerileri görüntülemenize yardımcı olması için Güvenlik Merkezi Ile Azure Kubernetes Hizmetleri tümleştirmesini da kullanabilirsiniz.

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

En iyi yöntemler kılavuzu

Kümenizi güvenli hale getirmeye yönelik en önemli yollarla, Kubernetes API sunucusuna erişimin güvenli hale getirilmesine izin verilir. API sunucusuna erişimi denetlemek için Kubernetes RBAC 'i Azure Active Directory (Azure AD) ile tümleştirin. Bu denetimlerle, Azure aboneliklerinize erişiminizi güvenli hale getirmenin yanı da aynı şekilde güvenliği sağlayabilirsiniz.

Kubernetes API sunucusu, bir küme içinde eylemleri gerçekleştirmek için istekler için tek bir bağlantı noktası sağlar. API sunucusuna erişimi güvenli hale getirmek ve denetlemek için erişimi sınırlayın ve mümkün olan en düşük izin düzeylerini sağlayın. Bu yaklaşım Kubernetes 'e özgü olmasa da, AKS kümenizi çok kiracılı kullanım için mantıksal olarak yalıtıldığınızda özellikle önemlidir.

Azure AD, AKS kümeleriyle tümleşen kurumsal özellikli bir kimlik yönetimi çözümü sağlar. Kubernetes bir kimlik yönetimi çözümü sağlamadığından, API sunucusuna erişimi çok fazla kısıtlamak için, sesli olarak basılmış yapabilirsiniz. AKS 'deki Azure AD ile tümleşik kümeler sayesinde, API sunucusuna kullanıcıların kimliğini doğrulamak için mevcut kullanıcı ve grup hesaplarınızı kullanırsınız.

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

Kubernetes RBAC ve Azure AD-tümleştirme kullanarak, API sunucusunu güvenli hale getirebilirsiniz ve tek bir ad alanı gibi kapsamlı bir kaynak kümesi için gereken en düşük izinleri sağlayabilirsiniz. Farklı Azure AD kullanıcılarına veya farklı Kubernetes rollerine farklı gruplara izin verebilirsiniz. Ayrıntılı izinlerle, API sunucusuna erişimi kısıtlayabilir ve gerçekleştirilen eylemlerin net bir denetim izini sağlayabilirsiniz.

Önerilen en iyi yöntem, tek kimlikler yerine dosya ve klasörlere erişim sağlamak için grupları kullanmaktır. Örneğin, kullanıcıları bireysel Kullanıcılar yerine Kubernetes rollerine bağlamak Için BIR Azure AD Grup üyeliği kullanın. Bir kullanıcının grup üyeliği değiştikçe, AKS kümesindeki erişim izinleri buna göre değişir.

Bu arada, bireysel kullanıcıyı doğrudan bir role ve onların iş işlevi değişikliklerine bağladığınızı varsayalım. Azure AD grup üyelikleri güncelleştirirken, AKS kümesinde izinleri olmaz. Bu senaryoda, Kullanıcı gerektirdiğinden daha fazla izinle sona erer.

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

Kaynaklara güvenli kapsayıcı erişimi

En iyi yöntemler kılavuzu

Kapsayıcıların gerçekleştirebileceği eylemlere erişimi sınırlayın. En az sayıda izin sağlayın ve kök erişimi veya ayrıcalıklı yükseltme kullanmaktan kaçının.

Kullanıcılara veya gruplara gereken en düşük ayrıcalıkları vermeniz gerektiği şekilde, kapsayıcıları yalnızca gerekli eylemler ve işlemlerle sınırlandırmanız gerekir. Saldırı riskini en aza indirmek için, ilerletilen 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ı , çalıştırılacak Kullanıcı veya grup veya kullanıma sunulacak Linux özellikleri gibi ek izinler tanımlamanızı sağlar. Daha iyi uygulamalar için bkz. kaynaklara güvenli Pod erişimi.

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

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

Yerleşik Linux güvenlik özellikleri yalnızca Linux düğümlerinde ve yığınların üzerinde kullanılabilir.

Not

Şu anda, Kubernetes ortamları, çok kiracılı Kullanıcı kullanımı için tamamen güvenli değildir. Düğümler için AppArmor, seccomp,Pod güvenlik Ilkeleri veya Kubernetes RBAC gibi ek güvenlik özellikleri, etkin olarak güvenlik açıklarını engeller.

Saldırgan çok kiracılı iş yüklerini çalıştırırken doğru güvenlik için yalnızca bir hiper yöneticiye güvenin. Kubernetes güvenlik etki alanı, tek bir düğüm değil, tüm küme haline gelir.

Bu tür çok kiracılı iş yükleri için, fiziksel olarak yalıtılmış kümeler kullanmanız gerekir.

Uygulama koruma sağlamak

Kapsayıcı eylemlerini sınırlandırmak için AppArmor Linux çekirdek güvenlik modülünü kullanabilirsiniz. AppArmor, temel alınan AKS düğüm işletim sisteminin bir parçası olarak kullanılabilir ve varsayılan olarak etkindir. Okuma, yazma veya yürütme eylemlerini kısıtlayan AppArmor profilleri veya filesystems bağlama gibi sistem işlevlerini oluşturursunuz. Varsayılan AppArmor profilleri /proc , çeşitli ve konumlarına erişimi kısıtlar /sys ve temel alınan düğümden kapsayıcıları mantıksal olarak yalıtmak için bir yol sağlar. AppArmor, yalnızca Kubernetes pods değil, Linux üzerinde çalışan tüm uygulamalar için çalışır.

Bir AKS kümesinde kullanılan AppArmor profilleri kapsayıcı eylemlerini sınırlandırmaya

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

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

  2. Reddetme-yazma. 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 eklenir apparmor_parser .

  1. Profili AppArmor öğesine ekleyin.

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

    sudo apparmor_parser deny-write.profile
    

    Profil doğru şekilde ayrıştırılıp AppArmor 'e uygulanmışsa, herhangi bir çıktı görmezsiniz ve komut istemine geri dönersiniz.

  3. Yerel makinenizden, aks-AppArmor. YAML adlı bir pod bildirimi oluşturun. Bu bildirim:

    • İçin bir ek açıklama tanımlar container.apparmor.security.beta.kubernetes .
    • Ö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 'un dağıtıldığı ile, Hello-AppArmor Pod 'ın Engellenen şekilde göründüğünü doğrulama ' yı kullanı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 tüm Linux uygulamaları için çalışırken, seccomp (San) işlem düzeyinde çalışmaktadır. Seccomp Ayrıca 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 desteklenir. Seccomp ile kapsayıcı işlem çağrılarını sınırlayabilirsiniz. Kapsayıcının en düşük iznini yalnızca tarafından çalışacak şekilde verme konusunda en iyi uygulamaya hizalayın:

  • Filtre ile tanımlama izin verilecek veya reddedilecek işlemler.
  • Seccomp filtresi ile ilişkilendirilecek bir pod YAML bildirimi içine açıklama ekleme.

Seccomp eylemini görmek için, bir dosyada izinleri değiştirmeyi önleyen 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 üzeri sürümlerde aşağıdakileri yapılandırmanız gerekir:

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

    • İçin bir ek açıklama tanımlar seccomp.security.alpha.kubernetes.io .
    • Önceki adımda oluşturulan engelleme-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 üzeri sürümlerde aşağıdakileri yapılandırmanız gerekir:

    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 Pod komutunu kullanarak Pod durumunu görüntüleyin.

    • Pod bir hata bildiriyor.
    • chmodAşağıdaki örnek çıktıda gösterildiği gibi komutun seccomp filtresi tarafından çalışması engellenir:
    $ 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.

En son Kubernetes sürümüne düzenli olarak güncelleştir

En iyi yöntemler kılavuzu

Yeni özellikler ve hata düzeltmeleri üzerinde güncel kalmak için, AKS kümenizdeki Kubernetes sürümünü düzenli olarak yükseltin.

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

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

Yeni özellikler genellikle kararlı hale gelmeden önce alfa ve beta durumunda ilerler. Kararlı olduktan sonra genel kullanıma hazır olur ve üretimde kullanılması önerilir. Kubernetes yeni özellik yayın döngüsü, düzenli olarak hataya neden olan değişikliklerle karşılaşmadan veya dağıtımlarınızı ve şablonlarınızı ayarlamadan Kubernetes'i güncelleştirmenize olanak sağlar.

AKS, Kubernetes'in üç ikincil sürümünü destekler. Yeni bir ikincil düzeltme eki sürümü tanıtıldıktan sonra desteklenen en eski ikincil sürüm ve düzeltme eki sürümü kaldırıldı. Küçük Kubernetes güncelleştirmeleri düzenli aralıklarla yapılır. Destekte kalmak için gerekli yükseltmeleri denetlemeye uygun bir idare sürecinizin olduğundan emin olun. Daha fazla bilgi için bkz. Desteklenen Kubernetes sürümleri AKS.

Kümenizin kullanılabilir sürümlerini kontrol etmek için aşağıdaki örnekte gösterildiği gibi az aks get-upgrades 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 bir şekilde:

  • Cordons ve aynı anda bir düğümü boşaltıyor.
  • Kalan düğümlerde podları zamanlar.
  • En son işletim sistemi ve Kubernetes sürümlerini çalıştıran yeni bir düğüm dağıtır.

Önemli

Geliştirme testi ortamında yeni ikincil sürümleri test edin ve yeni Kubernetes sürümüyle iş yükebilirsiniz.

Kubernetes, iş yüklerinin bağlı olduğu API'leri (sürüm 1.16'da olduğu gibi) kullanımdan sildi. Yeni sürümleri üretime getirerek, ayrı sürümlerde birden çok düğüm havuzu kullanmayı ve güncelleştirmeyi bir küme genelinde aşamalı olarak almak için havuzları tek yükseltmeyi göz önünde bulundurabilirsiniz. Birden çok küme çalıştırıyorsanız, etki veya değişiklikleri aşamalı olarak izlemek için bir kümeyi bir defada yükseltin.

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

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

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

AKS'de Linux düğümleri her akşam dağıtım güncelleştirme kanalı aracılığıyla güvenlik düzeltme ekleri elde ediyor. Düğümler aks kümesine dağıtıldığından bu davranış otomatik olarak yapılandırılır. Kesintiyi ve çalışan iş yüklerinin olası etkisini en aza indirmek için, bir güvenlik düzeltme eki veya çekirdek güncelleştirmesi gerektiriyorsa düğümler otomatik olarak yeniden başlatlanmaz. Düğüm yeniden başlatmalarını işleme hakkında daha fazla bilgi için bkz. AKS'de düğümlere güvenlik ve çekirdek güncelleştirmeleri uygulama.

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

Katılımsız yükseltmeler, Linux düğümü işletim sistemi için güncelleştirmeleri uygulasa da 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 alır, ancak tüm denetimler ve yeniden başlatmalar tamamlandıktan sonra da eşleşmez. Kümeniz tarafından kullanılan düğüm görüntülerini kontrol etmek ve güncelleştirmek için düğüm görüntüsü yükseltmesini kullanabilirsiniz. Nod image upgrade hakkında daha fazla bilgi için bkz. Azure Kubernetes Service (AKS) düğümü görüntü yükseltmesi.

sunucu Windows güncelleştirmelerini işleme

Sunucu Windows için, podları güvenli bir şekilde bağp boşaltmak ve güncelleştirilmiş düğümleri dağıtmak için düzenli olarak bir düğüm görüntüsü yükseltme işlemi gerçekleştirin.