Lambda-Rotationsfunktionen - AWS Secrets Manager

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Lambda-Rotationsfunktionen

Rotation durch Lambda-FunktionIn einer Lambda-Funktion wird das Geheimnis rotiert. Secrets Manager verwendet Staging-Bezeichnungen, um Secret-Versionen während der Drehung zu kennzeichnen.

Wenn Secrets Manager keine Rotationsfunktionsvorlage für Ihren Geheimtyp bereitstellt, können Sie eine Rotationsfunktion erstellen. Folgen Sie beim Schreiben einer Rotationsfunktion den Anweisungen für jeden Schritt.

Tipps zum Schreiben Ihrer eigenen Rotationsfunktion
  • Verwenden Sie die generische Rotationsvorlage als Ausgangspunkt, um Ihre eigene Rotationsfunktion zu schreiben.

  • Wenn Sie Ihre Funktion schreiben, sollten Sie bei den Debugging- oder Protokollierungsanweisungen vorsichtig sein. Diese Anweisungen können dazu führen, dass Informationen in Ihrer Funktion an Amazon geschrieben werden. Sie müssen also sicherstellen CloudWatch, dass das Protokoll keine sensiblen Informationen enthält, die während der Entwicklung gesammelt wurden.

    Beispiele für Protokollanweisungen finden Sie im AWS Secrets Manager Vorlagen für Rotationsfunktionen-Quellcode.

  • Aus Sicherheitsgründen erlaubt Secrets Manager nur eine Lambda-Rotationsfunktion, um das Geheimnis direkt zu rotieren. Die Rotationsfunktion kann keine zweite Lambda-Funktion aufrufen, um das Geheimnis zu rotieren.

  • Vorschläge zum Debuggen finden Sie unter Testen und Debuggen von Serverless Anwendungen.

  • Wenn Sie externe Binärdateien und Bibliotheken verwenden, um beispielsweise eine Verbindung zu einer Ressource herzustellen, müssen Sie sich darum kümmern, diese zu patchen und zu behalten. up-to-date

  • Speichern Sie Ihre Rotationsfunktion in einer Datei ZIP my-function.zip zusammen mit allen erforderlichen Abhängigkeiten.

Vier Schritte in einer Rotationsfunktion

create_secret: Erstelle eine neue Version des Secrets

Die Methode prüft create_secret zunächst, ob ein Geheimnis existiert, indem sie get_secret_valuemit dem übergebenen aufruft. ClientRequestToken Wenn es kein Geheimnis gibt, erstellt sie ein neues Geheimnis mit create_secretund dem Token als. VersionId Dann generiert es einen neuen geheimen Wert mit get_random_password. Als Nächstes wird es aufgerufen put_secret_value, um es mit dem Staging-Label AWSPENDING zu speichern. Das Speichern des neuen geheimen Werts in AWSPENDING trägt zur Sicherstellung der Idempotenz bei. Wenn die Drehung aus irgendeinem Grund fehlschlägt, können Sie in nachfolgenden Aufrufen auf diesen geheimen Wert verweisen. Weitere Informationen finden Sie unter How do I make my Lambda function idempotent (Wie mache ich meine Lambda-Funktion idempotent?).

Tipps zum Schreiben Ihrer eigenen Rotationsfunktion
  • Stellen Sie sicher, dass der neue geheime Wert nur Zeichen enthält, die für die Datenbank oder den Dienst gültig sind. Schließen Sie Zeichen mithilfe des ExcludeCharacters-Parameters aus.

  • Verwenden Sie beim Testen Ihrer Funktion die Versionsstufen, AWS CLI um sich die Versionsstufen anzusehen: aufrufen describe-secretund ansehenVersionIdsToStages.

  • Für Amazon RDS My SQL erstellt Secrets Manager in abwechselnder Benutzerrotation einen geklonten Benutzer mit einem Namen, der nicht länger als 16 Zeichen ist. Sie können die Rotationsfunktion ändern, um längere Benutzernamen zuzulassen. Meine SQL Version 5.7 und höher unterstützt Benutzernamen mit bis zu 32 Zeichen, Secrets Manager fügt jedoch „_clone“ (sechs Zeichen) an das Ende des Benutzernamens an, sodass Sie den Benutzernamen auf maximal 26 Zeichen beschränken müssen.

set_secret: Ändern Sie die Anmeldeinformationen in der Datenbank oder im Dienst

Die Methode set_secret ändert die Anmeldeinformationen in der Datenbank oder im Dienst so, dass sie dem neuen geheimen Wert in der AWSPENDING Version des Geheimnisses entsprechen.

