Hoe versleutelt u variabelen in CI?
sobes.tech AI
Antwoord van AI
Ik versleut variabelen met behulp van de ingebouwde functies van het CI-systeem. Elk CI-systeem, of het nu GitLab CI/CD, GitHub Actions of Jenkins is, heeft functies voor het veilig opslaan van geheimen. Deze variabelen zijn alleen beschikbaar in bepaalde fasen van de build-pipeline en worden niet weergegeven in logs.
Bijvoorbeeld, in GitLab CI:
-
Omgevingsvariabelen: Op groeps- of projectniveau kunnen variabelen worden opgeslagen. Ze worden gemarkeerd als "beveiligd" en "gemaskeerd". "Beveiligde" variabelen worden alleen gebruikt in beveiligde takken en tags, en "gemaskeerde" verbergen de waarde in logs als deze volledig overeenkomt.
# .gitlab-ci.yml # Toegang tot de variabele via de omgeving script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault: Integratie met een externe geheimenopslag, zoals HashiCorp Vault. GitLab CI kan zich authenticeren bij Vault en tijdens de uitvoering van de pipeline geheimen ophalen.
# .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 # Variabele wordt automatisch geladen uit Vault
In GitHub Actions:
-
Secrets: Op repository- of organisatieniveau kunnen secrets worden opgeslagen. Ze zijn beschikbaar in workflows via
${{ secrets.MY_SECRET }}. De waarden worden niet weergegeven in logs en kunnen niet worden opgehaald via API na het opslaan.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Gebruik geheim run: echo ${{ secrets.MY_SECRET }}
In Jenkins:
-
Credentials Plugin: Maakt het mogelijk om verschillende soorten inloggegevens (gebruikersnaam/wachtwoord, geheime tekst, SSH-sleutel) versleuteld op te slaan. Ze kunnen worden benaderd in Jenkinsfile of via de grafische interface.
// Jenkinsfile (Declaratieve pipeline) pipeline { agent any stages { In het buildproces, waar variabelen worden gebruikt, zijn ze meestal beschikbaar als omgevingsvariabelen. stage('Gebruik geheim') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Algemene principes:
- Minimaliseer de scope: Geheimen zijn alleen beschikbaar in de fasen en omgevingen waar ze nodig zijn.
- Logmaskering: De waarden van geheimen worden verborgen in de logs van de pipeline-uitvoering.
- Roltoewijzing: Alleen geautoriseerde gebruikers of systemen kunnen geheimen toevoegen/bewerken.
- Gebruik externe opslag: Voor complexere scenario's en gecentraliseerd beheer van geheimen worden Vault of vergelijkbare oplossingen gebruikt.