Comment chiffrez-vous les variables dans CI ?
sobes.tech IA
Réponse de l'IA
Je chiffre les variables en utilisant les fonctionnalités intégrées du système CI. Chaque système CI, que ce soit GitLab CI/CD, GitHub Actions ou Jenkins, dispose de fonctions pour stocker en toute sécurité des secrets. Ces variables ne sont accessibles qu'à certaines étapes du pipeline de construction et ne sont pas affichées dans les logs.
Par exemple, dans GitLab CI :
-
Variables d'environnement : Au niveau du groupe ou du projet, vous pouvez sauvegarder des variables. Elles sont marquées comme "protégées" et "masquées". Les "protégées" ne sont utilisées que dans des branches et tags protégés, et les "masquées" cachent la valeur dans les logs si elle correspond entièrement.
# .gitlab-ci.yml # Accès à la variable via l'environnement script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault : Intégration avec un stockage externe de secrets, comme HashiCorp Vault. GitLab CI peut s'authentifier auprès de Vault et récupérer des secrets lors de l'exécution du 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 variable est automatiquement chargée depuis Vault
Dans GitHub Actions :
-
Secrets : Au niveau du dépôt ou de l'organisation, vous pouvez stocker des secrets. Disponibles dans les workflows via
${{ secrets.MY_SECRET }}. Les valeurs ne sont pas affichées dans les logs et ne peuvent pas être récupérées via l'API après leur sauvegarde.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Utiliser le secret run: echo ${{ secrets.MY_SECRET }}
Dans Jenkins :
-
Credentials Plugin : Permet de stocker différents types de crédentials (identifiant/mot de passe, texte secret, clé SSH) de manière chiffrée. Ils peuvent être accessibles dans Jenkinsfile ou via l'interface graphique.
// Jenkinsfile (Pipeline déclarative) pipeline { agent any stages { // Dans le processus de build, où les variables sont utilisées, elles sont généralement disponibles en tant que variables d'environnement. stage('Utiliser le secret') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Principes généraux :
- Minimisation de la portée : Les secrets ne sont accessibles qu'aux étapes et environnements où ils sont nécessaires.
- Masquage des logs : Les valeurs des secrets sont cachées dans les logs d'exécution du pipeline.
- Séparation des rôles : Seuls les utilisateurs ou systèmes autorisés peuvent ajouter/modifier des secrets.
- Utilisation de stockage externe : Pour des scénarios plus complexes et une gestion centralisée des secrets, Vault ou des solutions similaires sont utilisées.