Kako šifrujete promenljive u CI?
sobes.tech АИ
Одговор од АИ
Šifrujem promenljive koristeći ugrađene mogućnosti CI sistema. Svaki CI sistem, bilo GitLab CI/CD, GitHub Actions ili Jenkins, ima funkcije za sigurno skladištenje tajni. Ove promenljive su dostupne samo na određenim fazama izgradnje i nisu prikazane u logovima.
Na primer, u GitLab CI:
-
Promenljive okruženja: Na nivou grupe ili projekta mogu se sačuvati promenljive. Obeležavaju se kao "zaštićene" i "maskirane". "Zaštićene" se koriste samo u zaštićenim granama i oznakama, "maskirane" skrivaju vrednost u logovima ako se potpuno poklapaju.
# .gitlab-ci.yml # Pristup promenljivoj putem okruženja script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault: Integracija sa spoljnjim skladištem tajni, poput HashiCorp Vault. GitLab CI može da se autentifikuje u Vault i da dobije tajne tokom izvršavanja cevi.
# .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 # Promenljiva je automatski učitana iz Vault-a
U GitHub Actions:
-
Secrets: Na nivou repozitorijuma ili organizacije mogu se čuvati tajne. Dostupne su u radnim tokovima putem
${{ secrets.MY_SECRET }}. Vrednosti se ne prikazuju u logovima i ne mogu biti dobijene putem API-ja nakon čuvanja.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Koristi tajnu run: echo ${{ secrets.MY_SECRET }}
U Jenkins-u:
-
Credentials Plugin: Omogućava čuvanje različitih tipova akreditiva (korisničko ime/lozinka, tajni tekst, SSH ključ) u šifrovanom obliku. Do njih se može doći u Jenkinsfile ili putem grafičkog interfejsa.
// Jenkinsfile (Deklarativni pipeline) pipeline { agent any stages { U okviru radnog procesa izgradnje, gde se koriste promenljive, one su obično dostupne kao promenljive okruženja. stage('Use Secret') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Opšti principi:
- Minimizacija opsega: Tajne su dostupne samo na onim etapama i u okruženjima gde su potrebne.
- Maskiranje logova: Vrednosti tajnih se skrivaju u logovima izvršenja.
- Razdvajanje uloga: Samo ovlašćeni korisnici ili sistemi mogu dodavati/menjati tajne.
- Korišćenje spoljašnjih skladišta: Za složenije scenarije i centralizovano upravljanje tajnama koriste se Vault ili slična rešenja.