Wie speichere ich verschlüsselte Geheimnisse im Code für ein serverless.com-Projekt?

12

Mit serverless.com können Sie ein Geheimnis am einfachsten einer AWS Lambda-Funktion aussetzen, indem Sie es in der serverless.ymlDatei speichern (z. B. mit KMS verschlüsselt).

Aber verschlüsselte Geheimnisse an Git zu übergeben, ist nicht das Beste auf der Welt. Erfordert zum einen Codeänderungen, wenn sich das Geheimnis ändern muss.

Aber was sind allein in Bezug auf die Sicherheit bessere Alternativen? zB könnte das Geheimnis in S3 (verschlüsselt) gespeichert werden, wobei der Lambda Zugriff auf diesen Speicherort und den KMS-Schlüssel erhält, aber ist das tatsächlich in irgendeiner sinnvollen Weise besser?

Assaf Lavie
quelle
Diese semantische Gymanstik der Meinungsphobie interessiert mich nicht.
Assaf Lavie

Antworten:

7

Hier sind einige Elemente zu beachten:

  1. Es ist wertvoll, die Konfiguration mit einer vom zu konfigurierenden Code getrennten Release-Trittfrequenz verwalten zu können. Dies fördert die automatisierte Rotation von Anmeldeinformationen und macht sie regelmäßig schmerzlos.

  2. Unter dem Gesichtspunkt "Infrastruktur als Code" ist es durchaus sinnvoll, die gesamte Konfiguration in Git zu speichern, wenn auch wahrscheinlich in einem anderen Repository, da der Konfigurationsumfang wahrscheinlich mehr als einen Dienst umfasst.

  3. Unter der Annahme, dass beide oben genannten Aussagen für Ihre Situation relevant sind, würde ich die Daten gerne mit KMS verschlüsseln und in S3 oder DynamoDB speichern. Ich würde sogar so weit gehen zu sagen, dass es in sehr einfachen Situationen geeignet sein könnte, die Daten in KMS selbst zu verschlüsseln und zu speichern.

Es gibt mehrere Open Source-Bibliotheken, die diesen Vorgang unterstützen:

Richard Slater
quelle
1

Normalerweise behandle ich Geheimnisse als Konfigurationsdaten im Umfang. Als solches lebt es nicht neben dem Code, da sie von verschiedenen Release-Zeitplänen und -Prozessen behandelt werden. Ein separates Git Repo, KMS, Dynamo, S3 oder in Ihrem Konfigurationsverwaltungssystem (Chef-Vault / verschlüsselte Datenbank in der Chef-Welt) sind gute Orte. Grundsätzlich möchten Sie keine neue Version Ihrer Software erstellen und bereitstellen müssen, um ein Geheimnis zu aktualisieren.

Wenn Ihre Anforderungen an die Verwaltung von Geheimnissen komplexer sind, ist Hasicorp Vault ( https://github.com/hashicorp/vault ) eine gute Option.

Matt
quelle