Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Configure kritis-validation-hook to verify container image signatures

Son Güncelleme:Oct 06, 2026

Container Service for Kubernetes (ACK) kümesinde imzasız konteyner görüntülerinin kabul aşamasında engellenmesi için kritis-validation-hook'u yapılandırın ve test edin. Bu sayede yalnızca güvenilir bir otorite tarafından imzalanmış görüntülere izin verilir ve beklenmeyen veya kötü amaçlı kod riski azaltılır.

Ön Koşullar

Arka Plan

kritis-validation-hook, açık kaynaklı kritis yazılımı üzerine kuruludur; Container Registry (ACR) ile derin entegrasyon sağlar ve Key Management Service (KMS) kullanılarak imzalanan konteyner görüntülerinin doğrulanmasını destekler. Security Center, KMS ve ACR ile iş birliği sayesinde görüntü imzalama ve doğrulama süreçlerini tamamen otomatikleştirerek daha güvenli bir küme çalışma zamanı ortamı sunar.

Bkz. kritis-validation-hook ile konteyner görüntüsü imzalarını doğrulama.

Kaynak erişim izinlerini yapılandırma

Küme tarafından kullanılan RAM rolünün aşağıdaki izinlere sahip olduğundan emin olun:

"cr:ListInstance",
"cr:ListMetadataOccurrences"
Önemli

ACK yönetilen kümeleri için bu izinleri Worker RAM rolüne atayın. ACK özel kümeleri için ise Master RAM rolüne ve Worker RAM rolüne atayın.

Eksik izinleri aşağıdaki şekilde ekleyin.

  1. Aşağıdaki içeriğe sahip özel bir ilke oluşturun:

    {
        "Statement": [
            {
                "Action": [
                    "cr:ListInstance",
                    "cr:ListMetadataOccurrences"
                ],
                "Effect": "Allow",
                "Resource": "*"
            }
        ],
        "Version": "1"
    }
  2. İlkeyi kümenin Worker RAM rolüne atayın.

    ACK özel kümeleri için ilkeyi Master RAM rolüne de atayın.

Görüntü imzası doğrulamayı etkinleştirme

Bu örnekte default ad alanı için görüntü imzası doğrulama yapılandırılmaktadır. Görüntü imzalama işlemi kritis-validation-hook kapsamı dışındadır; bu örnek, görüntülerin zaten imzalandığı varsayımına dayanır. İmzalama adımları için bkz. konteyner görüntüsü imzalama kullanımı.

Örnek aşağıdaki imzalama bilgilerini kullanır. Örnek değerleri gerçek değerlerle değiştirin.


İmzalama bilgisi


Örnek değer


Nasıl alınır


YAML alanı


KMS genel anahtarı (Base64)


LS0tLS1CRUdJTiBQ***


Asimetrik anahtar oluşturma


spec.publicKeyData


KMS anahtar ID'si


key-4a2ef103-5aa3-4220-****


Anahtar oluşturma


spec.publicKeyId


Tanık adı


demo-aa


Tanık ve imza doğrulama ilkesi yapılandırma


spec.noteReference — namespaces/demo-aa üzerinden demo-aa tanığını referans alır


İmzalı görüntü


kritis-demo***.cn-hangzhou.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45


—


—

Güvenilir otoriteyi bildirme

Aşağıdaki içeriğe sahip AttestationAuthority.yaml dosyasını oluşturun:

apiVersion: kritis.grafeas.io/v1beta1
kind: AttestationAuthority
metadata:
  name: demo-aa
spec:
  noteReference: namespaces/demo-aa
  publicKeyData: LS0tLS1CRUdJTiBQ***
  publicKeyId: key-4a2ef103-5aa3-4220-****

Kaynağı uygulayın.

kubectl apply -f AttestationAuthority.yaml

İmza doğrulama ilkesi oluşturma

Aşağıdaki içeriğe sahip GenericAttestationPolicy.yaml dosyasını oluşturun. İlke, önceki adımdaki AttestationAuthority kaynağını referans alır.

apiVersion: kritis.grafeas.io/v1beta1
kind: GenericAttestationPolicy
metadata:
  name: demo-gap
spec:
  attestationAuthorityNames:
  - demo-aa

Kaynağı uygulayın.

kubectl apply -f GenericAttestationPolicy.yaml

İmzasız bir görüntü ile test etme

İmzasız bir görüntü dağıtın.

kubectl create deployment test-denied --image=anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

Beklenen çıktı:

error: failed to create deployment: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: "ACROpenAPIError detail: <image anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 is not attested because of get resource url for anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6: ListInstance failed, instanceName: "anolis", regionId: "cn-zhangjiakou", requstURL:error:****

