Azure Kubernetes Service (AKS) kümelerinizin güvenliğini Azure İlkesi
Azure İlkesi kullanarak Azure Kubernetes Service (AKS) kümelerinizde yerleşik güvenlik ilkeleri uygulayabilir ve uygulayabilirsiniz. Azure İlkesi, kuruluş standartlarını zorunlu kılmaya ve uygun ölçekte uyumluluğu değerlendirmeye yardımcı olur. AKS için Azure İlkesi eklentisini yükledikten sonra, kümenize tek tek ilke tanımları veya girişimler (bazen ilke kümeleri olarak adlandırılır) adlı ilke tanımları grupları uygulayabilirsiniz. AKS ilkesi ve girişim tanımlarının tam listesi için bkz. AKS için yerleşik Azure İlkesi tanımları.
Bu makalede, kümenize ilke tanımlarının nasıl uygulanacağı ve bu atamaların zorunlu kılındığını nasıl doğruladığınız gösterilir.
Önkoşullar
- Bu makalede, mevcut bir AKS kümeniz olduğu varsayılır. AKS kümesine ihtiyacınız varsa Azure CLI, Azure PowerShell veya Azure portalını kullanarak bir küme oluşturabilirsiniz.
- AKS kümenizde AKS için Azure İlkesi eklentisinin yüklü olması gerekir.
Yerleşik ilke tanımı veya girişimi atama
Aşağıdaki adımları kullanarak Azure portalında bir ilke tanımı veya girişim uygulayabilirsiniz:
- Azure portalında İlke adlı Azure İlkesi hizmetine gidin.
- Azure İlkesi sayfasının sol bölmesinde Tanımlar'ı seçin.
- Kategoriler'in altında öğesini seçin
Kubernetes
. - Uygulamak istediğiniz ilke tanımını veya girişimi seçin. Bu örnekte Linux tabanlı iş yükleri için Kubernetes kümesi pod güvenlik temeli standartlarını seçin.
- Ata'yı seçin.
- Kapsam'ı, Azure İlkesi eklentisi etkinleştirilmiş olarak AKS kümesinin kaynak grubuna ayarlayın.
- Parametreler sayfasını seçin ve temel girişimi ihlal eden yeni dağıtımları engellemek için
deny
Etki'yiaudit
olarak güncelleştirin. Değerlendirmenin dışında tutmak için ek ad alanları da ekleyebilirsiniz. Bu örnek için varsayılan değerleri koruyun. - İlke atamasını göndermek için Gözden Geçir ve Oluştur'u> seçin.
Özel ilke tanımı oluşturma ve atama
Özel ilkeler, Azure'ı kullanmak için kurallar tanımlamanıza olanak sağlar. Örneğin, aşağıdaki kural türlerini zorunlu kılabilir:
- Güvenlik uygulamaları
- Maliyet yönetimi
- Kuruluşa özgü kurallar (adlandırma veya konumlar gibi)
Özel ilke oluşturmadan önce, yaygın desenler ve örnekler listesini denetleerek servis talebinizin zaten ele alınıp alınmadığını denetleyin.
Özel ilke tanımları JSON dilinde yazılır. Özel ilke oluşturma hakkında daha fazla bilgi edinmek için bkz. Azure İlkesi tanım yapısı ve Özel ilke tanımı oluşturma.
Not
Azure İlkesi artık kısıtlama şablonu için kaynak türünü tanımlamanıza olanak tanıyan templateInfo olarak bilinen yeni bir özellik kullanıyor. İlke tanımlarında templateInfo tanımlarken constraintTemplate veya constraint özelliklerini tanımlamanız gerekmez. Yine de apiGroup'ları ve türlerini tanımlamanız gerekir. Bu konuda daha fazla bilgi için bkz. Azure İlkesi etkilerini anlama.
Özel ilke tanımınızı oluşturduktan sonra, kubernetes kümenize ilke atama adım adım izlenecek yol için bkz . İlke tanımı atama.
Bir Azure İlkesi çalıştığını doğrulama
Aşağıdaki
kubectl get
komutu kullanarak ilke atamalarının kümenize uygulandığını onaylayın.kubectl get constrainttemplates
Not
İlke atamalarının her kümeye eşitlenmesi 20 dakika kadar sürebilir.
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
NAME AGE k8sazureallowedcapabilities 23m k8sazureallowedusersgroups 23m k8sazureblockhostnamespace 23m k8sazurecontainerallowedimages 23m k8sazurecontainerallowedports 23m k8sazurecontainerlimits 23m k8sazurecontainernoprivilege 23m k8sazurecontainernoprivilegeescalation 23m k8sazureenforceapparmor 23m k8sazurehostfilesystem 23m k8sazurehostnetworkingports 23m k8sazurereadonlyrootfilesystem 23m k8sazureserviceallowedports 23m
Ayrıcalıklı podun reddedilmesini doğrulama
İlk olarak, güvenlik bağlamı privileged: true
ile bir pod zamanladığınızda ne olacağını test edelim. Bu güvenlik bağlamı pod'un ayrıcalıklarını yükseltir. Girişim ayrıcalıklı podlara izin vermediği için istek reddedilir ve bu da dağıtımın reddedilmesine neden olur.
adlı
nginx-privileged.yaml
bir dosya oluşturun ve aşağıdaki YAML bildirimine yapıştırın.apiVersion: v1 kind: Pod metadata: name: nginx-privileged spec: containers: - name: nginx-privileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine securityContext: privileged: true
komutunu kullanarak pod oluşturun
kubectl apply
ve YAML bildiriminizin adını belirtin.kubectl apply -f nginx-privileged.yaml
Beklendiği gibi, aşağıdaki örnek çıktıda gösterildiği gibi pod zamanlanamaz:
Error from server ([denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}): error when creating "privileged.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}
Pod zamanlama aşamasına ulaşmaz, bu nedenle devam etmeden önce silinecek kaynak yoktur.
Ayrıcalıksız pod oluşturmayı test edin
Önceki örnekte, kapsayıcı görüntüsü NGINX'i 80 numaralı bağlantı noktasına bağlamak için otomatik olarak kök kullanmayı denedi. İlke girişimi bu isteği reddeder, bu nedenle pod başlatılamaz. Şimdi aynı NGINX pod'unuzu ayrıcalıklı erişim olmadan çalıştırmayı deneyelim.
adlı
nginx-unprivileged.yaml
bir dosya oluşturun ve aşağıdaki YAML bildirimine yapıştırın.apiVersion: v1 kind: Pod metadata: name: nginx-unprivileged spec: containers: - name: nginx-unprivileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
komutunu kullanarak pod oluşturun
kubectl apply
ve YAML bildiriminizin adını belirtin.kubectl apply -f nginx-unprivileged.yaml
komutunu kullanarak
kubectl get pods
podun durumunu denetleyin.kubectl get pods
Çıktınız, podun başarıyla zamanlandığını ve Çalışıyor durumuna sahip olduğunu gösteren aşağıdaki örnek çıkışa benzer olmalıdır:
NAME READY STATUS RESTARTS AGE nginx-unprivileged 1/1 Running 0 18s
Bu örnekte yalnızca koleksiyondaki ilkeleri ihlal eden dağıtımları etkileyen temel girişim gösterilmektedir. İzin verilen dağıtımlar çalışmaya devam eder.
komutunu kullanarak NGINX ayrıcalıksız podunu
kubectl delete
silin ve YAML bildiriminizin adını belirtin.kubectl delete -f nginx-unprivileged.yaml
İlkeyi veya girişimi devre dışı bırakma
Aşağıdaki adımları kullanarak Azure portalında temel girişimi kaldırabilirsiniz:
- Azure portalında İlke bölmesine gidin.
- Atamalar'ı seçin.
- Linux tabanlı iş yükü girişimi için Kubernetes kümesi pod güvenlik temeli standartlarının yanındaki ... düğmesini seçin.
- Ödevi sil'i seçin.
Sonraki adımlar
Azure İlkesi nasıl çalıştığı hakkında daha fazla bilgi için aşağıdaki makalelere bakın:
Azure Kubernetes Service