> Frage 1: die Kontrollmaschine
Bei Userify (vollständige Offenlegung: Wir bieten tatsächlich Software zur Verwaltung von SSH-Schlüsseln an) kümmern wir uns ständig darum, da wir auch das größte SSH-Schlüssellager betreiben. Wir empfehlen im Allgemeinen eine lokale Installation, anstatt eine Cloud zu verwenden, da Sie die Kontrolle erhöht und die Oberfläche verkleinert haben. Sie können diese wirklich auf nur bekannte vertrauenswürdige Netzwerke beschränken.
Das Wichtigste ist, dass es in einem richtig aufgebauten System wie diesem wirklich keine wesentlichen Geheimnisse geben sollte, die einem Angreifer durchgesickert werden können . Wenn jemand einen Gabelstapler in Ihr Rechenzentrum fährt und mit Ihrem Server davonläuft, erhält er nicht viel außer einigen stark gehackten Passwörtern, wahrscheinlich einigen stark verschlüsselten Dateien und einigen öffentlichen Schlüsseln ohne die entsprechenden privaten Schlüssel. Mit anderen Worten, nicht so sehr.
Wie Sie bereits erwähnt haben, handelt es sich hierbei um die eigentlichen Bedrohungsvektoren, die auftreten , wenn ein Angreifer die Kontrolle über diesen Computer erlangt und damit seine eigenen Benutzerkonten und (öffentlichen) Schlüssel bereitstellt. Dies ist ein Risiko für praktisch jede Cloud-Plattform (z. B. Linode). Sie sollten sich am stärksten darauf konzentrieren, den Zugriff auf die Steuerungsebene zu verhindern. Dies bedeutet, die Angriffsfläche zu minimieren (nur einige Ports freizulegen und diese Ports so weit wie möglich zu sperren) und vorzugsweise Software zu verwenden, die gegen die Eskalation von Berechtigungen und verschiedene Angriffe geschützt ist ( SQL Injection, XSS, CSRF usw.) Aktivieren Sie den 2FA / MFA-Zugriff auf die Steuerebene und konzentrieren Sie sich darauf, diese Steuerebene so weit wie möglich zu sperren.
Ist es also besser, einen dedizierten Steuerungscomputer im Rechenzentrum oder einen Fernsteuerungscomputer (wie z. B. einen Laptop, der remote mit dem Rechenzentrum verbunden ist) zu haben?
Es ist definitiv besser , eine dedizierte Steuerungsmaschine in einem sicheren Rechenzentrum zu haben, da Sie diese isolieren und sperren können, um Diebstahl- oder unbefugte Zugriffe zu verhindern bzw. zu minimieren.
Wenn die beste Praxis ist meinen Laptop zu benutzen (was gestohlen werden könnte, natürlich, aber ich konnte meine öffentlichen Schlüssel sicher gespeichert online in der Cloud oder offline auf einem tragbares crypted Gerät hat), was , wenn ich brauche ein paar Web - Schnittstellen zu verwenden , mit Ansible, wie Ansible Tower, Semaphore, Rundeck oder Foreman, die auf einer zentralen Maschine im Rechenzentrum installiert werden müssen?
Sie müssen KEINE Webschnittstelle oder sekundäre Steuerungsebene ausführen, um Ihre Schlüssel (auch Userify) zu verwalten, bis Sie aufgrund einer größeren Anzahl von Benutzern und unterschiedlicher Berechtigungsstufen auf den Servern groß genug sind, um Verwaltungsprobleme zu lösen, oder zusätzliche benötigen Hand-Holding für Ihre Benutzer, die möglicherweise nicht über Kenntnisse oder Zugriff auf Ansible verfügen, um Schlüssel zu aktualisieren. Userify war anfangs nicht viel mehr als ein Bündel von Shell-Skripten (heute wären sie wahrscheinlich Ansible!), Und daran ist überhaupt nichts auszusetzen, bis Sie anfangen, zusätzliche Verwaltungskontrolle und einfache Möglichkeiten zum Verwalten / Drehen ihrer Skripten zu benötigen eigene Schlüssel. (Bitte schauen Sie sich Userify an, wenn Sie an diesem Punkt angelangt sind!)
Wie kann man es sichern und vermeiden, dass es zu einem "Single Point of Attack" wird?
Schauen Sie sich natürlich alle Ressourcen im Internet an, um die Dinge zu blockieren, aber am wichtigsten ist, dass Sie mit einer sicheren Grundlage beginnen:
1. Planen Sie Ihre Lösung von Anfang an mit Blick auf die Sicherheit. Wählen Sie Technologien (z. B. Datenbanken oder Sprachen), bei denen traditionell weniger Probleme aufgetreten sind, und programmieren Sie dann sicherheitshalber. Bereinigen Sie alle eingehenden Daten, auch von vertrauenswürdigen Benutzern. Paranoia ist eine Tugend.
2. Irgendwann wird alles kaputt. Minimieren Sie den Schaden, wenn er auftritt: Versuchen Sie, wie Sie bereits betont haben, den Umgang mit geheimem Material zu minimieren.
3. Halte es einfach. Machen Sie nicht die neuesten exotischen Dinge, es sei denn, Sie sind sicher, dass dies messbar und nachweislich Ihre Sicherheit erhöht. Zum Beispiel haben wir X25519 / NaCl (libsodium) anstelle von AES für unsere Verschlüsselungsschicht ausgewählt (wir verschlüsseln alles, in Ruhe und in Bewegung), weil es ursprünglich von einer vertrauenswürdigen Person (DJB et al.) Entwickelt und geschrieben wurde und von world rezensiert wurde renommierte Forscher wie Schneier und Googles Sicherheitsteam. Verwenden Sie Dinge, die zur Einfachheit neigen, wenn sie neuer sind, da es aufgrund der Einfachheit schwieriger ist, tiefe Fehler zu verbergen.
4. Sicherheitsstandards erfüllen. Auch wenn Sie nicht in ein Sicherheitsregime wie PCI oder die HIPAA-Sicherheitsregel fallen, lesen Sie diese Standards durch und finden Sie heraus, wie Sie sie einhalten können, oder zumindest sehr strenge Ausgleichskontrollen. Auf diese Weise stellen Sie sicher, dass Sie wirklich die 'Best Practices' erfüllen.
5. Führen Sie externe / unabhängige Penetrationstests durch und führen Sie Bug Bounties durch , um sicherzustellen, dass Sie diese Best Practices kontinuierlich befolgen . Alles sieht gut aus, bis Sie ein paar kluge und hochmotivierte Leute dazu bringen, darauf einzustoßen. Sobald dies erledigt ist, haben Sie großes Vertrauen in Ihre Lösung.
Frage 2: Die SSH-Schlüssel Was ist die beste Wahl: Lassen Sie Ansible den Root-Benutzer verwenden (mit seinem öffentlichen Schlüssel, der in ~/.ssh/authorized_keys
/ gespeichert ist), und lassen Sie den Ansible-Benutzer alle Befehle über sudo ausführen, wobei er ein Kennwort angibt (das jedem Sysadmin eindeutig bekannt sein muss) die Ansible verwendet, um diese Server zu steuern)
Versuchen Sie, die Verwendung von Kennwörtern auf Servern zu vermeiden, auch für sudo. Das hat mit Geheimnissen zu tun und untergräbt letztendlich Ihre Sicherheit (Sie können dieses sudo-Passwort nicht sehr leicht zwischen Maschinen variieren, Sie müssen es irgendwo speichern, das Passwort bedeutet, dass Sie keine Server-zu-Server-Automatisierung durchführen können, was wirklich ist Genau darum geht es. Wenn Sie SSH auf den Standardeinstellungen belassen, können diese Kennwörter brutal erzwungen werden, wodurch die Schlüssel etwas bedeutungslos werden. Vermeiden Sie außerdem die Verwendung des Root-Benutzers für beliebige Zwecke und insbesondere die Remote-Anmeldung.
Erstellen Sie einen nicht privilegierten Benutzer, der für Ansible mit sudo-Zugriff reserviert ist, und lassen Sie den Ansible-Benutzer alle Befehle über sudo ausführen, ohne ein Kennwort anzugeben
Genau. Ein nicht privilegierter Benutzer, den Sie mit sudo-Rollen auf ansible zurückführen können. Erstellen Sie im Idealfall einen Standardbenutzer für die Server-zu-Server- / Ansible-Kommunikation mit sudo-Zugriff (ohne Kennwort).
... NB, wenn Sie Userify verwenden, würde ich vorschlagen, einen Userify-Benutzer für ansible zu erstellen (Sie können dies auch nach Projekt oder Servergruppe aufteilen, wenn Sie mehrere ansible-Steuerungscomputer haben) einen SSH-Schlüssel auf dem Steuerungsserver und geben Sie seinen öffentlichen Schlüssel auf seiner Userify-Profilseite an. (Dieses Textfeld wird im Wesentlichen /home/ansible/.ssh/authorized_keys
). Sie sollten das ansible Systemkonto von anderen Server-zu-Server-Systemkonten wie einem Remote-Sicherungskonto, einer geheimen Verwaltung usw. getrennt halten. Laden Sie dann Ihre Mitarbeiter ein, damit diese ihre eigenen Schlüssel erstellen und verwalten können, und alles bleibt getrennt. Versuchen Sie jedoch, genau wie beim Sperren eines Ansible-Steuerungsservers, Ihren Userify-Server (oder die von Ihnen bereitgestellte Lösung) auf dieselbe Weise zu sperren.
irgendwelche anderen Hinweise?
Ich denke, du gehst das definitiv richtig an und stellst die richtigen Fragen. Wenn Sie über solche Dinge diskutieren möchten, senden Sie mir eine E-Mail (Vorname und Nachname bei userify), und ich würde mich über einen Chat freuen, egal in welche Richtung Sie letztendlich gehen. Viel Glück!