Modern yazılım geliştirme süreçlerinde CI/CD (Continuous Integration / Continuous Delivery) pipeline vazgeçilmezdir. Ancak build sürecinde kod imzalama adımını otomatikleştirmek, özellikle güvenlik gereksinimleri nedeniyle zorlu olabilir. Cloud HSM çözümleri, bu sorunu kökten çözer.
Bu rehberde, Cloud HSM kullanarak GitHub Actions, Jenkins ve Azure DevOps pipeline'larında otomatik kod imzalama entegrasyonunu adım adım anlatıyoruz.
Neden CI/CD'de Cloud HSM?
Geleneksel USB token ile CI/CD ortamında imzalama yapmak neredeyse imkansızdır çünkü:
- Token'ın fiziksel olarak build sunucusuna bağlı olması gerekir
- Bulut tabanlı CI/CD runner'larda USB port erişimi yoktur
- Her build'de PIN girişi otomatikleştirilemez
- Token tek bir lokasyona bağlıdır
Cloud HSM bu kısıtlamaların tamamını ortadan kaldırır. API tabanlı imzalama sayesinde herhangi bir CI/CD ortamından güvenli şekilde imzalama yapılabilir.
Genel Mimari
Cloud HSM ile CI/CD entegrasyonunun genel mimarisi şu şekildedir:
- Build Aşaması: Uygulama kodunuz derlenir ve çalıştırılabilir dosya oluşturulur
- İmzalama Aşaması: Oluşturulan dosyanın hash'i Cloud HSM'e gönderilir
- HSM İmzalama: HSM, hash'i özel anahtar ile imzalar ve imzayı döner
- Zaman Damgası: İmzaya RFC 3161 uyumlu zaman damgası eklenir
- Doğrulama: İmzalanmış dosya otomatik doğrulanır
- Dağıtım: İmzalanmış dosya release olarak yayınlanır
1. GitHub Actions Entegrasyonu
GitHub Actions, en popüler CI/CD platformlarından biridir. Cloud HSM entegrasyonu için:
Ön Hazırlık
- Cloud kod imzalama sertifikanızı edinmiş olmalısınız
- HSM sağlayıcınızın CLI aracını kurmuş olmalısınız
- GitHub repository secrets'a kimlik bilgilerini eklemiş olmalısınız
Workflow Dosyası (.github/workflows/sign.yml)
name: Build and Sign
on:
push:
tags: ['v*']
jobs:
build-and-sign:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Build Application
run: dotnet publish -c Release -o ./output
- name: Install Signing Tool
run: |
choco install signtool -y
- name: Sign with Cloud HSM
env:
HSM_CREDENTIAL_ID: ${{ secrets.HSM_CREDENTIAL_ID }}
HSM_API_KEY: ${{ secrets.HSM_API_KEY }}
run: |
signtool sign /sha1 ${{ secrets.CERT_THUMBPRINT }} ^
/tr http://timestamp.digicert.com /td sha256 ^
/fd sha256 ./output/MyApp.exe
- name: Verify Signature
run: signtool verify /pa ./output/MyApp.exe
2. Jenkins Entegrasyonu
Jenkins ile Cloud HSM entegrasyonu için Jenkinsfile kullanılır:
Jenkinsfile Örneği
pipeline {
agent { label 'windows' }
environment {
HSM_CREDENTIALS = credentials('cloud-hsm-creds')
}
stages {
stage('Build') {
steps {
bat 'msbuild /p:Configuration=Release MyProject.sln'
}
}
stage('Sign') {
steps {
bat '''
signtool sign /sha1 %CERT_THUMBPRINT% ^
/tr http://timestamp.digicert.com ^
/td sha256 /fd sha256 ^
bin\\Release\\MyApp.exe
'''
}
}
stage('Verify') {
steps {
bat 'signtool verify /pa bin\\Release\\MyApp.exe'
}
}
}
}
3. Azure DevOps Entegrasyonu
Azure DevOps Pipeline ile Cloud HSM kullanımı:
trigger:
tags:
include: ['v*']
pool:
vmImage: 'windows-latest'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
arguments: '-c Release -o $(Build.ArtifactStagingDirectory)'
- task: PowerShell@2
displayName: 'Sign with Cloud HSM'
inputs:
targetType: 'inline'
script: |
signtool sign /sha1 $(CertThumbprint) `
/tr http://timestamp.digicert.com `
/td sha256 /fd sha256 `
"$(Build.ArtifactStagingDirectory)\MyApp.exe"
Güvenlik En İyi Uygulamaları
- Secret Management: HSM kimlik bilgilerini asla kodda saklamayın. CI/CD platformunun secret yönetimini kullanın
- IP Kısıtlama: HSM'e erişimi CI/CD runner IP'leriyle sınırlandırın
- Denetim Günlükleri: Her imzalama işlemini loglayın ve düzenli olarak audit yapın
- Zaman Damgası: Her zaman RFC 3161 uyumlu zaman damgası kullanın
- İmza Doğrulama: Pipeline'da imzalama sonrası mutlaka doğrulama adımı ekleyin
- Least Privilege: CI/CD service account'a sadece imzalama izni verin
Sık Yapılan Hatalar
- Zaman damgası kullanmamak: Sertifika süresi dolunca imzalar geçersiz olur
- SHA-1 kullanmak: Mutlaka SHA-256 veya üstü algoritma kullanın
- Secret'ları loglamak: Build loglarında kimlik bilgilerinin görünmediğinden emin olun
- Doğrulama atlamak: İmzalama sonrası signtool verify adımını mutlaka çalıştırın
Sonuç
Cloud HSM, CI/CD pipeline'larında otomatik kod imzalama için en güvenli ve pratik çözümdür. Doğru yapılandırma ile build sürecinize dakikalar içinde entegre edebilir, her release'i otomatik olarak imzalayabilirsiniz.
Cloud HSM destekli kod imzalama sertifikaları için Cloud Kod İmzalama sayfamıza göz atın.
Yorumlar
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yaz