Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure Kubernetes Service (AKS) kümesinde en iyi yöntemleri uygulamak için Dağıtım Korumaları'nın nasıl kullanılacağı gösterilmektedir.
Genel Bakış
Uyarı
Aks Otomatik'te Dağıtım Korumaları varsayılan olarak açıktır.
Geliştirme yaşam döngüsü boyunca, Kubernetes kaynaklarınızın ilk dağıtımı yanlış yapılandırmalar içeriyorsa hatalar, sorunlar ve diğer sorunların ortaya çıkması yaygın bir durumdur. Azure Kubernetes Service (AKS), Kubernetes geliştirme yükünü hafifletmek için Dağıtım Korumaları sunar. Dağıtım Korumaları, Azure İlkesi denetimleri aracılığıyla AKS kümenizde Kubernetes'in en iyi yöntemlerini uygular.
Dağıtım Korumaları iki yapılandırma düzeyi sunar:
-
Warn: Uyumlu olmayan küme yapılandırmaları konusunda sizi uyarmak için kod terminalinde uyarı iletileri görüntüler, ancak yine de isteğin geçmesine izin verir. -
Enforce: Uygun yapılandırmaları zorlar, eğer en iyi uygulamaları izlemezlerse dağıtımları reddeder ve değiştirir.
'Uyar' veya 'Uygula' için Dağıtım Korumalarını yapılandırdıktan sonra Dağıtım Korumaları, kubernetes kaynaklarınızı oluşturma veya güncelleştirme zamanında uyumluluk açısından program aracılığıyla değerlendirir. Dağıtım Korumaları ayrıca Azure portalında veya CLI veya terminalinizde Azure İlkesi'nin uyumluluk panosu aracılığıyla iş yükleriniz genelinde toplu uyumluluk bilgilerini kaynak düzeyinde görüntüler. Uyumlu olmayan bir iş yükü çalıştırmak, kümenizin en iyi yöntemleri izlemediğini ve kümenizdeki iş yüklerinin küme yapılandırmanızdan kaynaklanan sorunlarla karşılaşma riski altında olduğunu gösterir.
Önkoşullar
Uyarı
Küme yöneticilerinin Dağıtım Korumalarını etkinleştirmek veya devre dışı bırakmak için Azure İlkesi izinlerine ihtiyacı yoktur. Ancak Azure İlkesi eklentisinin yüklü olması gerekir.
- AKS için Azure İlkesi eklentisini etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. AKS kümenizde Azure İlkesi'ni etkinleştirme. Bu, kaynak sağlayıcısını aboneliğinize kaydetmeyi
Microsoft.PolicyInsightsiçerir.
Dağıtım Koruma ilkeleri
Aşağıdaki tabloda, Etkin duruma gelen ilkeler ve Dağıtım Korumalarını etkinleştirdiğinizde hedefledikleri Kubernetes kaynakları listelenir. Şu anda kullanılabilir olan Dağıtım Korumalarını Azure portalında Bir Azure İlkesi tanımı olarak veya Azure Kubernetes Service için Azure İlkesi yerleşik tanımlarında görüntüleyebilirsiniz. Bu koleksiyonun amacı, çoğu kullanıcı ve kullanım örneği için geçerli olan en iyi yöntemlerin ortak ve genel bir listesini oluşturmaktır.
| Dağıtım koruma ilkesi | Varsa mutasyon sonucu |
|---|---|
| Tek Tek Düğümler Düzenlenemiyor | Mevcut Değil |
| Kubernetes küme kapsayıcıları CPU ve bellek kaynak sınırları belirtilen sınırları aşmamalıdır | Ayarlanmamışsa CPU kaynak sınırlarını 500m olarak ayarlar ve herhangi bir yol yoksa bellek sınırlarını 500Mi olarak ayarlar. |
| Benzeşim Önleme Kuralları veya topolojisiSpreadConstraintsSet olmalıdır | Mevcut Değil |
| AKS'ye Özgü Etiket Yok | Mevcut Değil |
| Kubernetes küme kapsayıcıları yalnızca izin verilen görüntüleri kullanmalıdır | Mevcut Değil |
| Ayrılmış Sistem Havuzu Renk Tonları | Ayarlanmadıysa, bir kullanıcı düğümü havuzundan kirlenmeyi kaldırır. AKS, CriticalAddonsOnly taint'ini kullanarak müşteri podlarını sistem havuzundan uzak tutar. Bu yapılandırma, AKS bileşenleri ve müşteri podları arasında net bir ayrım sağlar ve CriticalAddonsOnly lekesini tolere etmeyen müşteri podlarının çıkarılmasını önler. |
| Küme kapsayıcılarının hazır olma veya canlılık yoklamalarının yapılandırıldığından emin olun | Mevcut Değil |
| Kubernetes kümeleri Kapsayıcı Depolama Arabirimi (CSI) sürücüsü StorageClass kullanmalıdır | Mevcut Değil |
| Kubernetes küme hizmetleri benzersiz seçiciler kullanmalıdır | Mevcut Değil |
| Kubernetes kümesi kapsayıcı görüntüleri en son görüntü etiketini içermemelidir | Mevcut Değil |
Dağıtım Korumaları için bir fikir veya istek göndermek istiyorsanız AKS GitHub deposunda bir sorun açın ve başlığın başına ekleyin [Deployment Safeguards request] .
Dağıtım Güvenlik Önlemlerinde Pod Güvenlik Standartları
Uyarı
Temel Pod Güvenlik Standartları artık AKS Otomatik'te varsayılan olarak açıktır. AKS Otomatik'teki temel Pod Güvenlik Standartları kapatılamaz.
Ayrıca Dağıtım Korumaları, Temel, Kısıtlı ve Ayrıcalıklı Pod Güvenlik Standartlarının etkinleştirilmesini de destekler. İş yüklerinizin başarıyla dağıtılmasını sağlamak için her bildirimin Temel veya Kısıtlı Pod Güvenliği gereksinimlerine uygun olduğundan emin olun. Azure Kubernetes Service varsayılan olarak Privileged Pod Güvenlik Standartlarını kullanır.
| Policy | Hata mesajı | Düzelt |
|---|---|---|
| AppArmor |
AppArmor annotation values must be undefined/nil, runtime/default, or localhost/* veya AppArmor profile type must be one of: undefined/nil, RuntimeDefault, or Localhost |
AppArmor ayarlarını kaldırın. Kubernetes varsayılan olarak uygulama ayarlarını uygular. Desteklenen hostlarda, RuntimeDefault AppArmor profili varsayılan olarak uygulanır. |
| Konak Ad Alanları |
Host network namespaces are disallowed: spec.hostNetwork is set to true' veya 'Host PID namespaces are disallowed: spec.hostPID is set to true' veya 'Host IPC namespaces are disallowed: spec.hostIPC is set to true' |
Bu değerleri false olarak ayarlayın veya alanları belirterek kaldırın. |
| Ayrıcalıklı Kapsayıcılar | 'Privileged [ephemeral\|init\|N/A] containers are disallowed: spec.containers[*].securityContext.privileged is set to true' |
Uygun securityContext.privileged alanını false olarak ayarlayın veya alanı kaldırın. |
| Capabilities | İleti şu şekilde başlar: 'Disallowed capabilities detected |
Kapsayıcının bildiriminden belirtilen özelliği kaldırın. |
| HostPath hacimleri | HostPath volumes are forbidden under restricted security policy unless containers mounting them are from allowed images |
HostPath birimini ve birim bağlama noktasını kaldırın. |
| Konak Bağlantı Noktaları | HostPort'lar temel güvenlik politikası kapsamında yasaktır | Etkilenen kapsayıcıdan host bağlantı noktası tanımlamasını kaldırın. |
| SELinux | SELinux type must be one of: undefined/empty, container_t, container_init_t, container_kvm_t, or container_engine_t |
Kapsayıcının securityContext.seLinuxOptions.type alanını izin verilen değerlerden birine ayarlayın. |
| /proc Bağlama Türü | ProcMount, spec.containers[*].securityContext.procMount içinde undefined/nil veya 'Default' olmalıdır | "* spec.containers[*].securityContext.procMount" değerini 'Varsayılan' olarak ayarlayın veya tanımsız olmasını sağlayın. |
| Seccomp | Seccomp profile must not be explicitly set to Unconfined. Allowed values are: undefined/nil, RuntimeDefault, or Localhost |
Pod veya kapsayıcılarda securityContext.seccompProfile.type'u izin verilen değerlerden birine ayarlayın. |
| Sysctls | Disallowed sysctl detected. Only baseline Kubernetes pod security standard sysctls are permitted |
İzin verilmeyen systctls'leri kaldırın (belirli bir liste için işletim sistemi belirtimlerine bakın). |
| Birim Türleri (Sadece PSS'ye Özel Kısıtlamalı) | Only the following volume types are allowed under restricted policy: configMap, csi, downwardAPI, emptyDir, ephemeral, persistentVolumeClaim, projected, secret |
İzin verilen türlerden biri olmayan birimleri kaldırın. |
| Ayrıcalık Yükseltme (Sadece PSS Kısıtlı) | Privilege escalation must be set to false under restricted policy |
* spec.containers[*].securityContext.allowPrivilegeEscalation'' açıkça her kapsayıcı, initContainer ve ephemeralContainer için false olarak ayarlanmalıdır. |
| Root Olmadan Çalıştırma (sadece PSS Kısıtlanmış) | Containers must not run as root user in spec.containers[*].securityContext.runAsNonRoot |
spec.containers[*].securityContext.runAsNonRoot açıkça her kapsayıcı, initContainer ve ephemeralContainer için false olarak ayarlanmalıdır. |
| Kök Olmayan Kullanıcı Olarak Çalıştır (Yalnızca PSS Kısıtlamalı) | 'Containers must not run as root user: spec.securityContext.runAsUser is set to 0' |
securityContext.runAsUser değerini sıfır olmayan bir değere ayarlayın veya pod düzeyi ve her kapsayıcı, initContainer ve ephemeralContainer için tanımsız bırakın. |
| Seccomp (Yalnızca PSS Kısıtlanmış) | Seccomp profile must be "RuntimeDefault" or "Localhost" under restricted policy |
Pod veya kapsayıcılarda securityContext.seccompProfile.type'u izin verilen değerlerden birine ayarlayın. Bu, kısıtlanmış ilkenin tanımlanmamış bir değere izin vermemesi açısından temelden farklıdır. |
| Özellikler (Yalnızca PSS Kısıtlı) |
All containers must drop ALL capabilities under restricted policy veya Only NET_BIND_SERVICE may be added to capabilities under restricted policy |
Tüm kapsayıcıların "ALL" özelliklerini bırakması gerekir ve yalnızca "NET_BIND_SERVICE" eklemesine izin verilir. |
Dağıtım Korumalarını Etkinleştirme
Uyarı
Dağıtım Korumaları Enforce düzeyini kullanmak, engellenen ve kapatılan dağıtımları kabul ettiğiniz anlamına gelir. etkinleştirmeden Enforceönce bu ilkelerin AKS kümenizle nasıl çalışabileceğini düşünün.
Mevcut bir kümede Dağıtım Korumalarını etkinleştirme
bayrağıyla komutunu kullanarak Azure İlkesi eklentisinin etkinleştirildiği mevcut bir kümede az aks safeguard create Dağıtım Korumalarını --level etkinleştirin. Eğer uyumsuzluk uyarıları almak istiyorsanız, --level değerini Warn olarak ayarlayın. Uyumsuz tüm dağıtımları reddetmek veya değiştirmek istiyorsanız, şuna ayarlayın: Enforce.
az aks safeguards create --resource-group <resource-group-name> --name <cluster-name> --level Enforce
Ayrıca bayrağını --cluster kullanarak ve küme kaynak kimliğini belirterek Dağıtım Korumalarını etkinleştirebilirsiniz.
az aks safeguards create --cluster <ID> --level Enforce
Mevcut bir kümenin Dağıtım Korumaları düzeyini güncelleştirmek istiyorsanız, için --levelyeni değerle aşağıdaki komutu çalıştırın.
az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Warn
Ad alanlarını hariç tutma
Ayrıca bazı ad alanlarını Dağıtım Korumaları'nın dışında tutabilirsiniz. Bir ad alanını dışladığınızda, bu ad alanı içindeki etkinlik Dağıtım Koruma uyarılarından veya zorlamalarından etkilenmez.
Örneğin, ve ns1ad alanlarını ns2 dışlamak için, aşağıdaki örnekte gösterildiği gibi bayrağıyla --excluded-ns birlikte boşlukla ayrılmış bir ad alanı listesi kullanın:
az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Warn --excluded-ns ns1 ns2
Pod Güvenlik Standartlarını açma
Uyarı
Azure Kubernetes Service (AKS), pod güvenlik standartlarını varsayılan olarak kullanır Privileged . Varsayılan yapılandırmaya geri dönmek istiyorsanız bayrağını --pss-level olarak Privilegedayarlayın.
Dağıtım Korumalarında Pod Güvenlik Standartlarını etkinleştirmek için bayrağını --pss-level kullanarak şu düzeylerden birini seçin: Baseline, Restrictedveya Privileged.
az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Warn --pss-level <Baseline|Restricted|Privileged>
Dağıtım Koruması sürümünüzü güncelleştirme
Dağıtım Korumaları AKS eklenti sürüm oluşturma düzenine bağlıdır. Dağıtım Koruması'nın her yeni sürümü AKS'de yeni bir ikincil sürüm olarak yayınlanacaktır. Bu güncelleştirmeler AKS GitHub sürüm notları aracılığıyla iletilecek ve belgelerimizdeki "Dağıtım Koruma İlkeleri" tablosuna yansıtılacaktır.
AKS sürüm oluşturma ve eklentileri hakkında daha fazla bilgi edinmek için şu belgelere bakın: aks-component-versions ve aks-versioning-for-addons.
Kümeler arasında uyumluluğu doğrulama
Kubernetes bildiriminizi dağıttığınızda, aşağıdaki örneklerde gösterildiği gibi küme Dağıtım Korumaları ile uyumlu değilse CLI veya terminalinizde uyarılar veya olası bir reddetme iletisi görürsünüz:
Uyar
$ kubectl apply -f deployment.yaml
Warning: [azurepolicy-k8sazurev1antiaffinityrules-ceffa082711831ebffd1] Deployment with 2 replicas should have either podAntiAffinity or topologySpreadConstraints set to avoid disruptions due to nodes crashing
deployment.apps/simple-web created
Zorla
Deployment Safeguard mutasyonlarıyla, bu seviye Enforce uygunsa Kubernetes kaynaklarınızı değiştirir. Ancak Kubernetes kaynaklarınızın başarılı bir şekilde dağıtılması için tüm güvenlik önlemlerini geçirmesi gerekir. Herhangi bir koruma ilkesi başarısız olursa kaynağınız reddedilir ve dağıtılmaz.
$ kubectl apply -f deployment.yaml
Error from server (Forbidden): error when creating "deployment.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev1antiaffinityrules-ceffa082711831ebffd1] Deployment with 2 replicas should have either podAntiAffinity or topologySpreadConstraints set to avoid disruptions due to nodes crashing
Kubernetes kaynaklarınız geçerli mutasyon korumalarına uyuyorsa ve diğer tüm koruma gereksinimlerini karşılıyorsa, aşağıdaki örnekte gösterildiği gibi başarıyla dağıtılacaktır:
$ kubectl apply -f deployment.yaml
deployment.apps/simple-web created
Azure İlkesi panosunu kullanarak kümeler arasında uyumluluğu doğrulama
Dağıtım Korumalarının uygulandığını doğrulamak ve kümenizin uyumluluğunu denetlemek için kümenizin Azure portalı sayfasına gidin ve İlkeler'i seçin, ardından Azure İlkesi'ne git'i seçin.
İlkeler ve girişimler listesinden Dağıtım Korumaları ile ilişkili girişimi seçin. AKS kümeniz genelinde uyumluluk durumunu gösteren bir pano görürsünüz.
Uyarı
AKS kümeniz genelinde uyumluluğu düzgün bir şekilde değerlendirmek için Azure İlkesi girişiminin kapsamının kümenizin kaynak grubuna göre belirlenmiş olması gerekir.
Dağıtım Korumalarını Devre Dışı Bırakma
Kümenizde Dağıtım Korumalarını devre dışı bırakmak için komutunu kullanın delete .
az aks safeguards delete --resource-group <resource-group-name> --name <cluster-name>
FAQ
Kendi mutasyonlarımı oluşturabilir miyim?
Hayır. Koruma hakkında bir fikriniz varsa AKS GitHub deposunda bir sorun açın ve başlığın başına ekleyin [Deployment Safeguards request] .
Zorlama için hangi mutasyonları seçip seçemeyeceğimi belirleyebilir miyim?
Hayır. Dağıtım Korumaları tamamen veya hiçbir şey değildir. Uyar veya Uygula'yı etkinleştirdikten sonra tüm korumalar etkin olur.
Dağıtım kaynağım en iyi yöntemleri takip etmese bile neden kabul edilir?
Dağıtım Korumaları, Azure İlkesi denetimleri aracılığıyla en iyi yöntem standartlarını zorunlu kılar ve Kubernetes kaynaklarına karşı doğrulayan ilkelere sahiptir. Azure İlkesi, küme bileşenlerini değerlendirmek ve zorunlu kılmak için Gatekeeper'ı genişletir. Bekçi uygulaması şu anda bir fail-open modelde çalışmaktadır. Gatekeeper'ın ağ çağrımıza yanıt vereceğinin garantisi olmadığından, bu durumda reddetmenin dağıtımlarınızı engellememesi için doğrulamayı atlayacağımızdan emin olacağız.
Daha fazla bilgi edinmek için bkz. Ağ Geçidi Denetleyicisi'nde iş yükü doğrulama.
Sonraki Adımlar
- AKS kümesini çalıştırmaya yönelik en iyi yöntemler hakkında daha fazla bilgi edinin.
Azure Kubernetes Service