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 topluluğu tarafından geliştirilen ve Microsoft tarafından desteklenen, kapsayıcı görüntülerinin ve diğer yapıtların imzalanması ve doğrulanması için desteklenen bir açık kaynak tedarik zinciri güvenlik aracıdır. 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
- Zaman damgası oluşturma
Ö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.2.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.2.0/notation_1.2.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 Notation Azure Key Vault eklentisi
azure-kv
v1.2.0'ı 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.2.0/notation-azure-kv_1.2.0_linux_amd64.tar.gz --sha256sum 06bb5198af31ce11b08c4557ae4c2cbfb09878dfa6b637b7407ebc2d57b87b34
Kullanılabilir eklentileri listeleyin ve sürüme
1.2.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.
AKV_SUB_ID=myAkvSubscriptionId AKV_RG=myAkvResourceGroup # 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.
ACR_SUB_ID=myAcrSubscriptionId ACR_RG=myAcrResourceGroup # 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.
ACR ve AKV'ye güvenli erişim izinleri
ACR ve AKV ile çalışırken, güvenli ve denetimli erişim sağlamak için uygun izinleri vermek önemlidir. Belirli senaryolarınıza bağlı olarak kullanıcı sorumluları, hizmet sorumluları veya yönetilen kimlikler gibi farklı varlıklar için erişim yetkisi vekleyebilirsiniz. Bu öğreticide, erişim oturum açmış bir Azure kullanıcısına yetkilendirilmiştir.
ACR'ye erişimi yetkilendirme
AcrPull
ve AcrPush
rolleri, ACR'de kapsayıcı görüntülerini imzalamak için gereklidir.
ACR kaynağını içeren aboneliği ayarlama
az account set --subscription $ACR_SUB_ID
Rolleri atama
USER_ID=$(az ad signed-in-user show --query id -o tsv) az role assignment create --role "AcrPull" --role "AcrPush" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"
AKV'ye erişimi yetkilendirme
Bu bölümde, AKV'ye erişim yetkisi vermek için iki seçeneği inceleyeceğiz.
Azure RBAC kullanma (Önerilen)
Otomatik olarak imzalanan sertifikaları kullanarak imzalamak için aşağıdaki roller gereklidir:
Key Vault Certificates Officer
sertifika oluşturma ve okuma içinKey Vault Certificates User
var olan sertifikaları okumak içinKey Vault Crypto User
imzalama işlemleri için
Azure RBAC ile Key Vault erişimi hakkında daha fazla bilgi edinmek için bkz . Erişimi yönetmek için Azure RBAC kullanma.
AKV kaynağını içeren aboneliği ayarlama
az account set --subscription $AKV_SUB_ID
Rolleri atama
USER_ID=$(az ad signed-in-user show --query id -o tsv) az role assignment create --role "Key Vault Certificates Officer" --role "Key Vault Crypto User" --assignee $USER_ID --scope "/subscriptions/$AKV_SUB_ID/resourceGroups/$AKV_RG/providers/Microsoft.KeyVault/vaults/$AKV_NAME"
AKV'de erişim ilkesi atama (eski)
Kimlik için aşağıdaki izinler gereklidir:
Create
sertifika oluşturma izinleriGet
mevcut sertifikaları okuma izinleriSign
imzalama işlemleri için izinler
İlkeyi sorumluya atama hakkında daha fazla bilgi edinmek için bkz . Erişim İlkesi Atama.
AKV kaynağını içeren aboneliği ayarlayın:
az account set --subscription $AKV_SUB_ID
AKV'de erişim ilkesini ayarlayın:
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.
Zaman damgası oluşturma
Notation v1.2.0 sürümünden bu yana, Notation RFC 3161 uyumlu zaman damgasını destekler. Bu geliştirme, zaman damgası yetkilisine (TSA) güvenerek sertifikanın geçerlilik süresi içinde oluşturulan imzaların güvenini genişletir ve sertifikaların süresi dolduktan sonra bile başarılı imza doğrulamasını etkinleştirir. Görüntü imzalayan olarak, kapsayıcı görüntülerini güvenilir bir TSA tarafından oluşturulan zaman damgalarıyla imzaladığınızdan emin olmanız gerekir. Görüntü doğrulayıcı olarak, zaman damgalarını doğrulamak için hem görüntü imzalayana hem de ilişkili TSA'ya güvendiğinizi ve güven depoları ve güven ilkeleri aracılığıyla güven oluşturduğunuzdan emin olmanız gerekir. Zaman damgası oluşturma, kısa süreli sertifikaları kullanırken özellikle kritik öneme sahip olan sertifika süre sonu nedeniyle görüntüleri düzenli aralıklarla yeniden imzalama gereksinimini ortadan kaldırarak maliyetleri azaltır. Zaman damgasını kullanarak imzalama ve doğrulama hakkında ayrıntılı yönergeler için noter projesi zaman damgası kılavuzuna bakın.
Sonraki adımlar
Gösterimi ayrıca Azure Pipeline ve GitHub Actions İş Akışı üzerinde CI/CD çözümleri sağlar:
- Azure Pipeline'da Notation ile bir kapsayıcı görüntüsünü imzalama ve doğrulama
- GitHub Actions İş Akışında Notation ile kapsayıcı görüntüsünü imzalama ve doğrulama
AKS veya Kubernetes'te imzalı görüntü dağıtımlarını doğrulamak için: