Azure Pipeline'da Notation ile bir kapsayıcı görüntüsünü imzalama ve doğrulama
Azure DevOps'taki Gösterimi görevi, azure işlem hattındaki kapsayıcı görüntülerini ve diğer Open Container Initiative (OCI) yapıtlarını imzalamaya ve doğrulamaya yönelik yerleşik bir görevdir. Gösterimi görevi, bu işlemleri yürütmek için Notation CLI'sini kullanır ve yapıtların güvenilir bir varlık tarafından imzalandığından ve oluşturulduktan sonra değiştirilmediğinden emin olur.
Bu makalede, kapsayıcı görüntüsü oluşturan, ACR'ye göndererek ve Notation ve Azure Key Vault eklentisini kullanarak yapıtlar için bir güvenlik ve bütünlük katmanı sağlayan imzalar ekleyen bir Azure işlem hattı oluşturma işleminde size yol gösterilir. İşlem hattının amacı:
- Kapsayıcı görüntüsü oluşturun ve Azure Container Registry'ye (ACR) gönderin.
- Görüntüyü Notation ve Notation Azure Key Vault eklentisiyle imzalayın. ardından imza otomatik olarak ACR'ye gönderiliyor.
Önkoşullar
- Azure Key Vault'ta bir Key Vault oluşturun ve otomatik olarak imzalanan bir imzalama anahtarı ve sertifika oluşturun. Bu belgeyi , test amacıyla otomatik olarak imzalanan bir anahtar ve sertifika oluşturmak için kullanabilirsiniz. CA tarafından verilen bir sertifikanız varsa ayrıntılar için bu belgeye bakın.
- Azure Container Registry'de (ACR) bir kayıt defteri oluşturun.
- Azure DevOps deponuz veya GitHub deponuz olduğundan emin olun.
Hizmet Bağlan Oluşturma
Azure Pipelines'da işlem hattınızın Azure Container Registry (ACR) gibi dış hizmetlere erişmesini sağlayan bir hizmet bağlantısı oluşturun, aşağıdaki adımları izleyebilirsiniz:
ACR kimlik bilgilerini kullanarak Azure Container Registry'de (ACR) bir görüntü imzalayın.
ACR'de oturum açmak için Azure Pipelines'da Docker görevini kullanın. Docker görevi, Azure Pipelines'da docker görüntülerini oluşturmanızı, göndermenizi ve çekmenizi sağlayan yerleşik bir görevdir.
Aşağıda gösterildiği gibi, ACR kayıt defterinize Notation görevlerine erişim vermek için Azure Pipeline'da bir Docker Kayıt Defteri hizmet bağlantısı oluşturun:
- Kuruluşunuzda (
https://dev.azure.com/{yourorganization}
) oturum açın ve projenizi seçin. - Sol alt köşedeki Ayarlar düğmesini seçin.
- İşlem Hatları'na gidin ve Hizmet bağlantısı'nı seçin.
- Yeni hizmet bağlantısı'nı ve ardından Docker Kayıt Defteri'ni seçin.
- Ardından Azure Container Registry'yi seçin.
- Kimlik Doğrulama Türü'nde Hizmet İlkesi'ni seçin ve Azure Aboneliğiniz ve ACR kayıt defteriniz dahil olmak üzere Hizmet Sorumlusu ayrıntılarını girin.
- Bu hizmet bağlantısına başvururken kullanmak için kullanıcı dostu bir Bağlan ion adı girin.
- Kuruluşunuzda (
Azure Key Vault'unuza erişim yetkisi vermek için Azure Pipelines'da bir Azure Resource Manager hizmet bağlantısı oluşturun:
- Hizmet sorumlusu (otomatik) öğesini seçin.
- Ardından Abonelik'i seçin ve açılan listeden Azure aboneliğinizi bulun.
- Açılan listeden kullanılabilir bir Kaynak grubu seçin.
- Bu hizmet bağlantısına başvururken kullanmak için kullanıcı dostu bir Hizmet bağlantısı adı girin.
- Oluşturma işlemini tamamlamak için kaydedin.
Aşağıdaki adımları izleyerek hizmet sorumlunuza erişim ilkesi verin:
- Oluşturulan Azure Resource Manager hizmet bağlantısını açın ve Azure hizmet sorumlusu portalına girmek için Hizmet Sorumlusunu Yönet'e tıklayın.
- öğesini
Application (client) ID
kopyalayın. Hizmet sorumlusuna izin vermek için kullanılır. - Azure Key Vault portalını açın ve Erişim İlkeleri sayfasını girin.
- ve
certificate get
izniylekey sign
secret get
yeni bir erişim ilkesi oluşturun. - Önceki adımdaki yapıştırmayı kullanarak
Application (client) ID
bu yeni erişim ilkesini bir hizmet ilkesine verin. - Oluşturma işlemini tamamlamak için kaydedin.
Hizmet bağlantısı hakkında daha fazla bilgiyi burada bulabilirsiniz.
İşlem hattı oluşturma ve Notation görevi kullanma
Aşağıdaki adımları izleyerek git deponuz için bir Azure işlem hattı oluşturun:
- AOD kuruluşunuzda projeye gidin.
- Soldaki menüden İşlem Hatları'na gidin ve Yeni işlem hattı'nı seçin.
- Git deponuzu seçin. Tanıtım kolaylığı için Azure DevOps deposunu kullanırız.
- Azure DevOps'ta yeniyseniz, işlem hattını Başlangıç İşlem Hattı ile yapılandırın. Kaydet ve çalıştır'a tıklayarak işlem hattını gözden geçirin ve oluşturun.
Not
Örnekte varsayılan dalın olduğu varsayılır main
. Değilse, varsayılan dalı güncelleştirmek için lütfen kılavuzu izleyin.
Azure işlem hattınızı düzenleyerek Notation görevleri eklemenin iki yolu vardır:
Azure DevOps (ADO) panelini kullanın: ADO paneli, işlem hattınıza görev ekleyebileceğiniz bir kullanıcı arabirimi sağlar. Bu arabirimi kullanarak Notation görevlerini arayabilir ve işlem hattınıza ekleyebilirsiniz.
Örnek bir Azure Pipeline dosyasından kopyalama: Zaten Notation görevlerini içeren örnek bir Azure Pipeline dosyanız varsa, bu görevleri örnek dosyadan kopyalayıp işlem hattı dosyanıza yapıştırabilirsiniz.
1. Seçenek: Azure DevOps (ADO) düzenleme panelini kullanma
Docker
Sağ taraftaki işlem hattı düzenleme panelinden görevi arayın. login
ACR ile kimlik doğrulaması yapmak için komutunu Docker Kayıt Defteri hizmeti bağlantısıyla kullanın.
- Kapsayıcı kayıt defteri açılan listesinden önceki adımda oluşturulan Docker Kayıt Defteri hizmet bağlantısını seçin.
- Komut açılan listesinden seçim yapın
login
. - Komutuyla
login
Docker görevini işlem hattı dosyasına eklemek için Ekle'ye tıklayın.
Benzer şekilde, işlem hattı düzenleme panelinden görevi yeniden arayın Docker
. buildAndPush
Kaynak kodu otomatik olarak bir görüntüye oluşturmak ve hedef ACR deposuna göndermek için komutunu kullanın. Sonraki adımda oturum açmak için kullanılacak bir görüntü özeti oluşturur.
- Kapsayıcı deposuna depo adını girin.
- Komut açılan listesinden buildAndPush öğesini seçin.
- Dockerfile dosyasının dosya yolunu belirtin. Örneğin, Dockerfile'ınız kök klasörde depolanıyorsa kullanın
./Dockerfile
. - Komutuyla
buildAndPush
Docker görevini işlem hattı dosyasına eklemek için Ekle'ye tıklayın.
Notation
Sağ taraftaki işlem hattı düzenleme panelinden görevi arayın.
- Çalıştırmak için açılan liste komutundan Yükle'yi seçin.
- Görevi işlem hattına
notation install
eklemek için Ekle'ye tıklayın. - Benzer şekilde, işlem hattı düzenleme panelinden görevi yeniden arayın
Notation
ve İmzala'yı seçin. - Docker görevi tarafından oluşturulan ve kayıt defterine gönderilen en son özetini kullanarak bir görüntü imzaladığımız için Yapıt başvurularını atlayabilirsiniz. Bunun yerine, kullanarak
<registry_host>/<repository>@<digest>
el ile özet belirtebilirsiniz. - Eklenti yapılandırmasını formda doldurun. Varsayılan AKV eklentisini ve önceki adımda oluşturulan hizmet bağlantısını kullanacağız. Anahtar Kimliğinizi AKV'nizden Anahtar Kimliği'ne kopyalayın.
- Tanıtım kolaylığı için otomatik olarak imzalanan bir sertifika kullandığımızdan Otomatik olarak imzalanan Sertifika kutusunu işaretleyin. Bunun yerine, CA tarafından verilen bir sertifika kullanmak istiyorsanız sertifika dosya yolunuzu Sertifika Paketi Dosya Yolu'na giriş yapabilirsiniz.
- soldaki işlem hattı dosyasına eklemek
notation sign
için Ekle'ye tıklayın.
2. Seçenek: Örnek bir Azure Pipeline dosyasını düzenleme
- Azure Pipelines ve Gösterimi hakkında bilginiz varsa şablon işlem hattı dosyasıyla başlamak verimlidir.
- Belgede sağlanan işlem hattı şablonunu kendi işlem hattı dosyanıza kopyalayın. Bu şablon, kapsayıcı görüntülerini imzalamak ve doğrulamak için kullanılan Notation görevlerini kullanacak şekilde tasarlanmıştır.
- Şablonu kopyaladıktan sonra, aşağıdaki başvurulara ve açıklamalara göre gerekli değerleri doldurun.
1. seçeneğin imzalama görevi şablonuna bakın (Buraya tıklayın).
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
# log in to registry
- task: Docker@2
inputs:
containerRegistry: <your_docker_registry_service_connection>
command: 'login'
# build and push artifact to registry
- task: Docker@2
inputs:
repository: <your_repository_name>
command: 'buildAndPush'
Dockerfile: './Dockerfile'
# install notation
- task: Notation@0
inputs:
command: 'install'
version: '1.1.0'
# automatically detect the artifact pushed by Docker task and sign the artifact.
- task: Notation@0
inputs:
command: 'sign'
plugin: 'azureKeyVault'
akvPluginVersion: <azure_key_vault_plugin_version>
azurekvServiceConection: <your_akv_service_connection>
keyid: <your_key_id>
selfSigned: true
Not
Docker görevini kullanmanın yanı sıra, içinde aşağıdaki şekilde el ile bir yapıt başvurusu artifactRefs
belirterek belirtilen görüntü özetini imzalayabilirsiniz.
Örne bakın (Buraya tıklayın).
# sign the artifact
- task: Notation@0
inputs:
artifactRefs: '<registry_host>/<repository>@<digest>'
command: 'sign'
plugin: 'azureKeyVault'
akvPluginVersion: <azure_key_vault_plugin_version>
azurekvServiceConection: <akv_service_connection>
keyid: <key_id>
selfSigned: true
İşlem hattını tetikleme
Azure DevOps'ta işlem hattını çalıştırmak ve yürütülmesini doğrulamak için adımları izleyin.
- İşlem hattındaki girişleri doldurduktan sonra, işlem hattını tetiklemek için kaydedin ve çalıştırın.
- Çalışan işlem hattının İş sayfasına gidin. Burada her adımın yürütülmesini görebilirsiniz. Bu işlem hattı en son derlemeyi veya belirtilen özeti derleyip imzalar ve ardından imzalı görüntüyü ilişkili imzası ile birlikte kayıt defterine gönderir.
- Başarılı bir yürütme sonrasında, CBOR Nesne İmzalama ve Şifreleme (COSE) biçiminde imza eklenmiş olarak Azure Container Registry'nize (ACR) gönderilen görüntüyü görebilirsiniz.
İmzalı görüntüyü doğrulama
Benzer şekilde, imzalı görüntüyü doğrulamak için düzenleme panelini kullanabilir veya işlem hattı dosyasını düzenleyerek işlem hattınıza notasyon verify
görevini ekleyebilirsiniz. İşlem hattı, sağladığınız güven ilkesi ve güven deposuyla imzalı görüntüyü doğrular.
Notation güven ilkesini ve güven depolarını hazırlama
Genel olarak, doğrulayıcı imzalayandan farklıdır. Tanıtım amacıyla, bu örnekte aynı işlem hattını ve ADO deposunu kullanırız. Notation güven ilkesi, güven deposu oluşturmak ve görevi işlem hattına verify
eklemek için aşağıdaki adımları izleyin:
- Geçerli ADO deposunda, Gösterimi güven ilkesini
.pipeline/trustpolicy/
depolamak için bir örnek klasör.pipeline
oluşturun. Örnek bir güven ilkesi JSON dosyasıtrustpolicy.json
oluşturun. Güven ilkesi şablonunu kendi değerlerinizle doldurun ve klasöre kaydedin.
Not
Notation Trust Store'un şu anda Sertifika Yetkilisi (CA), SigningAuthority ve Time Stamping Authority (TSA) kök sertifikaları dahil olmak üzere üç kimlik türünü desteklediğini unutmayın. Tanıtım amacıyla, aşağıdaki güven ilkesinde ve güven deposunda Sertifika Yetkilisi 'ni (CA) x509/ca
kullanırız. Ayrıntılar için bkz . güven deposu .
Güven ilkesi şablonuna bakın (Buraya tıklayın).
{
"version": "1.0",
"trustPolicies": [
{
"name": "<yourPolicyName>",
"registryScopes": [ "<yourRegistry>.azurecr.io/<yourArtifact>" ],
"signatureVerification": {
"level" : "strict"
},
"trustStores": [ "ca:<yourTrustStore>"],
"trustedIdentities": [
"*"
]
}
]
}
- Geçerli ADO deposunda, sertifikayı depolamak için Notation güven deposu
/.pipeline/truststore/x509/ca/$<yourTrustStore>/
için yeni bir klasör oluşturun. Resminizi imzalamak için bu belgedeki imzalama adımlarını izlediyseniz, Azure Key Vault'tan (AKV) otomatik olarak imzalanan sertifikanızı indirmek için aşağıdaki komutu kullanın:
KEY_NAME=<key_name_you_picked_when_creating_the_key>
AKV_NAME=<akv_name_where_certificate_is_stored>
CERT_ID=$(az keyvault certificate show -n $KEY_NAME --vault-name $AKV_NAME --query 'id' -o tsv)
CERT_PATH=./${KEY_NAME}.pem
az keyvault certificate download --file $CERT_PATH --id $CERT_ID --encoding PEM
- Sertifikayı son adımda oluşturduğumuz güven deposu klasörüne
/.pipeline/truststore/x509/ca/$<yourTrustStore>/
yükleyin.
Notasyon doğrulama görevi ekleme
- İşlem hattı düzenleme panelinden Notation görevini yeniden arayın ve Doğrula'yı seçin.
- Yapıt başvurularını imzalı görüntünün özetiyle doldurun.
- Güven İlkesi Dosya Yolu'na değeri
.pipeline/trustpolicy/trustpolicy.json
girin. - Güven Deposu Klasör Yolu'na değeri
.pipeline/truststore/
girin. - Soldaki işlem hattı dosyasına gösterimi doğrulama eklemek için Ekle'ye tıklayın.
Aşağıdaki notation verify
gibi kaydedilir.
Örne bakın (Buraya tıklayın).
# sign the artifact
- task: Notation@0
inputs:
command: 'verify'
artifactRefs: '<registry_host>/<repository>@<digest>'
trustPolicy: .pipeline/trustpolicy.json
trustStore: .pipeline/truststore/
İşlem hattını tetikleme (Güncelleştirildi)
İmzalı görüntüyü doğrulamak için işlem hattını yeniden tetikleyebilirsiniz. Yürütme başarılı olursa, çalışan işlem hattının İş sayfasından günlükleri görebilirsiniz. İşlem hattı, sağladığınız güven ilkesi ve güven deposuyla imzalı görüntüyü doğrular.
Sonuç
Bu makalede, Azure Pipeline'da Notation ile bir kapsayıcı görüntüsünün nasıl imzalanıp doğrulanması gösterilmektedir. İşlem hattınıza Notation görevleri eklemek için Azure DevOps panelini kullanabilir veya işlem hattı dosyasını düzenleyebilirsiniz. İşlem hattı, sağladığınız güven ilkesi ve güven deposuyla görüntüyü derler, iletir, imzalar ve doğrular. Bu işlem, yapıtların güvenilir bir varlık tarafından imzalanmasını ve oluşturulduktan sonra üzerinde oynanmamasını sağlar.