Otomatik olarak imzalanan sertifika kullanarak Notation ve Azure Key Vault ile kapsayıcı görüntülerini imzalama
Kapsayıcı görüntülerini imzalamak, özgünlüklerini ve bütünlüğünü sağlayan bir işlemdir. Bu, kapsayıcı görüntüsüne dağıtım sırasında doğrulanabilen bir dijital imza ekleyerek elde edilir. İmza, görüntünün güvenilir bir yayımcıdan geldiğini ve değiştirilmediğini doğrulamaya yardımcı olur. Noter Projesi tarafından geliştirilen bir açık kaynak tedarik zinciri aracı olan noter, kapsayıcı görüntülerini ve diğer yapıtları imzalamayı ve doğrulamayı destekler. Azure Key Vault (AKV), Notation AKV eklentisi (azure-kv) ile Notation tarafından kapsayıcı görüntülerini ve diğer yapıtları imzalamak ve doğrulamak için kullanılabilen imzalama anahtarları içeren sertifikaları depolamak için kullanılır. Azure Container Registry (ACR), kapsayıcı görüntülerine ve diğer yapıtlara imza eklemenin yanı sıra bu imzaları görüntülemenizi sağlar.
Bu öğreticide:
- Notation CLI ve AKV eklentisini yükleme
- AKV'de otomatik olarak imzalanan sertifika oluşturma
- ACR Görevleri ile kapsayıcı görüntüsü oluşturma ve gönderme
- Notation CLI ve AKV eklentisiyle kapsayıcı görüntüsü imzalama
- Notation CLI ile bir kapsayıcı görüntüsünü imzaya göre doğrulama
Önkoşullar
- Kapsayıcı görüntülerini ve imzalarını depolamak için Azure Container Registry oluşturma veya kullanma
- Sertifikaları yönetmek için Azure Key Vault oluşturma veya kullanma
- Azure Cloud Shell'de en son Azure CLI'yı veya Çalıştırma komutlarını yükleme ve yapılandırma
Notation CLI ve AKV eklentisini yükleme
Bir Linux amd64 ortamına Notation v1.1.0 yükleyin. Diğer ortamlara yönelik paketi indirmek için Notation yükleme kılavuzunu izleyin.
# 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
Bir Linux amd64 ortamına v1.1.0 Gösterimi Azure Key Vault eklentisini
azure-kv
yükleyin.Not
Notation Azure Key Vault eklentisinin URL ve SHA256 sağlama toplamı eklentinin yayın sayfasında bulunabilir.
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
Kullanılabilir eklentileri listeleyin ve sürüme
1.1.0
sahip eklentininazure-kv
listeye eklendiğini onaylayın.notation plugin ls
Ortam değişkenlerini yapılandırma
Not
Öğreticideki komutların kolayca yürütülmesi için Azure kaynaklarına mevcut ACR ve AKV kaynaklarıyla eşleşecek değerler sağlayın.
AKV kaynak adlarını yapılandırın.
# 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
ACR ve görüntü kaynak adlarını yapılandırın.
# 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
Azure CLI'de oturum açma
az login
Azure CLI ve bu cli ile oturum açma hakkında daha fazla bilgi edinmek için bkz . Azure CLI ile oturum açma.
AKV'de erişim ilkesi atama (Azure CLI)
Otomatik olarak imzalanan bir sertifika oluşturmak ve yapıtları imzalamak için doğru erişim ilkesi izinlerine sahip bir kullanıcı sorumlusu gereklidir. Bu sorumlu bir kullanıcı sorumlusu, hizmet sorumlusu veya yönetilen kimlik olabilir. En azından bu sorumlu aşağıdaki izinlere ihtiyaç duyar:
Create
sertifika izinleriGet
sertifika izinleriSign
anahtar izinleri
Bu öğreticide, erişim ilkesi oturum açmış bir Azure kullanıcısına atanır. İlkeyi sorumluya atama hakkında daha fazla bilgi edinmek için bkz . Erişim İlkesi Atama.
AKV kaynağını içeren aboneliği ayarlama
az account set --subscription <your_subscription_id>
AKV'de erişim ilkesini ayarlama
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
Önemli
Bu örnekte, sertifika oluşturmak ve kapsayıcı görüntüsünü imzalamak için gereken en düşük izinler gösterilir. Gereksinimlerinize bağlı olarak, ek izinler vermeniz gerekebilir.
AKV'de otomatik olarak imzalanan sertifika oluşturma (Azure CLI)
Aşağıdaki adımlarda, test amacıyla otomatik olarak imzalanan bir sertifikanın nasıl oluşturulacağı gösterilmektedir.
Bir sertifika ilkesi dosyası oluşturun.
Sertifika ilkesi dosyası aşağıdaki gibi yürütüldükten sonra, AKV'de Noter Projesi sertifika gereksinimiyle uyumlu geçerli bir sertifika oluşturur. için
ekus
değeri kod imzalamaya yöneliktir, ancak yapıtları imzalamak için gösterimi gerekmez. Konu daha sonra kullanıcının doğrulama sırasında güvendiği güven kimliği olarak kullanılır.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
Sertifikayı oluşturun.
az keyvault certificate create -n $CERT_NAME --vault-name $AKV_NAME -p @my_policy.json
Notation CLI ve AKV eklentisiyle kapsayıcı görüntüsü imzalama
Bireysel Azure kimliğinizi kullanarak ACR'nizde kimlik doğrulaması.
az acr login --name $ACR_NAME
Önemli
Sisteminizde Docker yüklüyse ve ACR'nizde kimlik doğrulaması yapmak için veya kullandıysanız az acr login
docker login
, kimlik bilgileriniz zaten depolanmış ve gösterimi için kullanılabilir durumdadır. Bu durumda, ACR'nizde kimlik doğrulaması yapmak için yeniden çalıştırmanız notation login
gerekmez. Gösterimin kimlik doğrulama seçenekleri hakkında daha fazla bilgi edinmek için bkz . OCI uyumlu kayıt defterleriyle kimlik doğrulaması.
ACR Görevleri ile yeni bir görüntü oluşturun ve gönderin. Etiketler değişebilir ve üzerine yazılabilir olduğundan, imzalama için görüntüyü tanımlamak için her zaman özet değerini kullanın.
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
Bu öğreticide, görüntü önceden oluşturulmuşsa ve kayıt defterinde depolanmışsa, etiket kolaylık sağlamak amacıyla bu görüntünün tanımlayıcısı olarak görev alır.
IMAGE=$REGISTRY/${REPO}:$TAG
İmzalama anahtarının Anahtar Kimliğini alın. AKV'deki bir sertifikanın birden çok sürümü olabilir, aşağıdaki komut en son sürümün Anahtar Kimliğini alır.
KEY_ID=$(az keyvault certificate show -n $CERT_NAME --vault-name $AKV_NAME --query 'kid' -o tsv)
İmzalama anahtarı kimliğini kullanarak kapsayıcı görüntüsünü COSE imza biçimiyle imzalayın. Otomatik olarak imzalanan bir sertifikayla imzalamak için eklenti yapılandırma değerini
self_signed=true
ayarlamanız gerekir.notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true $IMAGE
AKV ile kimlik doğrulaması yapmak için varsayılan olarak, etkinleştirildiyse aşağıdaki kimlik bilgisi türleri sırayla denenecektir:
- Ortam kimlik bilgileri
- İş yükü kimliği kimlik bilgileri
- Yönetilen kimlik kimlik bilgileri
- Azure CLI kimlik bilgileri
Bir kimlik bilgisi türü belirtmek istiyorsanız adlı
credential_type
ek bir eklenti yapılandırması kullanın. Örneğin, aşağıda gösterildiği gibi Azure CLI kimlik bilgilerini kullanmak için olarak açıkça ayarlayabilirsinizcredential_type
azurecli
:notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true --plugin-config credential_type=azurecli $IMAGE
Çeşitli kimlik bilgileri türlerinin değerleri
credential_type
için aşağıdaki tabloya bakın.Kimlik bilgisi türü için değer credential_type
Ortam kimlik bilgileri environment
İş yükü kimliği kimlik bilgileri workloadid
Yönetilen kimlik kimlik bilgileri managedid
Azure CLI kimlik bilgileri azurecli
İmzalı görüntülerin ve ilişkili imzaların grafiğini görüntüleyin.
notation ls $IMAGE
Notation CLI ile kapsayıcı görüntüsünü doğrulama
Kapsayıcı görüntüsünü doğrulamak için, yaprak sertifikayı imzalayan kök sertifikayı güven deposuna ekleyin ve doğrulama için güven ilkeleri oluşturun. Bu öğreticide kullanılan otomatik olarak imzalanan sertifika için kök sertifika, otomatik olarak imzalanan sertifikanın kendisidir.
Genel sertifikayı indirin.
az keyvault certificate download --name $CERT_NAME --vault-name $AKV_NAME --file $CERT_PATH
İmza doğrulaması için indirilen genel sertifikayı adlandırılmış güven deposuna ekleyin.
STORE_TYPE="ca" STORE_NAME="wabbit-networks.io" notation cert add --type $STORE_TYPE --store $STORE_NAME $CERT_PATH
Onaylayacak sertifikayı listeleyin.
notation cert ls
Doğrulamadan önce güven ilkesini yapılandırın.
Güven ilkeleri, kullanıcıların hassas doğrulama ilkeleri belirtmesine olanak sağlar. Aşağıdaki örnek, içindeki
$REGISTRY/$REPO
tüm yapıtlar için geçerli olan ve türünde$STORE_TYPE
adlandırılmış güven depounu$STORE_NAME
kullanan adlıwabbit-networks-images
bir güven ilkesi yapılandırılır. Ayrıca kullanıcının X.509 konusuyla$CERT_SUBJECT
belirli bir kimliğe güvendiğini varsayar. Diğer ayrıntılar için bkz . Güven deposu ve güven ilkesi belirtimi.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
Daha önce oluşturduğumuz bir JSON dosyasından güven ilkesi yapılandırmasını içeri aktarmak için kullanın
notation policy
.notation policy import ./trustpolicy.json notation policy show
Derleme zamanından bu yana kapsayıcı görüntüsünün değiştirilmediğini doğrulamak için kullanın
notation verify
.notation verify $IMAGE
Güven ilkesi kullanılarak görüntünün başarıyla doğrulanması üzerine, doğrulanmış görüntünün sha256 özeti başarılı bir çıkış iletisinde döndürülür.
Sonraki adımlar
İmzalı görüntüleri AKS'de dağıtmadan önce Azure Kubernetes Service (AKS) kümelerinize dağıtmadan önce doğrulamak için Görüntü Bütünlüğünü Kullanma (Önizleme) ve Azure'da Onaylama konularına bakın.