Görüntü, demo-aa tarafından geçerli bir onaya sahip olmadığı için kabul web kancası dağıtımı reddeder.

İmzalı bir görüntü ile test etme

İmzalı bir görüntü dağıtın. Görüntü adresini gerçek imzalı görüntü adresi ile değiştirin.

kubectl create deployment test-allow --image=kritis-demo***.cn-hangzhou.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45

Beklenen çıktı:

deployment.apps/test-allow created

Görüntü, güvenilir otorite demo-aa tarafından onaylandığı için dağıtım başarılı olur.

Görüntü imzası doğrulama izin listesini yapılandırma

Varsayılan olarak kritis-validation-hook, uygulama kapsamındaki her konteyner görüntüsünü doğrular. Ara katman veya hizmet ağı ortamlarında, üçüncü taraf eklentiler tarafından enjekte edilen sidecar'lar imzasız olabilir ve bu durum pod oluşturmanın başarısız olmasına neden olabilir. Belirli görüntüler için imza doğrulamayı atlamak üzere bir izin listesi yapılandırın.

Doğrulama bypass eden görüntüleri belirtmek için bir admissionallowlists.kritis.grafeas.io kaynağı tanımlayın.

apiVersion: kritis.grafeas.io/v1beta1   # Default value. Do not modify.
kind: AdmissionAllowlist                # Default value. Do not modify.
metadata:
  name: kritis-allowlist                # Must be unique within the cluster.
spec:
  patterns:                             # Define one or more allowlist entries.
  - namePattern: 'registry*.*.aliyuncs.com/acs/*'
  - namePattern: 'registry-vpc.cn-beijing.aliyuncs.com/arms-docker-repo/*'
    namespace: 'default'    # Optional. If omitted, the entry applies to all namespaces.

namePattern eşleşme kuralları

Her namePattern değeri, kayıt defteri ana bilgisayarı, depo yolu ve etiket veya özet dahil olmak üzere tam görüntü referansıyla eşleşir. Aşağıdaki eşleşme kuralları uygulanır:


Kural


Açıklama


Örnek


Tam eşleşme


* içermeyen bir değer yalnızca o kesin dizeyle eşleşir.


nginx:v0.1.0 yalnızca nginx:v0.1.0 ile eşleşir


Sonunda *


/ dışındaki herhangi bir karakterle eşleşir.


a.com/nginx* a.com/nginx:v0.1.0 ile eşleşir ancak a.com/nginx/test:v0.1.0 ile eşleşmez


Dizede orta kısımda *


Harfler, rakamlar, kısa çizgi (-) ve alt çizgi (_) ile eşleşir.


registry-vpc.cn-*.aliyuncs.com/acs/pause:3.2 hem registry-vpc.cn-hangzhou.aliyuncs.com/acs/pause:3.2 hem de registry-vpc.cn-beijing.aliyuncs.com/acs/pause:3.2 ile eşleşir

ACK sistem görüntülerini izin listesine ekleme

  1. Aşağıdaki içeriğe sahip kritis-admission-allowlist-acs.yaml dosyasını oluşturun:

    apiVersion: kritis.grafeas.io/v1beta1
    kind: AdmissionAllowlist
    metadata:
      name: allow-acs-images
    spec:
      patterns:
      - namePattern: 'registry*.*.aliyuncs.com/acs/*'
      - namePattern: 'registry-*.ack.aliyuncs.com/acs/*'

    Yaygın izin listesi desenleri:

    # Images used by ACK
    - namePattern: 'registry*.*.aliyuncs.com/acs/*'
    - namePattern: 'registry-*.ack.aliyuncs.com/acs/*'
    
    # Images used by ACK (China regions only)
    - namePattern: 'registry*.cn-*.aliyuncs.com/acs/*'
    - namePattern: 'registry-cn-*.ack.aliyuncs.com/acs/*'
    
    # Images used by ARMS
    - namePattern: 'registry*.*.aliyuncs.com/arms-docker-repo/*'
    
    # Images used by ARMS (China regions only)
    - namePattern: 'registry*.cn-*.aliyuncs.com/arms-docker-repo/*'
  2. İzin listesini uygulayın.

    kubectl apply -f kritis-admission-allowlist-acs.yaml

    Beklenen çıktı:

    admissionallowlist.kritis.grafeas.io/allow-acs-images created
  3. İzin listesini doğrulayın:

    kubectl get admissionallowlists.kritis.grafeas.io

    Beklenen çıktı:

    NAME               AGE
    allow-acs-images   2m22s

İlgili belgeler