全部产品
Search
文档中心

Container Service for Kubernetes:Verifikasi tanda tangan gambar kontainer menggunakan kritis-validation-hook

更新时间:Nov 11, 2025

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:

Penting
  • 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.

  1. 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"
    }
  2. Berikan izin kepada Peran RAM Worker kluster. Untuk informasi lebih lanjut, lihat Langkah 2: Berikan izin kepada Peran RAM Worker kluster.

    Catatan

    Untuk 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)

LS0tLS1CRUdJTiBQ***

Buat kunci asimetris

spec.publicKeyData

key-id KMS

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

Buat kunci

spec.publicKeyId

Nama saksi

demo-aa

Mengonfigurasi saksi dan kebijakan verifikasi tanda tangan

spec.noteReference

namespaces/demo-aa menunjukkan bahwa konfigurasi saksi bernama demo-aa dirujuk.

Gambar yang ditandatangani

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

Tidak berlaku

Tidak berlaku

Catatan

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.

  1. Konfigurasikan AttestationAuthority untuk mendeklarasikan otoritas tepercaya.

    1. 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-****
    2. Jalankan perintah berikut untuk mengonfigurasi informasi otoritas tepercaya.

      kubectl apply -f AttestationAuthority.yaml
  2. Konfigurasikan GenericAttestationPolicy untuk mendeklarasikan kebijakan verifikasi tanda tangan dan menggunakan informasi otoritas tepercaya untuk memverifikasi tanda tangan.

    1. Buat file GenericAttestationPolicy.yaml dengan konten berikut.

      apiVersion: kritis.grafeas.io/v1beta1
      kind: GenericAttestationPolicy
      metadata:
        name: demo-gap
      spec:
        attestationAuthorityNames:
        - demo-aa
    2. Jalankan perintah berikut untuk mengonfigurasi kebijakan verifikasi tanda tangan.

      kubectl apply -f GenericAttestationPolicy.yaml
  3. 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.6

    Output 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.

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

    Output yang diharapkan:

    deployment.apps/test-allow created

    Dari 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.

  1. Buat file kritis-admission-allowlist-acs.yaml dengan 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.0 hanya akan cocok dengan nginx: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 dengan a.com/nginx:v0.1.0, tetapi tidak cocok dengan a.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.2 cocok dengan registry-vpc.cn-hangzhou.aliyuncs.com/acs/pause:3.2 dan registry-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/*'
  2. Jalankan perintah berikut untuk mengonfigurasi daftar putih.

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

    Output yang diharapkan:

    admissionallowlist.kritis.grafeas.io/allow-acs-images created
  3. Jalankan perintah berikut untuk memverifikasi bahwa konfigurasi daftar putih berhasil.

    kubectl get admissionallowlists.kritis.grafeas.io

    Output yang diharapkan:

    NAME               AGE
    allow-acs-images   2m22s