GitLab x Constellation

Gitlab + Constellation

In wenigen Schritten zur vertraulichen Entwicklungsumgebung


Installieren Sie GitLab mit Confidential Computing in der Cloud Ihrer Wahl. Constellation gewährleistet eine durchgängige Verschlüsselung Ihrer Daten, sogar während der Verarbeitung.

Herausforderung


Die Nutzung von Online-Plattformen wie GitHub zur Verwaltung von sensiblem Quellcode ist bequem, birgt jedoch Sicherheits- und Compliance-Risiken. Hacker oder böswillige Insider könnten auf private Repositories zugreifen. Zudem könnten Fehler im plattformeigenen Code zu Datenlecks führen.


Um diesen Bedrohungen zu begegnen, setzen Unternehmen häufig auf das lokale Deployment und die Eigenverwaltung von GitHub Enterprise oder GitLab on-prem. Die Wartung einer lokalen Infrastruktur ist jedoch in der Regel kostenintensiv, birgt eigene Sicherheitsprobleme und ist oft nicht realistisch.

Threat model of gitlab without constellation

Lösung


Confidential Computing bietet eine kostengünstige Alternative zu On-Prem-Implementierungen. Es handelt sich um eine bahnbrechende Technologie, welche Daten immer verschlüsselt, auch während der Verarbeitung. Wenn es richtig angewendet wird, können durch Confidential Computing nicht einmal Systemadministratoren, Mitarbeiter von Cloud-Anbietern oder privilegierte Angreifer auf Workloads zugreifen. Zudem kann diese Verschlüsselung sogar remote überprüft werden. Grundlegende Funktionen des Confidential Computings sind bereits auf den großen Clouds wie Azure, GCP und AWS verfügbar. Diese grundlegenden Funktionen reichen jedoch nicht aus, um komplexe und skalierbare Anwendungen wie GitHub oder GitLab effektiv zu schützen.


Hierfür benötigen Sie eine Lösung wie Constellation. Constellation ist eine Open-Source-Software, die gesamte Kubernetes-Deployments Ende-zu-Ende mithilfe von Confidential Computing in öffentlichen Clouds schützt. Im Wesentlichen kann Constellation jede Anwendung, die auf Kubernetes ausgeführt werden kann, abschirmen und zur Laufzeit verschlüsseln. Mit Constellation können Sie also ein komplexes Verwaltungssystem für Quellcode wie GitHub Enterprise oder GitLab in der Public Cloud ausführen. Dabei haben Sie die Sicherheit, dass der Code stets verschlüsselt ist und sowohl der Cloud-Anbieter als auch Angreifer, die über die Infrastruktur kommen, keinen Zugriff haben.

GitLab protected with Constellation

Technische Details


Constellation gewährleistet, dass sämtliche Komponenten des Kubernetes-Clusters in verschlüsselten und isolierten CVMs laufen. Dadurch werden Daten, die in Datenbanken geschrieben und in den Cloud-Speicher übertragen werden, automatisch verschlüsselt. Die kryptografischen Keys für diese Daten werden innerhalb der CVMs erzeugt und verwaltet, ohne dass zusätzlicher Code von den Entwicklern erforderlich ist. Zudem überprüft Constellation die Integrität und Authentizität aller CVMs, um sicherzustellen, dass sie das korrekte "gute" Constellation Node-Image verwenden. So bleiben alle Daten, die die CVMs verlassen, verschlüsselt.


Bei der Verwendung von Datenbanken wie beispielsweise Redis oder PostgreSQL werden die von ihnen geschriebenen Daten verschlüsselt. Nach der Ausführung des Constellation Init Befehls können Sie sicher sein, dass Sie über kubectl mit einem durchgängig vertraulichen Cluster kommunizieren. Weitere Informationen finden Sie in den Constellation Docs.


Lesen Sie weiter, um einen detaillierten Überblick über den Installationsprozess zu erhalten.

Tutorial: Wie sich Gitlab auf Constellation installieren lässt


Gitlab ist eine Software, die sich auf PostgreSQL, NGINX und Redis stützt. Gitlab kann "confidential" gemacht werden, indem Constellation mit der Confidential Computing Hardware von Azure, GCP oder AWS kombiniert wird.


Live-Demo


Sie können eine Demo von Confidential Gitlab in Aktion sehen unter: https://gitlab.edgeless.systems/. Diese Instanz wird mit dem Constellation Repo von GitHub synchronisiert.


Voraussetzungen und Überblick


Um Gitlab auf Constellation ausführen zu können, benötigen Sie:

  • Einen Cloud-Anbieter mit Confidential Computing Fähigkeiten (z. B. AWS, Azure, GCP)

  • Einen Domain-Registrar, um einen Domainnamen für Ihren Cluster einzurichten

  • Kubectl und Helm müssen auf Ihrem Rechner installiert sein

Der Prozess besteht aus drei Hauptschritten:

  1. Einrichten von Constellation

  2. Einrichten der Domain

  3. Installation von Gitlab über Helmchart

Wir haben die folgenden Anweisungen für Nutzer geschrieben, die Azure mit einem GoDaddy-Registrar verwenden, um die Anleitung übersichtlicher und einfacher zu gestalten. Dieses Tutorial kann jedoch mit jedem der großen Cloud-Anbieter und einem Registrar Ihrer Wahl durchgeführt werden.

