Azure DevOps boru hatlarında imzalama adımı, derleme çıktısının ajan üzerinde mi yoksa ayrı bir imzalama servisinde mi imzalanacağı kararına dayanır. Microsoft-hosted ajanlar her çalıştırmada temiz bir sanal makine olduğu için donanım token'ı takılamaz; bu nedenle hardware korumalı bir kod imzalama anahtarı için genellikle self-hosted ajan veya bulut HSM tabanlı imzalama kullanılır.
Mimari seçenekleri
- Self-hosted Windows ajan: Token veya akıllı kart fiziksel olarak o makineye bağlıdır, ajan havuzu (agent pool) yalnızca imzalama işleri için ayrılır.
- Bulut HSM ile imzalama: Anahtar bulutta kalır, ajan imzalama isteğini gönderir. Bulut kod imzalama USB token ve kargo gerektirmez.
- Aşamalı (stage) ayrımı: Derleme ve test herkese açık havuzda, imzalama yalnızca onaylı bir ortamda çalışır.
Örnek YAML
trigger:
tags:
include: ['v*']
stages:
- stage: Build
pool: { vmImage: windows-latest }
jobs:
- job: b
steps:
- script: dotnet publish -c Release -o $(Build.ArtifactStagingDirectory)
- publish: $(Build.ArtifactStagingDirectory)
artifact: drop
- stage: Sign
dependsOn: Build
pool: { name: SigningPool }
jobs:
- deployment: sign
environment: code-signing
strategy:
runOnce:
deploy:
steps:
- script: signtool sign /sha1 $(CertThumbprint) /fd SHA256 /tr http://time.certum.pl /td SHA256 $(Pipeline.Workspace)\drop\app.exe
- script: signtool verify /pa /v $(Pipeline.Workspace)\drop\app.exe
CertThumbprint değişkenini bir variable group içinde veya Azure Key Vault bağlantılı grupta tutabilirsiniz; parmak izi gizli değildir ama yetkisiz değişikliği önlemek için grubu kilitleyin.
İpuçları
environment: code-signingüzerine onay ve kontrol (approvals and checks) ekleyin.- Sertifika yenilendiğinde parmak izi değişir; değişkeni güncellemeyi yenileme kontrol listenize yazın.
- Her sürümde zaman damgası kullanın; sertifika süresi dolsa da imza geçerli kalır.
- Sertifika türü seçimi için kod imzalama sayfasına göz atın.
Anahtarı ajan havuzunun içinde değil, kontrollü bir imzalama aşamasında tutmak hem güvenliği hem denetlenebilirliği artırır.
Sık karşılaşılan sorunlar
İmzalama ajanı çevrimdışı kaldığında boru hattı kuyrukta bekler; bu nedenle ajan havuzuna yedek bir ajan eklemek iyi olur. Artifact'ı derleme aşamasından imzalama aşamasına aktarırken dosyanın değişmediğinden emin olmak için SHA-256 karmasını iki aşamada da kaydedin. Hattın sonunda imzalı çıktıyı yayınlamadan önce signtool verify adımı başarısız olursa yayının durmasını sağlayın.
- Hizmet bağlantısı ve değişken gruplarına erişimi en az yetkiyle verin.
- Onay adımını yalnızca ana dal ve etiketlerle sınırlayın.