CI'de değişkenleri nasıl şifreliyorsunuz?
sobes.tech yapay zeka
AI'dan gelen yanıt
CI sisteminin yerleşik özelliklerini kullanarak değişkenleri şifreliyorum. GitLab CI/CD, GitHub Actions veya Jenkins olsun, her CI sistemi gizli bilgileri güvenli bir şekilde saklamak için fonksiyonlara sahiptir. Bu değişkenler, derleme hattının belirli aşamalarında erişilebilir olup, günlüklerde gösterilmez.
Örneğin, GitLab CI'de:
-
Ortam değişkenleri: Grup veya proje seviyesinde değişkenler saklanabilir. "Korunmuş" ve "maskelenmiş" olarak işaretlenirler. "Korunmuş" olanlar sadece korunmuş dallarda ve etiketlerde kullanılır, "maskelenmiş" olanlar ise tamamen eşleştiğinde değeri günlüklerde gizler.
# .gitlab-ci.yml # Ortam değişkenine erişim script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault: HashiCorp Vault gibi harici gizli saklama alanlarıyla entegrasyon. GitLab CI, Vault'ta kimlik doğrulaması yapabilir ve çalışma sırasında gizli bilgileri alabilir.
# .gitlab-ci.yml variables: VAULT_SERVER: "https://vault.example.com" VAULT_AUTH_ROLE: "gitlab-ci" VAULT_AUTH_PATH: "auth/kubernetes" VAULT_SECRETS: | MY_SECRET_KEY: vault/path/to/secret:key script: - echo $MY_SECRET_KEY # Vault'tan otomatik olarak yüklenmiş değişken
GitHub Actions'ta:
-
Secrets: Depo veya organizasyon seviyesinde gizli bilgiler saklanabilir. İş akışlarında
${{ secrets.MY_SECRET }}ile erişilir. Değerler günlüklerde gösterilmez ve kaydedildikten sonra API aracılığıyla alınamaz.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Gizli bilgiyi kullan run: echo ${{ secrets.MY_SECRET }}
Jenkins'te:
-
Credentials Plugin: Farklı kimlik bilgisi türlerini (kullanıcı adı/parola, gizli metin, SSH anahtarı) şifreli biçimde saklamaya imkan tanır. Jenkinsfile veya grafik arayüz üzerinden erişilebilir.
// Jenkinsfile (Deklaratif Pipeline) pipeline { agent any stages { Build aşamasında, değişkenler kullanılırken, genellikle ortam değişkenleri olarak erişilebilirler. stage('Gizli bilgiyi kullan') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Genel ilkeler:
- Kapsamın en aza indirilmesi: Gizli bilgiler sadece ihtiyaç duyulan aşamalarda ve ortamlarda erişilebilir olmalıdır.
- Günlükleri gizleme: Gizli bilgilerin değerleri, pipeline çalıştırma günlüklerinde gizlenir.
- Rollerin ayrılması: Sadece yetkili kullanıcılar veya sistemler gizli bilgileri ekleyip değiştirebilir.
- Harici depolama kullanımı: Daha karmaşık senaryolar ve merkezi gizli bilgi yönetimi için Vault veya benzeri çözümler kullanılır.