Jak šifrujete proměnné v CI?
sobes.tech AI
Odpověď od AI
Šifruji proměnné pomocí vestavěných funkcí CI systému. Každý CI systém, ať už GitLab CI/CD, GitHub Actions nebo Jenkins, má funkce pro bezpečné ukládání tajných údajů. Tyto proměnné jsou dostupné pouze na určitých etapách sestavovacího procesu a nejsou zobrazeny v logu.
Například v GitLab CI:
-
Proměnné prostředí: Na úrovni skupiny nebo projektu lze uložit proměnné. Jsou označeny jako "chráněné" a "maskované". "Chráněné" jsou použitelné pouze na chráněných větvích a značkách, "maskované" skrývají hodnotu v logu, pokud se úplně shoduje.
# .gitlab-ci.yml # Přístup k proměnné přes prostředí script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault: Integrace s externím úložištěm tajných údajů, například HashiCorp Vault. GitLab CI se může autentizovat do Vault a získávat tajné údaje během běhu 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 # Proměnná je automaticky načtena z Vault
V GitHub Actions:
-
Secrets: Na úrovni repozitáře nebo organizace lze ukládat tajné údaje. Jsou dostupné ve workflow přes
${{ secrets.MY_SECRET }}. Hodnoty nejsou zobrazeny v logu a po uložení je nelze získat přes API.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Použít tajný údaj run: echo ${{ secrets.MY_SECRET }}
V Jenkins:
-
Credentials Plugin: Umožňuje ukládat různé typy přihlašovacích údajů (uživatelské jméno/heslo, tajný text, SSH klíč) v zašifrované podobě. K nim lze získat přístup v Jenkinsfile nebo přes grafické rozhraní.
// Jenkinsfile (Declarative Pipeline) pipeline { agent any stages { V rámci pracovního procesu sestavení, kde jsou proměnné používány, jsou obvykle dostupné jako proměnné prostředí. stage('Use Secret') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Obecné principy:
- Minimalizace rozsahu: Tajné údaje jsou dostupné pouze na těch etapách a v těch prostředích, kde jsou potřeba.
- Maskování logů: Hodnoty tajných údajů jsou skryty v logu běhu pipeline.
- Oddělení rolí: Pouze autorizovaní uživatelé nebo systémy mohou přidávat/měnit tajné údaje.
- Použití externích úložišť: Pro složitější scénáře a centralizované řízení tajných údajů se používají Vault nebo podobná řešení.