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. Nutzer solcher Plattformen können nicht nachvollziehen, wer auf ihre Repositories zugreifen kann. Hacker oder böswillige Insider könnten Zugang zu privaten Repositories erlangen. 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.
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, kann Confidential Computing sogar komplexe Anwendungen vor der Cloud-Infrastruktur abschirmen. Wenn Workloads auf diese Weise geschützt sind, können nicht einmal Systemadministratoren, Mitarbeiter von Cloud-Anbietern oder privilegierte Angreifer darauf 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 weder der Cloud-Anbieter noch Angreifer, die über die Infrastruktur kommen, darauf zugreifen können.
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.
Anleitung: 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 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:
- Einrichten von Constellation
- Einrichten der Domain
- 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 Kommandozeile] (https://docs.edgeless.systems/constellation/getting-started/install?__hstc=76629258.36f1e41757ee4337685795737973df31.1693492158346.1694502209186.1694685676962.25&__hssc=76629258.3.1694685676962&__hsfp=3654297906).
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 richtigen Cluster endet. Dadurch wird sichergestellt, dass kein "Man-in-the-Middle"-Angriff möglich ist.
Installation von GitLab (automatisiert)
In unserer Beispielkonfiguration (Azure mit GoDaddy) haben wir einen benutzerdefiniertes 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 System 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 Möglichkeiten haben zu überprüfen, dass der Service vertraulich ist und es die richtige 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 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 richtigen 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.
Erfahren Sie mehr über Constellation
Tauchen Sie tiefer in die Constellation-Dokumentation ein oder erfahren Sie, wie Constellation verwendet wird, um Journalisten zu schützen.
Kontakt
Kontaktieren Sie uns für eine umfassende Präsentation von Constellation oder um die Lösungen von Edgeless Systems kennenzulernen.