26 Variablen und Secrets in GitLab CI

GitLab CI/CD bietet eine flexible Möglichkeit, Variablen und Secrets in Pipelines zu verwenden, um Konfigurationen, Zugangsdaten oder andere sensible Informationen sicher und dynamisch zu verwalten. Variablen und Secrets sind entscheidend für die Konfiguration von Umgebungen und die sichere Handhabung sensibler Daten in Pipelines, ohne dass diese direkt im Quellcode hinterlegt werden müssen.

26.1 Arten von Variablen

GitLab CI verwendet mehrere Typen von Variablen, die je nach Bedarf in Pipelines definiert und verwendet werden können:

  1. Benutzerdefinierte Variablen: Diese werden vom Benutzer festgelegt und enthalten projekt- oder umgebungsspezifische Informationen, wie API-Schlüssel, Datenbankverbindungen oder Build-Flags. Sie können auf Projekt-, Gruppen- oder Instanzebene definiert werden und in der .gitlab-ci.yml-Datei, über die Benutzeroberfläche oder per API festgelegt werden.

    Beispiel:

    variables:
      DATABASE_URL: "postgres://user:password@localhost:5432/db"
  2. Vordefinierte Variablen: GitLab stellt automatisch eine Vielzahl an vordefinierten Variablen bereit, die Informationen über den aktuellen Job, die Pipeline und die Umgebung enthalten. Sie sind nützlich, um dynamisch auf den Zustand der Pipeline zuzugreifen.

    Beispiele für vordefinierte Variablen:

  3. Geheime Variablen (Secrets): Diese Variablen enthalten sensible Informationen wie API-Schlüssel, Tokens oder Passwörter, die in Jobs verwendet werden können, jedoch nicht im Klartext sichtbar sind. Sie werden oft als geschützte und maskierte Variablen gespeichert, um sie vor unberechtigtem Zugriff zu schützen.

    Beispiel für eine geheime Variable:

    deploy-job:
      script:
        - curl -H "Authorization: Bearer $SECRET_API_KEY" https://api.example.com/deploy

26.2 Scope von Variablen

Variablen in GitLab können auf verschiedenen Ebenen definiert werden: - Projekt: Variablen gelten für das gesamte Projekt. - Gruppe: Variablen gelten für alle Projekte einer Gruppe. - Pipeline: Variablen, die für eine spezifische Pipeline definiert sind, können auf einzelne Jobs oder Stages beschränkt werden.

26.3 Geschützte und maskierte Variablen

  1. Geschützte Variablen: Diese Variablen sind nur in geschützten Branches oder Tags verfügbar. Dadurch wird sichergestellt, dass sensible Daten nur bei vertrauenswürdigen Deployments verwendet werden.

  2. Maskierte Variablen: Maskierte Variablen verhindern, dass ihre Werte im Job-Log sichtbar sind. Dies ist besonders wichtig, wenn es um die Verarbeitung sensibler Daten wie Passwörter oder API-Schlüssel geht.

    Beispiel:

    variables:
      SECRET_API_KEY: "mySecretKey"

26.4 Verwendung von Variablen in Jobs

Variablen können direkt in Job-Skripten referenziert werden und werden durch das Präfix $ aufgerufen.

Beispiel:

deploy-job:
  script:
    - echo "Deploying to $CI_ENVIRONMENT_URL"

In diesem Beispiel wird die vordefinierte Variable $CI_ENVIRONMENT_URL verwendet, um die URL der Zielumgebung während des Deployments anzuzeigen.

26.5 Dynamische Generierung von Variablen

GitLab CI unterstützt auch die dynamische Generierung von Variablen während der Pipeline-Ausführung. Durch die Verwendung von Skripten oder externen Tools können Variablen basierend auf den Bedingungen der aktuellen Pipeline erstellt werden.

Beispiel:

generate-variable:
  script:
    - export DYNAMIC_VAR=$(date +%Y%m%d)
    - echo "Generated variable: $DYNAMIC_VAR"

26.6 Verwendung externer Secrets-Management-Tools

Für größere Projekte oder sicherheitskritische Anwendungen können externe Secrets-Management-Tools wie HashiCorp Vault oder AWS Secrets Manager in GitLab CI integriert werden. Diese Tools bieten zusätzliche Funktionen zur Verwaltung, Rotation und Auditierung von Secrets und ermöglichen die nahtlose Integration in Pipelines.

Beispiel für die Integration eines externen Geheimdienstes:

deploy_job:
  script:
    - export DB_PASSWORD=$(vault kv get -field=password secret/db)
    - ./deploy.sh

26.7 Sicherheitsüberlegungen bei der Verwendung von Variablen und Secrets

Die sichere Verwaltung von Variablen und Secrets ist entscheidend, um Sicherheitsrisiken in CI/CD-Pipelines zu minimieren:


Weitere Informationen zur sicheren Verwendung von Variablen und Secrets finden sich in der offiziellen GitLab-Dokumentation.