Menandatangani gambar kontainer dengan Notasi dan Azure Key Vault menggunakan sertifikat yang ditandatangani sendiri
Menandatangani gambar kontainer adalah proses yang memastikan keaslian dan integritasnya. Ini dicapai dengan menambahkan tanda tangan digital ke gambar kontainer, yang dapat divalidasi selama penyebaran. Tanda tangan membantu memverifikasi bahwa gambar berasal dari penerbit tepercaya dan belum dimodifikasi. Notasi adalah alat rantai pasokan sumber terbuka yang dikembangkan oleh Proyek Notaris, yang mendukung penandatanganan dan verifikasi gambar kontainer dan artefak lainnya. Azure Key Vault (AKV) digunakan untuk menyimpan sertifikat dengan kunci penandatanganan yang dapat digunakan oleh Notasi dengan plugin Notasi AKV (azure-kv) untuk menandatangani dan memverifikasi gambar kontainer dan artefak lainnya. Azure Container Registry (ACR) memungkinkan Anda melampirkan tanda tangan ke gambar kontainer dan artefak lainnya serta melihat tanda tangan tersebut.
Dalam tutorial ini:
- Instal CLI Notasi dan plugin AKV
- Membuat sertifikat yang ditandatangani sendiri di AKV
- Membangun dan mendorong gambar kontainer dengan Tugas ACR
- Menandatangani gambar kontainer dengan Notation CLI dan plugin AKV
- Memvalidasi gambar kontainer terhadap tanda tangan dengan Notasi CLI
Prasyarat
- Membuat atau menggunakan Azure Container Registry untuk menyimpan gambar dan tanda tangan kontainer
- Membuat atau menggunakan Azure Key Vault untuk mengelola sertifikat
- Menginstal dan mengonfigurasi Azure CLI terbaru, atau Menjalankan perintah di Azure Cloud Shell
Instal CLI Notasi dan plugin AKV
Instal Notasi v1.1.0 pada lingkungan Linux amd64. Ikuti panduan penginstalan Notasi untuk mengunduh paket untuk lingkungan lain.
# Download, extract and install curl -Lo notation.tar.gz https://github.com/notaryproject/notation/releases/download/v1.1.0/notation_1.1.0_linux_amd64.tar.gz tar xvzf notation.tar.gz # Copy the Notation binary to the desired bin directory in your $PATH, for example cp ./notation /usr/local/bin
Instal plugin
azure-kv
Notasi Azure Key Vault v1.1.0 pada lingkungan Linux amd64.Catatan
URL dan checksum SHA256 untuk plugin Notasi Azure Key Vault dapat ditemukan di halaman rilis plugin.
notation plugin install --url https://github.com/Azure/notation-azure-kv/releases/download/v1.1.0/notation-azure-kv_1.1.0_linux_amd64.tar.gz --sha256sum 2fc959bf850275246b044203609202329d015005574fabbf3e6393345e49b884
Cantumkan plugin yang tersedia dan konfirmasikan bahwa
azure-kv
plugin dengan versi1.1.0
disertakan dalam daftar.notation plugin ls
Mengonfigurasi variabel lingkungan
Catatan
Untuk memudahkan eksekusi perintah dalam tutorial, berikan nilai bagi sumber daya Azure agar sesuai dengan sumber daya ACR dan AKV yang ada.
Mengonfigurasi nama sumber daya AKV.
# Name of the existing AKV used to store the signing keys AKV_NAME=myakv # Name of the certificate created in AKV CERT_NAME=wabbit-networks-io CERT_SUBJECT="CN=wabbit-networks.io,O=Notation,L=Seattle,ST=WA,C=US" CERT_PATH=./${CERT_NAME}.pem
Mengonfigurasi ACR dan nama sumber daya gambar.
# Name of the existing registry example: myregistry.azurecr.io ACR_NAME=myregistry # Existing full domain of the ACR REGISTRY=$ACR_NAME.azurecr.io # Container name inside ACR where image will be stored REPO=net-monitor TAG=v1 IMAGE=$REGISTRY/${REPO}:$TAG # Source code directory containing Dockerfile to build IMAGE_SOURCE=https://github.com/wabbit-networks/net-monitor.git#main
Masuk dengan Azure CLI
az login
Untuk mempelajari selengkapnya tentang Azure CLI dan cara masuk dengannya, lihat Masuk dengan Azure CLI.
Menetapkan kebijakan akses di AKV (Azure CLI)
Prinsipal pengguna dengan izin kebijakan akses yang benar diperlukan untuk membuat sertifikat yang ditandatangani sendiri dan menandatangani artefak. Prinsipal ini dapat menjadi prinsipal pengguna, perwakilan layanan, atau identitas terkelola. Minimal, prinsip ini memerlukan izin berikut:
Create
izin untuk sertifikatGet
izin untuk sertifikatSign
izin untuk kunci
Dalam tutorial ini, kebijakan akses ditetapkan ke pengguna Azure yang masuk. Untuk mempelajari selengkapnya tentang menetapkan kebijakan ke prinsipal, lihat Menetapkan Kebijakan Akses.
Mengatur langganan yang berisi sumber daya AKV
az account set --subscription <your_subscription_id>
Mengatur kebijakan akses di AKV
USER_ID=$(az ad signed-in-user show --query id -o tsv)
az keyvault set-policy -n $AKV_NAME --certificate-permissions create get --key-permissions sign --object-id $USER_ID
Penting
Contoh ini menunjukkan izin minimum yang diperlukan untuk membuat sertifikat dan menandatangani gambar kontainer. Tergantung pada kebutuhan Anda, Anda mungkin perlu memberikan izin tambahan.
Membuat sertifikat yang ditandatangani sendiri di AKV (Azure CLI)
Langkah-langkah berikut menunjukkan cara membuat sertifikat yang ditandatangani sendiri untuk tujuan pengujian.
Buat file kebijakan sertifikat.
Setelah file kebijakan sertifikat dijalankan seperti di bawah ini, file tersebut membuat sertifikat yang valid yang kompatibel dengan persyaratan sertifikat Proyek Notaris di AKV. Nilai untuk adalah untuk
ekus
penandatanganan kode, tetapi tidak diperlukan untuk notasi untuk menandatangani artefak. Subjek digunakan nanti sebagai identitas kepercayaan yang dipercaya pengguna selama verifikasi.cat <<EOF > ./my_policy.json { "issuerParameters": { "certificateTransparency": null, "name": "Self" }, "keyProperties": { "exportable": false, "keySize": 2048, "keyType": "RSA", "reuseKey": true }, "secretProperties": { "contentType": "application/x-pem-file" }, "x509CertificateProperties": { "ekus": [ "1.3.6.1.5.5.7.3.3" ], "keyUsage": [ "digitalSignature" ], "subject": "$CERT_SUBJECT", "validityInMonths": 12 } } EOF
Buat sertifikat.
az keyvault certificate create -n $CERT_NAME --vault-name $AKV_NAME -p @my_policy.json
Menandatangani gambar kontainer dengan Notation CLI dan plugin AKV
Autentikasi ke ACR Anda dengan menggunakan identitas Azure individual Anda.
az acr login --name $ACR_NAME
Penting
Jika Anda telah menginstal Docker pada sistem Anda dan menggunakan az acr login
atau docker login
untuk mengautentikasi ke ACR Anda, kredensial Anda sudah disimpan dan tersedia untuk notasi. Dalam hal ini, Anda tidak perlu menjalankan notation login
lagi untuk mengautentikasi ke ACR Anda. Untuk mempelajari selengkapnya tentang opsi autentikasi untuk notasi, lihat Mengautentikasi dengan registri yang mematuhi OCI.
Buat dan dorong gambar baru dengan Tugas ACR. Selalu gunakan nilai hash untuk mengidentifikasi gambar untuk penandatanganan karena tag dapat diubah dan dapat ditimpa.
DIGEST=$(az acr build -r $ACR_NAME -t $REGISTRY/${REPO}:$TAG $IMAGE_SOURCE --no-logs --query "outputImages[0].digest" -o tsv) IMAGE=$REGISTRY/${REPO}@$DIGEST
Dalam tutorial ini, jika gambar telah dibuat dan disimpan dalam registri, tag berfungsi sebagai pengidentifikasi untuk gambar tersebut untuk kenyamanan.
IMAGE=$REGISTRY/${REPO}:$TAG
Dapatkan ID Kunci kunci penandatanganan. Sertifikat di AKV dapat memiliki beberapa versi, perintah berikut mendapatkan ID Kunci dari versi terbaru.
KEY_ID=$(az keyvault certificate show -n $CERT_NAME --vault-name $AKV_NAME --query 'kid' -o tsv)
Tanda tangani gambar kontainer dengan format tanda tangan COSE menggunakan ID kunci penandatanganan. Untuk menandatangani dengan sertifikat yang ditandatangani sendiri, Anda perlu mengatur nilai
self_signed=true
konfigurasi plugin .notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true $IMAGE
Untuk mengautentikasi dengan AKV, secara default, jenis kredensial berikut jika diaktifkan akan dicoba secara berurutan:
- Kredensial lingkungan
- Kredensial identitas beban kerja
- Kredensial identitas terkelola
- Info masuk Azure CLI
Jika Anda ingin menentukan jenis kredensial, gunakan konfigurasi plugin tambahan yang disebut
credential_type
. Misalnya, Anda dapat secara eksplisit mengaturcredential_type
keazurecli
untuk menggunakan kredensial Azure CLI, seperti yang ditunjukkan di bawah ini:notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true --plugin-config credential_type=azurecli $IMAGE
Lihat tabel di bawah ini untuk nilai
credential_type
untuk berbagai jenis kredensial.Jenis Informasi masuk Nilai untuk credential_type
Kredensial lingkungan environment
Kredensial identitas beban kerja workloadid
Kredensial identitas terkelola managedid
Info masuk Azure CLI azurecli
Lihat grafik gambar yang ditandatangani dan tanda tangan terkait.
notation ls $IMAGE
Memverifikasi gambar kontainer dengan Notation CLI
Untuk memverifikasi gambar kontainer, tambahkan sertifikat akar yang menandatangani sertifikat daun ke penyimpanan kepercayaan dan buat kebijakan kepercayaan untuk verifikasi. Untuk sertifikat yang ditandatangani sendiri yang digunakan dalam tutorial ini, sertifikat akar adalah sertifikat yang ditandatangani sendiri.
Unduh sertifikat publik.
az keyvault certificate download --name $CERT_NAME --vault-name $AKV_NAME --file $CERT_PATH
Tambahkan sertifikat publik yang diunduh ke penyimpanan kepercayaan bernama untuk verifikasi tanda tangan.
STORE_TYPE="ca" STORE_NAME="wabbit-networks.io" notation cert add --type $STORE_TYPE --store $STORE_NAME $CERT_PATH
Cantumkan sertifikat untuk dikonfirmasi.
notation cert ls
Konfigurasikan kebijakan kepercayaan sebelum verifikasi.
Kebijakan kepercayaan memungkinkan pengguna menentukan kebijakan verifikasi yang disempurnakan. Contoh berikut mengonfigurasi kebijakan kepercayaan bernama
wabbit-networks-images
, yang berlaku untuk semua artefak di$REGISTRY/$REPO
dan menggunakan penyimpanan kepercayaan$STORE_NAME
bernama jenis$STORE_TYPE
. Ini juga mengasumsikan bahwa pengguna mempercayai identitas tertentu dengan subjek$CERT_SUBJECT
X.509 . Untuk detail selengkapnya, lihat Spesifikasi kebijakan penyimpanan kepercayaan dan kepercayaan.cat <<EOF > ./trustpolicy.json { "version": "1.0", "trustPolicies": [ { "name": "wabbit-networks-images", "registryScopes": [ "$REGISTRY/$REPO" ], "signatureVerification": { "level" : "strict" }, "trustStores": [ "$STORE_TYPE:$STORE_NAME" ], "trustedIdentities": [ "x509.subject: $CERT_SUBJECT" ] } ] } EOF
Gunakan
notation policy
untuk mengimpor konfigurasi kebijakan kepercayaan dari file JSON yang kami buat sebelumnya.notation policy import ./trustpolicy.json notation policy show
Gunakan
notation verify
untuk memverifikasi gambar kontainer belum diubah sejak waktu build.notation verify $IMAGE
Setelah verifikasi gambar berhasil menggunakan kebijakan kepercayaan, hash sha256 dari gambar terverifikasi dikembalikan dalam pesan output yang berhasil.
Langkah berikutnya
Lihat Menggunakan Integritas Gambar untuk memvalidasi gambar yang ditandatangani sebelum menyebarkannya ke kluster Azure Kubernetes Service (AKS) (Pratinjau) dan Ratify di Azure untuk mulai memverifikasi dan mengaudit gambar yang ditandatangani sebelum menyebarkannya di AKS.