Tipps zum Schreiben Ihrer eigenen Rotationsfunktion
  • Wenn Sie Anweisungen an einen Dienst übergeben, der Anweisungen interpretiert, z. B. an eine Datenbank, verwenden Sie die Abfrageparametrisierung. Weitere Informationen finden Sie auf der Website unter Cheat Sheet zur Parametrisierung von Abfragen. OWASP

  • Die Drehungsfunktion ist ein privilegierter Stellvertreter, der berechtigt ist, auf Kundenanmeldeinformationen sowohl im Secrets-Manager-Secret als auch in der Zielressource zuzugreifen und diese zu ändern. Um einen möglichen verwirrten Stellvertreterangriff zu verhindern, müssen Sie sicherstellen, dass ein Angreifer die Funktion nicht verwenden kann, um auf andere Ressourcen zuzugreifen. Bevor Sie die Anmeldeinformationen aktualisieren:

    • Überprüfen Sie, ob die Anmeldeinformationen in der AWSCURRENT-Version des Secrets gültig sind. Wenn die AWSCURRENT-Anmeldeinformationen nicht gültig sind, brechen Sie den Drehungsversuch ab.

    • Stellen Sie sicher, dass die geheimen Werte AWSPENDING und AWSCURRENT für dieselbe Ressource gelten. Überprüfen Sie für einen Benutzernamen und ein Passwort, ob die AWSCURRENT- und AWSPENDING-Benutzernamen identisch sind.

    • Stellen Sie sicher, dass die Ziel-Service-Ressource identisch ist. Überprüfen Sie bei einer Datenbank, ob die Hostnamen AWSCURRENT und AWSPENDING identisch sind.

  • In seltenen Fällen möchten Sie möglicherweise eine vorhandene Rotationsfunktion für eine Datenbank anpassen. Bei abwechselnder Benutzerrotation erstellt Secrets Manager beispielsweise den geklonten Benutzer, indem er die Laufzeitkonfigurationsparameter des ersten Benutzers kopiert. Wenn Sie mehr Attribute hinzufügen oder ändern möchten, welche dem geklonten Benutzer gewährt werden, müssen Sie den Code in der set_secret-Funktion aktualisieren.

test_secret: Testen Sie die neue geheime Version

Als Nächstes testet die Lambda-Rotationsfunktion die AWSPENDING-Version des Secrets, indem es für den Zugriff auf die Datenbank oder den Service verwendet wird. Rotationsfunktionen basierend auf Folgendem: Rotationsfunktionsvorlagen testen das neue Secret mit Lesezugriff.

finish_secret: Beende die Rotation

Schließlich verschiebt die Lambda-Rotationsfunktion das Label AWSCURRENT von der vorherigen geheimen Version in diese Version, wodurch auch das AWSPENDING Label im selben API Aufruf entfernt wird. Secrets Manager fügt der vorherigen Version die AWSPREVIOUS-Staging-Bezeichnung hinzu, sodass Sie die letzte als funktionierend bekannte Version des Secret behalten.

Die Methode finish_secret verwendet update_secret_version_stage, um das Staging-Label AWSCURRENT von der vorherigen geheimen Version in die neue geheime Version zu verschieben. Secrets Manager fügt der vorherigen Version die AWSPREVIOUS-Staging-Bezeichnung automatisch hinzu, sodass Sie die letzte als funktionierend bekannte Version des Secret behalten.

Tipps zum Schreiben Ihrer eigenen Rotationsfunktion
  • Entfernen Sie es nicht AWSPENDING vor diesem Zeitpunkt und entfernen Sie es nicht mit einem separaten API Aufruf, da dies Secrets Manager darauf hinweisen kann, dass die Rotation nicht erfolgreich abgeschlossen wurde. Secrets Manager fügt der vorherigen Version die AWSPREVIOUS-Staging-Bezeichnung hinzu, sodass Sie die letzte als funktionierend bekannte Version des Secret behalten.

Wenn die Rotation erfolgreich ist, wird die AWSPENDING-Staging-Bezeichnung möglicherweise an dieselbe Version wie die AWSCURRENT-Version angehängt oder wird möglicherweise keiner Version zugeordnet. Wenn die AWSPENDING-Staging-Bezeichnung zwar vorhanden, aber nicht derselben Version zugeordnet ist wie AWSCURRENT, wird bei jedem späteren Aufruf der Rotation davon ausgegangen, dass eine vorherige Rotationsanforderung noch in Bearbeitung ist, und es wird ein Fehler zurückgegeben. Wenn die Rotation nicht erfolgreich ist, wird die AWSPENDING-Staging-Bezeichnung möglicherweise an eine leere Secret-Version angehängt. Weitere Informationen finden Sie unter Fehlerbehebung bei der Rotation.