Azure Kubernetes Service'te (AKS) küme güvenliği ve yükseltmeleri için en iyi yöntemler
Azure Kubernetes Service'te (AKS) kümeleri yönetirken iş yükü ve veri güvenliği önemli bir noktadır. Mantıksal yalıtım kullanarak çok kiracılı kümeleri çalıştırdığınızda, ö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 indirin.
Bu makalede AKS kümenizin güvenliğini sağlama konusuna odaklanmaktadır. Şunları yapmayı öğreneceksiniz:
- API sunucusu erişiminin güvenliğini sağlamak için Microsoft Entra Id ve Kubernetes rol tabanlı erişim denetimini (Kubernetes RBAC) kullanın.
- Düğüm kaynaklarına kapsayıcı erişiminin güvenliğini sağlama.
- 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.
Kapsayıcı görüntüsü yönetimi ve pod güvenliği için en iyi yöntemleri de okuyabilirsiniz.
Tehdit korumasını etkinleştirme
En iyi yöntem kılavuzu
Kapsayıcılarınızın güvenliğini sağlamaya yardımcı olması için Kapsayıcılar için Defender'ı etkinleştirebilirsiniz. Kapsayıcılar için Defender küme yapılandırmalarını değerlendirebilir ve güvenlik önerileri sağlayabilir, güvenlik açığı taramaları çalıştırabilir ve Kubernetes düğümleri ve kümeleri için gerçek zamanlı koruma ve uyarı sağlayabilir.
API sunucusuna ve küme düğümlerine güvenli erişim
En iyi yöntem 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 denetlemek için Kubernetes RBAC'yi Microsoft Entra Id ile tümleştirin. Bu denetimlerle AKS'nin güvenliğini, Azure aboneliklerinize erişimi güvenli hale getirmekle aynı şekilde sağlarsınız.
Kubernetes API sunucusu, isteklerin bir küme içinde eylem gerçekleştirmesi 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 için benzersiz olmasa da, AKS kümenizi çok kiracılı kullanım için mantıksal olarak yalıttığınızda özellikle önemlidir.
Microsoft Entra ID, AKS kümeleriyle tümleşen kurumsal kullanıma hazır bir kimlik yönetimi çözümü sağlar. Kubernetes bir kimlik yönetimi çözümü sağlamadığından, API sunucusuna erişimi ayrıntılı olarak kısıtlamak için zorlanabilirsiniz. AKS'deki Microsoft Entra 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.
Kubernetes RBAC ve Microsoft Entra ID tümleştirmesini kullanarak API sunucusunun güvenliğini sağlayabilir ve tek bir ad alanı gibi kapsamlı bir kaynak kümesi için gereken en düşük izinleri sağlayabilirsiniz. Farklı Microsoft Entra kullanıcılarına veya gruplarına farklı Kubernetes rolleri vekleyebilirsiniz. Ayrıntılı izinlerle API sunucusuna erişimi kısıtlayabilir ve gerçekleştirilen eylemlerin net bir denetim kaydını sağlayabilirsiniz.
Ö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 Microsoft Entra Id grup üyeliği kullanın. Kullanıcının grup üyeliği değiştikçe AKS kümesindeki erişim izinleri de buna göre değişir.
Bu arada, tek tek kullanıcıyı doğrudan bir role bağladığınız ve iş işlevinde değişiklik yaptığınız varsayalım. Microsoft Entra grup üyelikleri güncelleştirilse de AKS kümesindeki izinleri güncelleştirilmedi. Bu senaryoda, kullanıcı ihtiyaç duyduklarından daha fazla izinle sonuçlanır.
Microsoft Entra 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.
Örnek Meta Veri API'sine erişimi kısıtlama
En iyi yöntem kılavuzu
Meta veri uç noktasına pod çıkışını engellemek için tüm kullanıcı ad alanlarına bir ağ ilkesi ekleyin.
Not
Ağ İlkesi'ni uygulamak için AKS kümesini oluştururken özniteliğini --network-policy azure
ekleyin. Kümeyi oluşturmak için aşağıdaki komutu kullanın: az aks create -g myResourceGroup -n myManagedCluster --network-plugin azure --network-policy azure --generate-ssh-keys
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-instance-metadata
spec:
podSelector:
matchLabels: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 10.10.0.0/0#example
except:
- 169.254.169.254/32
Kaynaklara kapsayıcı erişiminin güvenliğini sağlama
En iyi yöntem 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şim veya ayrıcalıklı yükseltme kullanımından kaçının.
Kullanıcılara veya gruplara gereken en düşük ayrıcalıkları vermeniz gerektiği gibi, kapsayıcıları yalnızca gerekli eylem ve işlemlerle de sınırlamanız gerekir. Saldırı riskini en aza indirmek için, yükseltilmiş ayrıcalıklar veya kök erişim gerektiren uygulamaları ve kapsayıcıları yapılandırmaktan kaçının.
Örneğin, pod bildiriminde ayarlayın allowPrivilegeEscalation: false
. Bu yerleşik Kubernetes pod güvenlik bağlamları , farklı çalıştırılacak kullanıcı veya grup ya da kullanıma sunmanız gereken Linux özellikleri gibi ek izinler tanımlamanıza olanak tanır. Daha fazla en iyi yöntem için bkz . Kaynaklara pod erişiminin güvenliğini sağlama.
Kapsayıcı eylemlerinin daha ayrıntılı denetimi için AppArmor ve seccomp gibi yerleşik Linux güvenlik özelliklerini de kullanabilirsiniz.
- Linux güvenlik özelliklerini düğüm düzeyinde tanımlayın.
- Pod bildirimi aracılığıyla özellikleri uygulama.
Yerleşik Linux güvenlik özellikleri yalnızca Linux düğümlerinde ve podlarda kullanılabilir.
Not
Şu anda Kubernetes ortamları, çok kiracılı düşman kullanımı için tamamen güvenli değildir. Kapsayıcılar için Microsoft Defender AppArmor, seccomp, Pod Security Admission veya düğümler için Kubernetes RBAC gibi ek güvenlik özellikleri, açıklardan yararlanmaları verimli bir şekilde engeller.
Çok kiracılı saldırgan iş yüklerini çalıştırırken gerçek güvenlik için yalnızca bir hiper yöneticiye güvenin. Kubernetes için güvenlik etki alanı tek bir düğüm değil tüm kümeye dönüşür.
Bu tür saldırgan çok kiracılı iş yükleri için fiziksel olarak yalıtılmış kümeleri kullanmanız gerekir.
Uygulama Koruması
Kapsayıcı eylemlerini sınırlamak 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 veya dosya sistemlerini bağlama gibi sistem işlevlerini kısıtlayan AppArmor profilleri oluşturursunuz. Varsayılan AppArmor profilleri, çeşitli /proc
ve /sys
konumlara erişimi kısıtlar ve kapsayıcıları temel düğümden mantıksal olarak yalıtmak için bir araç sağlar. AppArmor yalnızca Kubernetes podları için değil Linux üzerinde çalışan tüm uygulamalar için çalışır.
AppArmor'un nasıl çalıştığını görmek için aşağıdaki örnekte dosyalara yazılmayı engelleyen bir profil oluşturulur.
deny-write.profile adlı bir dosya oluşturun.
Aşağıdaki içeriği kopyalayıp 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.
Profili AppArmor'a ekleyin.
Önceki adımda oluşturulan profilin adını belirtin:
sudo apparmor_parser deny-write.profile
Profil doğru şekilde ayrıştırılır ve AppArmor'a uygulanırsa, herhangi bir çıkış görmezsiniz ve komut istemine geri dönersiniz.
Yerel makinenizden aks-apparmor.yaml adlı bir pod bildirimi oluşturun. Bu bildirim:
- için
container.apparmor.security.beta.kubernetes
bir ek açıklama tanımlar. - Önceki adımlarda oluşturulan deny-write 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/dotnet/runtime-deps:6.0 command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]
- için
Pod dağıtıldığında aşağıdaki komutu çalıştırın ve hello-apparmor podunun Çalışıyor durumunu gösterdiğini doğrulayın:
kubectl get pods NAME READY STATUS RESTARTS AGE aks-ssh 1/1 Running 0 4m2s hello-apparmor 0/1 Running 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 (secure comping) 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 desteklenir. Seccomp ile kapsayıcı işlemi çağrılarını sınırlayabilirsiniz. Kapsayıcıya yalnızca çalıştırması için en az izin vermenin en iyi uygulamasına hizalayın:
- ile tanımlama, hangi eylemlerin izin verilip reddedilirse filtrelenir.
- Bir pod YAML bildiriminde, seccomp filtresiyle ilişkilendirmek için ek açıklama ekleme.
Seccomp'ın çalıştığını görmek için, dosya üzerindeki izinlerin değiştirilmesini engelleyen bir filtre oluşturun.
/var/lib/kubelet/seccomp/prevent-chmod adlı bir seccomp filtresi oluşturun.
Aşağıdaki içeriği kopyalayıp 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 aşağıdakileri yapılandırmanız gerekir:
{ "defaultAction": "SCMP_ACT_ALLOW", "syscalls": [ { "names": ["chmod","fchmodat","chmodat"], "action": "SCMP_ACT_ERRNO" } ] }
Yerel makinenizden aks-seccomp.yaml adlı bir pod bildirimi oluşturun ve aşağıdaki içeriği yapıştırın. Bu bildirim:
- için
seccomp.security.alpha.kubernetes.io
bir ek açıklama 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/dotnet/runtime-deps:6.0 command: - "chmod" args: - "777" - /etc/hostname restartPolicy: Never
Sürüm 1.19 ve sonraki 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/dotnet/runtime-deps:6.0 command: - "chmod" args: - "777" - /etc/hostname restartPolicy: Never
- için
kubectl apply komutunu kullanarak örnek podu dağıtın:
kubectl apply -f ./aks-seccomp.yaml
kubectl get pods komutunu kullanarak pod durumunu görüntüleyin.
- Pod bir hata bildirir.
- Aşağıdaki
chmod
örnek çıktıda gösterildiği gibi komutun seccomp filtresi tarafından çalıştırılması 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.
Kubernetes'in en son sürümüne düzenli olarak güncelleştirme
En iyi yöntem kılavuzu
Yeni özelliklerden ve hata düzeltmelerinden haberdar olmak için AKS kümenizdeki Kubernetes sürümünü düzenli olarak yükseltin.
Kubernetes, yeni özellikleri geleneksel altyapı platformlarından daha hızlı bir şekilde yayınlar. Kubernetes güncelleştirmeleri şunlardır:
- Yeni özellikler
- Hata veya güvenlik düzeltmeleri
Yeni özellikler genellikle kararlı hale gelmeden önce alfa ve beta durumunda hareket eder. Kararlı olduktan sonra, genel olarak kullanılabilir ve üretim kullanımı için önerilir. Kubernetes yeni özellik yayın döngüsü, kubernetes'i düzenli olarak hataya neden olan değişikliklerle karşılaşmadan veya dağıtımlarınızı ve şablonlarınızı ayarlamadan güncelleştirmenizi sağlar.
AKS, Kubernetes'in üç alt sürümünü destekler. Yeni bir ikincil yama sürümü kullanıma sunulduğunda, desteklenen en eski ikincil sürüm ve düzeltme eki sürümleri kullanımdan kaldırılır. Küçük Kubernetes güncelleştirmeleri düzenli aralıklarla gerçekleşir. Destek kapsamında kalmak için gerekli yükseltmeleri denetleyebilmek için bir idare sürecine sahip olduğunuzdan emin olun. Daha fazla bilgi için bkz . Desteklenen Kubernetes sürümleri AKS.
Kümenizde kullanılabilen sürümleri denetlemek 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 --output table
Ardından az aks upgrade komutunu kullanarak AKS kümenizi yükseltebilirsiniz . Yükseltme işlemi güvenli bir şekilde:
- Kablolar ve bir kerede bir düğüm boşaltılır.
- 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ükünüzün iyi durumda kaldığını doğrulayın.
Kubernetes, iş yüklerinizin güvendiği API'leri (sürüm 1.16 gibi) kullanımdan kaldırabilir. Yeni sürümleri üretime getirirken, ayrı sürümlerde birden çok düğüm havuzu kullanmayı ve tek tek havuzları tek tek yükselterek güncelleştirmeyi bir kümede aşamalı olarak dağıtmayı göz önünde bulundurun. Birden çok küme çalıştırıyorsanız, etkiyi veya değişiklikleri aşamalı olarak izlemek için bir kerede bir kümeyi yükseltin.
az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version KUBERNETES_VERSION
AKS'deki 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'deki Linux düğümleri her akşam dağıtım güncelleştirme kanalı aracılığıyla güvenlik yamaları alır. Bu davranış, düğümler AKS kümesinde dağıtıldığından 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 gerekiyorsa düğümler otomatik olarak yeniden başlatılmaz. Düğüm yeniden başlatma işlemlerini işleme hakkında daha fazla bilgi için bkz . AKS'de 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 alır, ancak tüm denetimler ve yeniden başlatmalar tamamlanana kadar eşleşmeyen kalır. 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ükseltmeyi kullanabilirsiniz. Düğüm görüntüsü yükseltme hakkında daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) düğüm görüntüsü yükseltme.
Windows Server düğüm güncelleştirmelerini işleme
Windows Server düğümleri için, podları güvenli bir şekilde bağlayı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.
Azure Kubernetes Service