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

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:

  1. Azure portalında İlke adlı Azure İlkesi hizmetine gidin.
  2. Azure İlkesi sayfasının sol bölmesinde Tanımlar'ı seçin.
  3. Kategoriler'in altında öğesini seçinKubernetes.
  4. 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.
  5. Ata'yı seçin.
  6. Kapsam'ı, Azure İlkesi eklentisi etkinleştirilmiş olarak AKS kümesinin kaynak grubuna ayarlayın.
  7. Parametreler sayfasını seçin ve temel girişimi ihlal eden yeni dağıtımları engellemek için deny Etki'yi audit 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.
  8. İ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: trueile 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.

  1. 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
    
  2. 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.

  1. 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
    
  2. komutunu kullanarak pod oluşturun kubectl apply ve YAML bildiriminizin adını belirtin.

    kubectl apply -f nginx-unprivileged.yaml
    
  3. 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.

  4. 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:

  1. Azure portalında İlke bölmesine gidin.
  2. Atamalar'ı seçin.
  3. 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.
  4. Ö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: