Best Practice für vertrauliche Informationen in der Quellcodeverwaltung


8

Ich weiß, dass dieses Thema viel behandelt wurde, aber ich kann keine Antwort auf meine spezifische Situation finden.

Derzeit verwende ich .gitignore, um vertrauliche Inhalte auszuschließen und separat (Konfigurationsdateien usw.) aufzubewahren. Da sich meine Codebasis in immer mehr Projekte erweitert, wird dies immer schwieriger zu verwalten und ich habe auch keine wirkliche Möglichkeit, Änderungen zu verfolgen oder die Dateien ordnungsgemäß zu sichern.

Es gibt einige Werkzeuge für dieses Problem, wie git-secret, Hashicorp Vaultund git-cryptdoch keines dieser Arbeit unter Windows, wo ich alles meiner Entwicklung zu tun (aus verschiedenen Gründen).

Derzeit bin ich der einzige Entwickler in meinem Unternehmen, der keine Expansionspläne hat. Die Quellcodeverwaltung (Gitlab) wird hauptsächlich für meine eigene Referenz und die Fähigkeit verwendet, Änderungen aufzuzeichnen. Wäre es ein großes Problem oder Risiko, ein paar Verbindungszeichenfolgen oder Konfigurationsdateien in die Quellcodeverwaltung zu verschieben? Diese Informationen befinden sich derzeit ungesichert auf einem Netzwerklaufwerk (mit Ausnahme von NTFS-Berechtigungen).

Ich habe die Idee, dass die beste Vorgehensweise darin besteht, dieses Material nicht zur Quellcodeverwaltung zu verschieben, aber ich habe eine privat gehostete Gitlab-Instanz, die außerhalb des lokalen Netzwerks nicht zugänglich ist. Bedeutet dies, dass das Risiko geringer ist?


Warum können Sie Hashicorp Vault unter Windows nicht verwenden? Die offizielle Download-Seite enthält eine Binärdatei für Windows: vaultproject.io/downloads.html
VaaChar

Git-Secret unterstützt auch Windows Bash: github.com/sobolevn/git-secret/pull/123
VaaChar

Oh cool, das war nicht auf der Haupt-Git-Secret-Website. Ich werde es versuchen
Syntaxfehler

Was genau nehmen Sie in Ihre sensiblen Konfigurationen auf? Wenn es sich um Passwörter handelt, müssen Sie die Optionen prüfen, um zu vermeiden, dass Passwörter insgesamt benötigt werden.
Berin Loritsch

1
Es gibt eine Geschichte, die die Runde um einen Mann dreht, dem AWS 14.000 US-Dollar in Rechnung gestellt wurden, weil er seine Schlüssel in der privaten Versionskontrolle gespeichert hat, sie aber 10 Minuten lang öffentlich auf Github veröffentlicht hat, um sie mit einem Freund zu teilen.
Karl Bielefeldt

Antworten:


5

Ganzheitlich betrachtet gibt es mehrere Dinge zu beachten:

  • Wird der GitLab-Server im selben Netzwerk wie die Zielumgebung gehostet?
  • Haben Sie Benutzernamen und Passwörter in Ihren Konfigurationsdateien?
  • Können Sie die Sicherheitskonfiguration von der normalen Anwendungskonfiguration trennen?

Das erste Anliegen hat mit der Politik zu tun. Wenn die Software in einem separaten Netzwerk bereitgestellt wird, können Richtlinienprobleme auftreten, selbst wenn Ihre Konfigurationen verschlüsselt sind.

Vermeiden sensibler Informationen

Seien Sie genau darüber, was empfindlich ist. Beispielsweise ist der Domänenname eines Servers möglicherweise nicht vertraulich, die IP-Adresse jedoch möglicherweise (oder die Zuordnung der beiden). In der Regel sind Benutzernamen und Kennwörter sowie Client-IDs und geheime Schlüssel (OAuth2) vertraulich.

Ihre besten Optionen sind:

  • Verwenden Sie Verbindungszeichenfolgen, für die kein Benutzername / Kennwort erforderlich ist (siehe unten).
  • Trennen Sie vertrauliche Informationen von der Haupt-Web.config
  • Verwenden Sie das Dateiattribut in AppSettings , um eine externe Konfigurationsdatei zu lesen

In einigen Datenbanken können Sie eine Verbindungszeichenfolge verwenden, bei der Benutzername und Kennwort nicht Teil des Inhalts sind. Sie können Ihre App beispielsweise unter einem Domänendienstkonto ausführen, um mithilfe integrierter Sicherheit eine Verbindung zu SQL Server herzustellen. Sie können auch Oracle Wallet verwenden, um den Benutzernamen / das Kennwort auf dem Zielcomputer geheim zu halten. Bei einigen OAuth2-Diensten können Sie eine CSV- oder JSON-Datei verwenden, die auf dem Computer an einem Standardspeicherort gespeichert ist.

Mit anderen Worten, tun Sie alles, um zu vermeiden, dass vertrauliche Informationen dort aufbewahrt werden, wo sie nicht hingehören. Wenn Sie Änderungen an Ihrer App vornehmen müssen, um an einem Speicherort auf der Festplatte nach den vertraulichen Bits zu suchen, können Sie diese einmal auf jedem Zielserver einrichten und einfach aus Ihrer App lesen.

Konfigurationsserver

Steeltoe hat bestimmte Spring-Integrationsbibliotheken nach C # portiert und unterstützt sogar Spring Cloud Config- Server. Der Spring Cloud Config-Server erfordert ein Git-Repository im Bereitstellungsnetzwerk , ermöglicht es Ihnen jedoch, die Konfiguration dort anzupassen, wo sie benötigt wird. Wenn Ihre Anwendung komplex genug ist (z. B. Mikrodienste), sollten Sie dies prüfen, um die Servernamen in derselben Umgebung zu schützen, in der sich die Server befinden.

Endeffekt

Sie möchten nur die Notwendigkeit vertraulicher Informationen so weit wie möglich vermeiden, aber die nicht vertraulichen Konfigurationen in der Quellcodeverwaltung beibehalten. Wenn Sie den Benutzernamen / das Kennwort in Ihrer Konfigurationsdatei nicht vermeiden können (dh eine andere Datenbank, die nicht der integrierten Sicherheit entspricht), laden Sie nur ein kleines Stück aus einer externen Datei.


2

Der beste Ort zum Speichern vertraulicher Informationen ist ein speziell erstellter Speicher, Hashicorp Vaultder Windows unterstützt.

Wenn Sie dies (aus welchen Gründen auch immer) nicht verwenden können, können Sie git-secretauch Windows verwenden, das auch Windows unterstützt. git-secretIn dieser PR wurde Unterstützung für Windows hinzugefügt : https://github.com/sobolevn/git-secret/pull/123

git-crypt hat auch experimentelle Unterstützung für Windows:

https://github.com/AGWA/git-crypt/wiki/Installation

/programming/43040370/how-to-install-git-crypt-in-windows

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.