Komponen kritis-validation-hook merupakan komponen utama untuk memverifikasi tanda tangan gambar kontainer selama penerapan kontainer tepercaya. Komponen ini memverifikasi tanda tangan gambar kontainer sebelum penerapan guna memastikan hanya gambar yang ditandatangani oleh otoritas tepercaya yang diterapkan di kluster, sehingga mengurangi risiko menjalankan kode tak terduga atau berbahaya di lingkungan Anda. Topik ini menjelaskan cara kerja komponen kritis-validation-hook melalui contoh.
Prasyarat
Anda telah membuat Kluster ACK yang dikelola atau Cluster khusus ACK. Untuk informasi lebih lanjut, lihat Buat Kluster ACK yang dikelola atau Buat Cluster khusus ACK (Tidak lagi tersedia untuk pembuatan).
Informasi latar belakang
Komponen kritis-validation-hook dibangun di atas perangkat lunak open-source kritis dengan integrasi mendalam bersama Alibaba Cloud Container Registry (ACR). Komponen ini mendukung verifikasi gambar kontainer yang ditandatangani oleh Alibaba Cloud Key Management Service (KMS). Melalui kolaborasi erat dengan Security Center, KMS, dan ACR, komponen kritis-validation-hook menerapkan penandatanganan dan verifikasi gambar kontainer yang sepenuhnya otomatis, membantu Anda membangun lingkungan runtime kluster yang lebih aman. Untuk informasi lebih lanjut tentang cara memverifikasi tanda tangan gambar kontainer secara otomatis, lihat Gunakan komponen kritis-validation-hook untuk memverifikasi tanda tangan gambar kontainer secara otomatis.
Konfigurasikan izin akses sumber daya
Untuk memastikan operasi normal komponen kritis-validation-hook, pastikan Peran RAM yang digunakan oleh kluster memiliki izin akses sumber daya berikut:
Jika Anda menggunakan Kluster ACK yang dikelola, pastikan Peran RAM Worker yang digunakan oleh kluster memiliki izin akses sumber daya berikut.
Jika Anda menggunakan Cluster khusus ACK, pastikan baik Peran RAM Master maupun Peran RAM Worker yang digunakan oleh kluster memiliki izin akses sumber daya berikut.
"cr:ListInstance",
"cr:ListMetadataOccurrences"Jika Peran RAM yang digunakan oleh kluster Anda tidak memiliki izin akses tersebut, tambahkan izin akses sumber daya yang diperlukan dengan metode berikut.
Buat kebijakan kustom dengan konten berikut. Untuk informasi lebih lanjut, lihat Langkah 1: Buat kebijakan kustom.
{ "Statement": [ { "Action": [ "cr:ListInstance", "cr:ListMetadataOccurrences" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" }Berikan izin kepada Peran RAM Worker kluster. Untuk informasi lebih lanjut, lihat Langkah 2: Berikan izin kepada Peran RAM Worker kluster.
CatatanUntuk Cluster khusus ACK, Anda juga perlu memberikan izin tersebut kepada Peran RAM Master kluster.
Contoh mengaktifkan verifikasi tanda tangan gambar
Contoh berikut menunjukkan fungsionalitas komponen kritis-validation-hook dengan mengaktifkan verifikasi tanda tangan gambar untuk namespace default saat ini. Informasi penandatanganan gambar untuk contoh ini adalah sebagai berikut. Anda dapat menggantinya dengan informasi tanda tangan gambar aktual sesuai petunjuk pada kolom Langkah Pengambilan:
Informasi Penandatanganan | Nilai Contoh | Langkah Pengambilan | Field YAML Terkait |
Kunci publik KMS (base64) |
|
| |
key-id KMS |
|
| |
Nama saksi | demo-aa |
| |
Gambar yang ditandatangani |
| Tidak berlaku | Tidak berlaku |
Karena penandatanganan gambar tidak termasuk dalam cakupan komponen kritis-validation-hook, contoh ini melewatkan langkah-langkah penandatanganan. Untuk langkah-langkah penandatanganan gambar yang detail, lihat Tandatangani gambar kontainer.
Konfigurasikan AttestationAuthority untuk mendeklarasikan otoritas tepercaya.
Buat file 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 informasi otoritas tepercaya.
kubectl apply -f AttestationAuthority.yaml
Konfigurasikan GenericAttestationPolicy untuk mendeklarasikan kebijakan verifikasi tanda tangan dan menggunakan informasi otoritas tepercaya untuk memverifikasi tanda tangan.
Buat file 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 tanda tangan.
kubectl apply -f GenericAttestationPolicy.yaml
Uji fungsionalitas verifikasi tanda tangan gambar dengan menerapkan gambar yang belum ditandatangani oleh otoritas tepercaya.
Jalankan perintah berikut untuk menguji fungsionalitas verifikasi tanda tangan gambar.
kubectl create deployment test-denied --image=anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6Output yang diharapkan:
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:****Dari keluaran yang diharapkan, Anda dapat melihat bahwa fungsionalitas verifikasi tanda tangan gambar menolak penerapan gambar yang belum ditandatangani oleh otoritas tepercaya.
Uji fungsionalitas verifikasi tanda tangan gambar dengan menerapkan gambar yang telah ditandatangani oleh otoritas tepercaya.
Jalankan perintah berikut untuk menguji fungsionalitas verifikasi tanda tangan gambar.
Ganti alamat gambar berikut dengan gambar yang benar-benar telah ditandatangani.
kubectl create deployment test-allow --image=kritis-demo***.cn-hangzhou.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45Output yang diharapkan:
deployment.apps/test-allow createdDari keluaran yang diharapkan, Anda dapat melihat bahwa fungsionalitas verifikasi tanda tangan gambar mengizinkan penerapan gambar yang telah ditandatangani oleh otoritas tepercaya.
Konfigurasikan daftar putih verifikasi tanda tangan gambar
Dalam skenario middleware atau service mesh, komponen kritis-validation-hook mendukung konfigurasi daftar putih verifikasi tanda tangan gambar untuk mengatasi masalah di mana gambar kontainer Sidecar yang disuntikkan secara otomatis oleh komponen pihak ketiga tidak dapat lolos verifikasi tanda tangan gambar, sehingga menyebabkan pod tidak dapat diterapkan. Komponen ini tidak memverifikasi tanda tangan untuk gambar dalam daftar putih, tetapi hanya memverifikasi gambar yang tidak ada dalam daftar putih.
Anda dapat mengonfigurasi daftar putih verifikasi tanda tangan gambar dengan mendefinisikan sumber daya admissionallowlists.kritis.grafeas.io. Contoh definisi sumber daya adalah sebagai berikut:
apiVersion: kritis.grafeas.io/v1beta1 # Nilai default, tidak perlu dimodifikasi.
kind: AdmissionAllowlist # Nilai default, tidak perlu dimodifikasi.
metadata:
name: kritis-allowlist # Nama sumber daya, unik dalam kluster.
spec:
patterns: # Konfigurasi daftar putih, beberapa entri daftar putih dapat didefinisikan.
- namePattern: 'registry*.*.aliyuncs.com/acs/*' # Nama gambar yang diabaikan, lihat format spesifik di bawah.
- namePattern: 'registry-vpc.cn-beijing.aliyuncs.com/arms-docker-repo/*'
namespace: 'default' # [Opsional], namespace tempat konfigurasi daftar putih berlaku. Jika tidak dikonfigurasi, berlaku untuk semua namespace.Untuk menambahkan gambar sistem ACK ke daftar putih, Anda dapat mengonfigurasinya melalui langkah-langkah berikut.
Buat file
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/*'Nilai konfigurasi namePattern mendukung pencocokan eksak dan pencocokan wildcard sederhana menggunakan karakter tanda bintang (*). Penjelasan spesifiknya sebagai berikut:
Jika nilai konfigurasi tidak mengandung karakter tanda bintang (*), maka akan melakukan pencocokan eksak berdasarkan nilai yang dikonfigurasi. Misalnya,
nginx:v0.1.0hanya akan cocok dengannginx:v0.1.0.Saat menggunakan karakter tanda bintang (*) untuk pencocokan wildcard, batasan berikut berlaku:
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.0, tetapi tidak cocok dengana.com/nginx/test:v0.1.0.Jika tanda bintang (*) tidak berada di akhir, maka akan mencocokkan huruf, angka, tanda hubung (-), dan 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.
Entri daftar putih umum adalah sebagai berikut. Anda dapat menambahkannya sesuai kebutuhan aktual Anda.
# Gambar yang digunakan oleh Container Service ACK - namePattern: 'registry*.*.aliyuncs.com/acs/*' - namePattern: 'registry-*.ack.aliyuncs.com/acs/*' # Gambar yang digunakan oleh Container Service ACK (terbatas pada wilayah Tiongkok) - namePattern: 'registry*.cn-*.aliyuncs.com/acs/*' - namePattern: 'registry-cn-*.ack.aliyuncs.com/acs/*' # Gambar yang digunakan oleh ARMS - namePattern: 'registry*.*.aliyuncs.com/arms-docker-repo/*' # Gambar yang digunakan oleh ARMS (terbatas pada wilayah Tiongkok) - namePattern: 'registry*.cn-*.aliyuncs.com/arms-docker-repo/*'Jalankan perintah berikut untuk mengonfigurasi daftar putih.
kubectl apply -f kritis-admission-allowlist-acs.yamlOutput yang diharapkan:
admissionallowlist.kritis.grafeas.io/allow-acs-images createdJalankan perintah berikut untuk memverifikasi bahwa konfigurasi daftar putih berhasil.
kubectl get admissionallowlists.kritis.grafeas.ioOutput yang diharapkan:
NAME AGE allow-acs-images 2m22s