Come crittografi le variabili in CI?
sobes.tech AI
Risposta dell'AI
Cifro le variabili utilizzando le funzionalità integrate del sistema CI. Ogni sistema CI, che sia GitLab CI/CD, GitHub Actions o Jenkins, dispone di funzioni per memorizzare in modo sicuro i segreti. Queste variabili sono disponibili solo in alcune fasi della pipeline di build e non vengono visualizzate nei log.
Ad esempio, in GitLab CI:
-
Variabili di ambiente: A livello di gruppo o progetto, è possibile salvare variabili. Sono contrassegnate come "protette" e "mascherate". Le "protette" vengono usate solo in branch e tag protetti, le "mascherate" nascondono il valore nei log se corrispondono completamente.
# .gitlab-ci.yml # Accesso alla variabile tramite l'ambiente script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault: Integrazione con un archivio di segreti esterno, come HashiCorp Vault. GitLab CI può autenticarsi in Vault e ottenere segreti durante l'esecuzione della 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 # La variabile viene caricata automaticamente da Vault
In GitHub Actions:
-
Secrets: A livello di repository o organizzazione, è possibile memorizzare segreti. Sono disponibili nei flussi di lavoro tramite
${{ secrets.MY_SECRET }}. I valori non vengono visualizzati nei log e non possono essere recuperati tramite API dopo essere stati salvati.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Usa segreto run: echo ${{ secrets.MY_SECRET }}
In Jenkins:
-
Credentials Plugin: Permette di memorizzare diversi tipi di credenziali (nome utente/password, testo segreto, chiave SSH) in modo cifrato. Possono essere accessibili nel Jenkinsfile o tramite l'interfaccia grafica.
// Jenkinsfile (Pipeline dichiarativa) pipeline { agent any stages { Nel processo di build, dove vengono usate le variabili, sono generalmente disponibili come variabili di ambiente. stage('Usa Segreto') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Principi generali:
- Minimizzazione dell'ambito: I segreti sono disponibili solo nelle fasi e negli ambienti in cui sono necessari.
- Mascheramento dei log: I valori dei segreti sono nascosti nei log di esecuzione del pipeline.
- Separazione dei ruoli: Solo utenti o sistemi autorizzati possono aggiungere/modificare i segreti.
- Utilizzo di archivi esterni: Per scenari più complessi e gestione centralizzata dei segreti, vengono utilizzati Vault o soluzioni simili.