Ako šifrujete premenné v CI?
sobes.tech AI
Odpoveď od AI
Šifrujem premenné pomocou vstavaných možností CI systému. Každý CI systém, či už GitLab CI/CD, GitHub Actions alebo Jenkins, má funkcie na bezpečné uloženie tajných údajov. Tieto premenné sú dostupné iba na určitých etapách zostavovacieho procesu a nie sú zobrazené v logoch.
Napríklad v GitLab CI:
-
Premenné prostredia: Na úrovni skupiny alebo projektu je možné uložiť premenné. Sú označené ako "chránené" a "maskované". "Chránené" sa používajú iba v chránených vetvách a značkách, "maskované" skrývajú hodnotu v logoch, ak sa úplne zhodujú.
# .gitlab-ci.yml # Prístup k premennej cez prostredie script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault: Integrácia s externým úložiskom tajných údajov, ako je HashiCorp Vault. GitLab CI sa môže autentifikovať vo Vault a získať tajné údaje počas behu pipeline.
# .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 # Premenná je automaticky načítaná z Vault
V GitHub Actions:
-
Secrets: Na úrovni repozitára alebo organizácie je možné ukladať tajné údaje. Sú dostupné vo workflow cez
${{ secrets.MY_SECRET }}. Hodnoty sa nezobrazujú v logoch a nie je možné ich získať cez API po uložení.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Použiť tajný údaj run: echo ${{ secrets.MY_SECRET }}
V Jenkins:
-
Credentials Plugin: Umožňuje ukladať rôzne typy prihlasovacích údajov (používateľské meno/heslo, tajný text, SSH kľúč) v zašifrovanej podobe. K nim je možné získať prístup v Jenkinsfile alebo cez grafické rozhranie.
// Jenkinsfile (Deklaratívny pipeline) pipeline { agent any stages { V rámci pracovného procesu zostavenia, kde sa používajú premenné, sú obvykle dostupné ako premenné prostredia. stage('Use Secret') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Všeobecné princípy:
- Minimalizácia rozsahu: Tajné údaje sú dostupné iba na tých etapách a v tých prostrediach, kde sú potrebné.
- Maskovanie logov: Hodnoty tajných údajov sú skryté v logu behu pipeline.
- Oddelenie rolí: Iba autorizovaní používatelia alebo systémy môžu pridávať/meniť tajné údaje.
- Použitie externých úložísk: Pre zložitejšie scenáre a centralizované riadenie tajných údajov sa používajú Vault alebo podobné riešenia.