Komponen kritis-validation-hook berperan penting dalam memverifikasi signature gambar kontainer selama penerapan kontainer tepercaya. Komponen ini memverifikasi signature gambar sebelum penerapan, memastikan hanya gambar yang ditandatangani oleh otoritas tepercaya yang diterapkan ke kluster Anda, sehingga mengurangi risiko menjalankan kode yang tidak diharapkan atau berbahaya. Topik ini menyediakan contoh cara kerja komponen kritis-validation-hook.
Prasyarat
Anda telah membuat Kluster ACK yang dikelola atau Cluster khusus ACK. Untuk informasi selengkapnya, lihat Create an ACK managed cluster atau Create an ACK dedicated cluster (Discontinued).
Informasi latar belakang
Komponen kritis-validation-hook dibangun di atas perangkat lunak open source kritis. Komponen ini terintegrasi secara mendalam dengan Container Registry (ACR) Alibaba Cloud dan mendukung verifikasi gambar kontainer yang ditandatangani menggunakan Key Management Service (KMS) Alibaba Cloud. Komponen ini bekerja erat dengan Security Center, KMS, dan ACR, sehingga menyediakan penandatanganan gambar dan verifikasi signature yang sepenuhnya otomatis guna membantu Anda membangun lingkungan runtime yang lebih aman untuk kluster Anda. Untuk informasi selengkapnya tentang verifikasi otomatis signature gambar kontainer, lihat Use the kritis-validation-hook component to automatically verify container image signatures.
Konfigurasikan izin akses resource
Agar komponen kritis-validation-hook berfungsi dengan baik, pastikan Peran RAM yang digunakan oleh kluster memiliki izin akses resource berikut:
Jika Anda menggunakan Kluster ACK yang dikelola, pastikan Peran RAM Worker-nya memiliki izin akses berikut.
Jika Anda menggunakan Cluster khusus ACK, pastikan Peran RAM Master dan Peran RAM Worker-nya memiliki izin akses berikut.
"cr:ListInstance",
"cr:ListMetadataOccurrences"Jika Peran RAM yang digunakan oleh kluster Anda tidak memiliki izin tersebut, tambahkan izin tersebut sebagai berikut.
Buat kebijakan kustom dengan konten berikut. Untuk informasi selengkapnya, lihat Step 1: Create a custom policy.
{ "Statement": [ { "Action": [ "cr:ListInstance", "cr:ListMetadataOccurrences" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" }Berikan izin kepada Peran RAM Worker kluster. Untuk informasi selengkapnya, lihat Step 2: Grant permissions to the Worker RAM role of the cluster.
CatatanUntuk Cluster khusus ACK, Anda juga harus memberikan izin ini kepada Peran RAM Master.
Contoh: Aktifkan verifikasi signature gambar
Contoh ini menunjukkan cara kerja komponen kritis-validation-hook dengan mengaktifkan verifikasi signature gambar untuk namespace default saat ini. Informasi penandatanganan gambar untuk contoh ini disediakan di bawah ini. Anda dapat mengganti nilai contoh dengan informasi penandatanganan gambar aktual Anda, merujuk pada tips di kolom How to obtain:
Signing information | Example value | How to obtain | Corresponding YAML field |
KMS public key (Base64) |
|
| |
KMS key ID |
|
| |
Witness name | demo-aa |
| |
Signed image |
| N/A | N/A |
Penandatanganan gambar berada di luar cakupan komponen kritis-validation-hook, sehingga contoh ini menghilangkan langkah-langkah penandatanganan. Untuk langkah-langkah detail tentang cara menandatangani gambar, lihat Use container image signing.
Konfigurasikan AttestationAuthority untuk mendeklarasikan otoritas tepercaya.
Buat file bernama AttestationAuthority.yaml dengan konten berikut.
apiVersion: kritis.grafeas.io/v1beta1 kind: AttestationAuthority metadata: name: demo-aa spec: noteReference: namespaces/demo-aa publicKeyData: LS0tLS1CRUdJTiBQ*** publicKeyId: key-4a2ef103-5aa3-4220-****Jalankan perintah berikut untuk mengonfigurasi otoritas tepercaya.
kubectl apply -f AttestationAuthority.yaml
Konfigurasikan GenericAttestationPolicy untuk mendeklarasikan kebijakan verifikasi signature dan menggunakan informasi otoritas tepercaya untuk memverifikasi signature.
Buat file bernama GenericAttestationPolicy.yaml dengan konten berikut.
apiVersion: kritis.grafeas.io/v1beta1 kind: GenericAttestationPolicy metadata: name: demo-gap spec: attestationAuthorityNames: - demo-aaJalankan perintah berikut untuk mengonfigurasi kebijakan verifikasi signature.
kubectl apply -f GenericAttestationPolicy.yaml
Uji fitur verifikasi signature gambar dengan menerapkan gambar yang tidak ditandatangani oleh otoritas tepercaya.
Jalankan perintah berikut untuk menguji fitur verifikasi signature gambar.
kubectl create deployment test-denied --image=anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6Expected output:
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:****Output tersebut menunjukkan bahwa fitur verifikasi signature gambar menolak penerapan gambar yang tidak ditandatangani oleh otoritas tepercaya.
Uji fitur verifikasi signature gambar dengan menerapkan gambar yang ditandatangani oleh otoritas tepercaya.
Jalankan perintah berikut untuk menguji fitur verifikasi signature gambar.
Ganti alamat gambar berikut dengan gambar bertanda tangan aktual Anda.
kubectl create deployment test-allow --image=kritis-demo***.cn-hangzhou.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45Expected output:
deployment.apps/test-allow createdOutput tersebut menunjukkan bahwa fitur verifikasi signature gambar mengizinkan penerapan gambar yang ditandatangani oleh otoritas tepercaya.
Konfigurasikan daftar putih verifikasi signature gambar
Komponen kritis-validation-hook mendukung konfigurasi daftar putih verifikasi signature gambar untuk skenario middleware atau service mesh. Hal ini mengatasi masalah gagalnya penerapan Pod karena gambar kontainer sidecar yang disuntikkan secara otomatis oleh komponen pihak ketiga tidak dapat lolos verifikasi signature. Komponen ini tidak memverifikasi signature gambar yang ada di daftar putih, melainkan hanya memverifikasi gambar yang tidak ada di daftar putih.
Anda dapat mengonfigurasi daftar putih verifikasi signature gambar dengan mendefinisikan resource admissionallowlists.kritis.grafeas.io. Contoh definisi resource disediakan di bawah ini:
apiVersion: kritis.grafeas.io/v1beta1 # Default value. Do not modify.
kind: AdmissionAllowlist # Default value. Do not modify.
metadata:
name: kritis-allowlist # Resource name, which must be unique within the cluster.
spec:
patterns: # Whitelist configuration. You can define multiple whitelists.
- namePattern: 'registry*.*.aliyuncs.com/acs/*' # The name of the image to ignore. For more information about the format, see the description below.
- namePattern: 'registry-vpc.cn-beijing.aliyuncs.com/arms-docker-repo/*'
namespace: 'default' # [Optional] The namespace to which the whitelist applies. If not specified, it applies to all namespaces.Untuk menambahkan gambar OS ACK ke daftar putih, lakukan langkah-langkah berikut.
Buat file bernama
kritis-admission-allowlist-acs.yamldengan konten berikut untuk mengonfigurasi daftar putih.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/*'Item konfigurasi namePattern mendukung pencocokan eksak dan pencocokan wildcard sederhana menggunakan karakter tanda bintang (*). Detailnya disediakan di bawah ini:
Jika nilainya tidak mengandung tanda bintang (*), maka dilakukan pencocokan eksak. Misalnya,
nginx:v0.1.0hanya cocok dengannginx:v0.1.0.Jika Anda menggunakan tanda bintang (*) untuk pencocokan wildcard, berlaku batasan berikut:
Jika tanda bintang (*) berada di akhir, maka akan mencocokkan karakter apa pun kecuali garis miring (/). Misalnya,
a.com/nginx*cocok dengana.com/nginx:v0.1.0tetapi tidak cocok dengana.com/nginx/test:v0.1.0.Jika tanda bintang (*) tidak berada di akhir, maka akan mencocokkan huruf, angka, tanda hubung (-), atau garis bawah (_). Misalnya,
registry-vpc.cn-*.aliyuncs.com/acs/pause:3.2cocok denganregistry-vpc.cn-hangzhou.aliyuncs.com/acs/pause:3.2danregistry-vpc.cn-beijing.aliyuncs.com/acs/pause:3.2.
Berikut adalah daftar putih umum. Anda dapat menambahkannya sesuai kebutuhan.
# 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/*'Jalankan perintah berikut untuk mengonfigurasi daftar putih.
kubectl apply -f kritis-admission-allowlist-acs.yamlExpected output:
admissionallowlist.kritis.grafeas.io/allow-acs-images createdJalankan perintah berikut untuk memverifikasi bahwa daftar putih telah dikonfigurasi.
kubectl get admissionallowlists.kritis.grafeas.ioExpected output:
NAME AGE allow-acs-images 2m22s