Einrichten von Constellation


Nachdem Sie sich mit Ihrem Cloud-Anbieter verbunden haben, downloaden und installieren Sie die Constellation CLI.


Sobald diese installiert ist, erstellen Sie den Constellation Cluster:


Dieser Vorgang wird nochmal detailliert beschrieben in den Constellation docs.

constellation config generate azure
constellation iam create azure --region=westus --resourceGroup=constellTest --servicePrincipal=spTest --update-config
constellation create -y
constellation init
export KUBECONFIG="$PWD/constellation-admin.conf"


Sie können jetzt mithilfe von kubectl oder anderen Tools eine Verbindung zum Cluster herstellen, indem Sie die automatisch generierte constellation-admin.conf verwenden. Die Konfiguration stellt sicher, dass die Verbindung "vertraulich" ist und im korrekten Cluster endet. Dadurch sind keine "Man-in-the-Middle"-Angriffe mehr möglich.


Installation von GitLab (automatisiert)


In unserer Beispielkonfiguration (Azure mit GoDaddy) haben wir einen benutzerdefinierten Helm-Chart bereitgestellt, welches GitLab installiert und external-dns im neu erstellten Cluster konfiguriert.


Obwohl dies auch manuell über das offizielle Helm-Chart von GitLab möglich ist, empfehlen wir die Verwendung des Helm-Charts von Edgeless Systems für einen schnelleren Überblick über den gesamten Prozess.

export GODADDY_API_KEY=<your creds here>
export GODADDY_SECRET_KEY=<your creds here>
export TARGET_DOMAIN=<your domain, e.g. gitlab.edgeless.systems>
export TLS_ISSUER_EMAIL=<your e-mail address>
export OWNER_ID= <your name here>


Mit Ihren Anmeldedaten können Sie nun die erforderlichen Helm-Befehle ausführen.


git clone https://github.com/edgelesssys/constellation-gitlab.git
cd constellation-gitlab
helm dependency update ./gitlab
helm upgrade gitlab-infra ./gitlab --install --namespace default --set infra.enabled=true --set apiKey=$GODADDY_API_KEY --set secretKey=$GODADDY_SECRET_KEY
helm upgrade gitlab-app ./gitlab --install --timeout 600s --set app.enabled=true --set gitlab.global.hosts.domain=$TARGET_DOMAIN --set gitlab.certmanager-issuer.email=$TLS_ISSUER_EMAIL --namespace gitlab --create-namespace



Installation abgeschlossen


Sie haben jetzt Ihr eigenes Confidential GitLab eingerichtet! Wenn der Vorgang abgeschlossen ist, erhalten Sie eine Nachricht mit Ihrer GitLab URL:


Hurray, GitLab on Constellation has been deployed!
It may take 5-10 minutes for all components to be set up completely.

Afterwards, you can access your GitLab instance here:
https://gitlab.example.test.com/


Ihr Code oder andere Notizen und Texte, die Sie in Ihr Repository hochladen, sind jederzeit verschlüsselt. Sie können die Demo von Edgeless Systems zum Confidential GitLab hier ansehen.


Was ist mit Benutzerverbindungen?


Servicenutzer sollten auch die Möglichkeit haben zu überprüfen, dass der Service vertraulich ist und es die korrekte Instanz ist, mit der sie kommunizieren.


Für browserbasierte Verbindungen ist derzeit die einzige Möglichkeit, den Fingerabdruck des TLS-Zertifikats manuell zu überprüfen. Im Fall unserer Demo-Instanz von GitLab unter https://gitlab.edgeless.systems/ ist der SHA-256-Fingerabdruck:

CB C2 F9 23 7B 46 66 FC 5B 88 70 D5 3C 73 24 98 B4 EC 1D 12 EC 38 85 8C FA A6 44 B2 43 73 34 18



Bei Verbindungen, welche auf der Git Kommandozeile basieren, ist es einfacher. Durch Hinzufügen des folgenden Eintrags zu unserer Gitconfig-Datei können wir sicherstellen, dass Git immer überprüft, ob das richtige Zertifikat vorhanden ist, wenn es mit https://gitlab.edgeless.systems/ abgestimmt wird:

[http "https://gitlab.edgeless.systems/"]
    pinnedPubkey = sha256//aZTzzCepU+Sa34+xkqyFGiWXG+/yHtF6Q5AgMMAjHhs=




Mit dieser Konfiguration können wir sicher sein, dass Befehle wie Git Clone https://gitlab.edgeless.systems/edgelesssys/constellation.git oder ein entsprechendes Git Push immer zu der korrekten vertraulichen Instanz von GitLab gehen. Befehle können nicht von einem Angreifer abgelenkt oder abgefangen werden, der die Host- oder DNS-Einträge von gitlab.edgeless.systems kontrolliert.

Lernen Sie mehr über Constellation


Schauen Sie sich die Constellation Docs doch näher an oder lesen Sie, wie Constellation genutzt wird, um Journalisten zu schützen.

Interessiert an weiteren Informationen?


Kontaktieren Sie uns für eine eingehende Präsentation von Constellation oder um die Möglichkeiten des Tooling‘s von Edgeless Systems zu entdecken.