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
Bir ACK yönetilen kümesi veya ACK özel kümesi (Kullanımdan Kaldırıldı) sahibsiniz.
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"
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.
-
Aşağıdaki içeriğe sahip özel bir ilke oluşturun:
{ "Statement": [ { "Action": [ "cr:ListInstance", "cr:ListMetadataOccurrences" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" } -
İ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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ACK sistem görüntülerini izin listesine ekleme
-
Aşağıdaki içeriğe sahip
kritis-admission-allowlist-acs.yamldosyası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/*' -
İzin listesini uygulayın.
kubectl apply -f kritis-admission-allowlist-acs.yamlBeklenen çıktı:
admissionallowlist.kritis.grafeas.io/allow-acs-images created -
İzin listesini doğrulayın:
kubectl get admissionallowlists.kritis.grafeas.ioBeklenen çıktı:
NAME AGE allow-acs-images 2m22s