Cum criptați variabilele în CI?
sobes.tech AI
Răspuns de la AI
Criptez variabilele utilizând funcțiile încorporate ale sistemului CI. Fiecare sistem CI, fie că este GitLab CI/CD, GitHub Actions sau Jenkins, are funcții pentru stocarea sigură a secretelor. Aceste variabile sunt disponibile doar în anumite etape ale pipeline-ului de construcție și nu sunt afișate în jurnale.
De exemplu, în GitLab CI:
-
Variabile de mediu: La nivel de grup sau proiect, se pot salva variabile. Sunt marcate ca "protejate" și "mascate". "Protejate" sunt utilizate doar în ramuri și etichete protejate, iar "mascate" ascund valoarea în jurnale dacă corespunde complet.
# .gitlab-ci.yml # Acces la variabilă prin mediu script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault: Integrare cu un depozit extern de secrete, precum HashiCorp Vault. GitLab CI se poate autentifica în Vault și poate obține secrete în timpul execuției pipeline-ului.
# .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 # Variabila este încărcată automat din Vault
În GitHub Actions:
-
Secrets: La nivel de depozit sau organizație, se pot stoca secrete. Sunt disponibile în fluxurile de lucru prin
${{ secrets.MY_SECRET }}. Valorile nu sunt afișate în jurnale și nu pot fi obținute prin API după ce au fost salvate.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Folosește secretul run: echo ${{ secrets.MY_SECRET }}
În Jenkins:
-
Credentials Plugin: Permite stocarea în mod criptat a diferitelor tipuri de acreditări (nume de utilizator/parolă, text secret, cheie SSH). Pot fi accesate în Jenkinsfile sau prin interfața grafică.
// Jenkinsfile (Pipeline declarativ) pipeline { agent any stages { În procesul de build, unde sunt utilizate variabilele, acestea sunt de obicei disponibile ca variabile de mediu. stage('Folosește secretul') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Principii generale:
- Minimizarea domeniului de aplicare: Secretele sunt disponibile doar în etapele și mediile în care sunt necesare.
- Mascherarea în jurnale: Valorile secretelor sunt ascunse în jurnalele de execuție ale pipeline-ului.
- Separarea rolurilor: Doar utilizatorii sau sistemele autorizate pot adăuga/modifica secretele.
- Utilizarea depozitelor externe: Pentru scenarii mai complexe și gestionarea centralizată a secretelor, se utilizează Vault sau soluții similare.