Fehlerbehebung bei AWS Secrets Manager Rotation - 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.

Fehlerbehebung bei AWS Secrets Manager Rotation

Für viele Services verwendet Secrets Manager eine Lambda-Funktion, um Secrets zu rotieren. Weitere Informationen finden Sie unter Rotation durch Lambda-Funktion. Die Lambda-Drehungsfunktion interagiert mit der Datenbank oder dem Service, für den das Secret bestimmt ist, sowie mit dem Secrets Manager. Wenn die Rotation nicht wie erwartet funktioniert, sollten Sie zuerst die CloudWatch Protokolle überprüfen.

Anmerkung

Einige Services können Services für Sie verwalten, einschließlich der Verwaltung der automatischen Rotation. Weitere Informationen finden Sie unter Verwaltete Rotation von AWS Secrets Manager Geheimnissen.

Wie behebt man geheime Rotationsfehler in AWS Lambda Funktionen

Wenn bei Ihren Lambda-Funktionen geheime Rotationsfehler auftreten, gehen Sie wie folgt vor, um das Problem zu beheben und zu lösen.

Mögliche Ursachen

  • Unzureichende gleichzeitige Ausführungen für die Lambda-Funktion

  • Rennbedingungen aufgrund mehrerer API-Aufrufe während der Rotation

  • Falsche Lambda-Funktionslogik

  • Netzwerkprobleme zwischen der Lambda-Funktion und der Datenbank

Allgemeine Schritte zur Fehlerbehebung

  1. CloudWatch Logs analysieren:

    • Suchen Sie in den Lambda-Funktionsprotokollen nach bestimmten Fehlermeldungen oder unerwartetem Verhalten

    • Stellen Sie sicher, dass alle Rotationsschritte (CreateSecretSetSecret,TestSecret,,FinishSecret) versucht wurden

  2. API-Aufrufe während der Rotation überprüfen:

    • Vermeiden Sie mutierende API-Aufrufe des Secrets während der Lambda-Rotation

    • Stellen Sie sicher, dass zwischen beiden Aufrufen keine Wettlaufbedingungen bestehen RotateSecret PutSecretValue

  3. Überprüfen Sie die Lambda-Funktionslogik:

    • Vergewissern Sie sich, dass Sie den neuesten AWS Beispielcode für die geheime Rotation verwenden

    • Wenn Sie benutzerdefinierten Code verwenden, überprüfen Sie ihn auf die korrekte Handhabung aller Rotationsschritte

  4. Überprüfen Sie die Netzwerkkonfiguration:

    • Überprüfen Sie, ob Sicherheitsgruppenregeln der Lambda-Funktion den Zugriff auf die Datenbank ermöglichen

    • Stellen Sie den richtigen VPC-Endpunkt- oder öffentlichen Endpunktzugriff für Secrets Manager sicher

  5. Testen Sie geheime Versionen:

    • Stellen Sie sicher, dass die AWSCURRENT Version des Secrets den Datenbankzugriff ermöglicht

    • Prüfen Sie, AWSPREVIOUS ob AWSPENDING unsere Versionen gültig sind

  6. Ausstehende Rotationen löschen:

    • Wenn die Rotation immer wieder fehlschlägt, löschen Sie das AWSPENDING Staging-Label und versuchen Sie es erneut

  7. Überprüfen Sie die Lambda-Parallelitätseinstellungen:

    • Stellen Sie sicher, dass die Parallelitätseinstellungen für Ihren Workload geeignet sind

    • Wenn Sie Probleme mit der Parallelität vermuten, finden Sie weitere Informationen im Abschnitt „Behebung von Rotationsfehlern im Zusammenhang mit der Parallelität“

Keine Aktivität nach „Anmeldeinformationen in Umgebungsvariablen gefunden“

Wenn nach „Anmeldeinformationen in Umgebungsvariablen gefunden“ keine Aktivität vorhanden ist und die Aufgabendauer lang ist, z. B. das standardmäßige Lambda-Timeout von 30 000 ms, kann es bei der Lambda-Funktion zu einem Timeout kommen, während versucht wird, den Secrets-Manager-Endpunkt zu erreichen.

Die Lambda-Drehungsfunktion muss auf einen Secrets-Manager-Endpunkt zugreifen können. Wenn Ihre Lambda-Funktion auf das Internet zugreifen kann, können Sie einen öffentlichen Endpunkt verwenden. Informationen zum Suchen nach einem Endpunkt finden Sie unter AWS Secrets Manager Endpunkte.

Wenn Ihre Lambda-Funktion in einer VPC ausgeführt wird, die keinen Internetzugang hat, empfehlen wir Ihnen, private Endpunkte des Secrets-Manager-Services in Ihrer VPC zu konfigurieren. Ihre VPC kann dann Anfragen abfangen, die an den öffentlichen regionalen Endpunkt gerichtet sind und sie an den privaten Endpunkt umleiten. Weitere Informationen finden Sie unter VPC-Endpunkte (AWS PrivateLink).

Sie können alternativ Ihre Lambda-Funktion so konfigurieren, dass sie auf den öffentlichen Secrets-Manager-Endpunkt zugreifen kann, indem Sie ein NAT-Gateway oder ein Internet-Gateway zu Ihrer VPC hinzufügen. Auf diese Weise kann Datenverkehr von Ihrer VPC den öffentlichen Endpunkt erreichen. Für Ihre VPC ergibt sich dabei ein Risiko, da es eine IP-Adresse für das Gateway gibt, die aus dem öffentlichen Internet angegriffen werden kann.

Keine Aktivität nach „createSecret“

Die folgenden Probleme können dazu führen, dass die Rotation nach createSecret gestoppt wird:

Das VPC-Netzwerk lässt ACLs keinen eingehenden und ausgehenden HTTPS-Verkehr zu.

Weitere Informationen finden Sie unter Steuern des Datenverkehrs zu Subnetzen mithilfe des Netzwerks ACLs im Amazon VPC-Benutzerhandbuch.

Die Timeout-Konfiguration der Lambda-Funktion ist zu kurz, um die Aufgabe auszuführen.

Weitere Informationen finden Sie unter Konfigurieren von Lambda-Funktionsoptionen im AWS Lambda -Entwicklerhandbuch.

Der Secrets Manager VPC-Endpunkt lässt die CIDRs VPC beim Eindringen in die zugewiesenen Sicherheitsgruppen nicht zu.

Weitere Informationen finden Sie unter Control traffic to resources using security groups (Kontrollieren des Datenverkehrs zu Ressourcen mithilfe von Sicherheitsgruppen) im Benutzerhandbuch von Amazon VPC.

Der VPC-Endpunkt des Secrets Managers erlaubt Lambda nicht, den VPC-Endpunkt zu verwenden.

Weitere Informationen finden Sie unter Verwenden eines AWS Secrets Manager VPC-Endpunkts.

Das Secret verwendet die Rotation alternierender Benutzer, das Superuser-Secret wird von Amazon RDS verwaltet und die Lambda-Funktion kann nicht auf die RDS-API zugreifen.

Für die Rotation wechselnder Benutzer, bei der das Superuser-Secret von einem anderen AWS -Service verwaltet wird, muss die Lambda-Rotationsfunktion in der Lage sein, den Serviceendpunkt aufzurufen, um die Datenbankverbindungsinformationen abzurufen. Wir empfehlen die Konfiguration eines VPC-Endpunkts für den Datenbankservice. Weitere Informationen finden Sie unter:

Fehler: „Zugriff auf KMS ist nicht zulässig“

Wenn Ihnen ClientError: An error occurred (AccessDeniedException) when calling the GetSecretValue operation: Access to KMS is not allowed angezeigt wird, ist die Rotationsfunktion nicht berechtigt, das Secret mit dem KMS-Schlüssel, der zur Verschlüsselung des Secrets verwendet wurde, zu entschlüsseln. Möglicherweise enthält die Berechtigungsrichtlinie eine Bedingung, die den Verschlüsselungskontext auf ein bestimmtes Secret beschränkt. Informationen zu den erforderlichen Berechtigungen finden Sie unter Richtlinienanweisung für einen kundenverwalteten Schlüssel.

Fehler: „Key is missing from secret JSON“ (Schlüssel fehlt in Secret-JSON)

Für eine Lambda-Rotationsfunktion muss sich der Secret-Wert in einer bestimmten JSON-Struktur befinden. Wenn Sie diesen Fehler sehen, fehlt dem JSON möglicherweise ein Schlüssel, auf den die Rotationsfunktion zugreifen wollte. Hinweise zur JSON-Struktur für die einzelnen Arten von Secrets finden Sie unter JSON-Struktur von AWS Secrets Manager Geheimnissen .

Fehler: „setSecret: Unable to log into database“ (setSecret: Anmeldung in Datenbank nicht möglich)

Die folgenden Probleme können diesen Fehler verursachen:

Die Rotationsfunktion kann nicht auf die Datenbank zugreifen.

Wenn die Aufgabendauer lang ist, z. B. über 5 000 ms, kann die Lambda-Rotationsfunktion möglicherweise nicht über das Netzwerk auf die Datenbank zugreifen.

Wenn Ihre Datenbank oder Ihr Service auf einer EC2 Amazon-Instance in einer VPC ausgeführt wird, empfehlen wir Ihnen, Ihre Lambda-Funktion so zu konfigurieren, dass sie in derselben VPC ausgeführt wird. Dann kann die Drehungsfunktion direkt mit Ihrem Service kommunizieren. Weitere Informationen finden Sie unter Konfigurieren des VPC-Zugriffs.

Um der Lambda-Funktion den Zugriff auf die Datenbank oder den Service zu ermöglichen, müssen Sie sicherstellen, dass die Sicherheitsgruppen, die an Ihre Lambda-Drehungsfunktion angeschlossen sind, ausgehende Verbindungen zur Datenbank oder zum Service zulassen. Sie müssen darüber hinaus sicherstellen, dass die Sicherheitsgruppen, die an Ihre Datenbank oder Ihren Service angefügt sind, eingehende Verbindungen von der Lambda-Drehungsfunktion zulassen.

Die Anmeldeinformationen im Secret sind falsch.

Wenn die Aufgabendauer kurz ist, kann sich die Lambda-Drehungsfunktion möglicherweise nicht mit den Anmeldeinformationen im Secret authentifizieren. Überprüfen Sie die Anmeldeinformationen, indem Sie sich mithilfe des Befehls manuell mit den Informationen in der AWSCURRENT und der AWSPREVIOUS Version des Secrets anmelden. AWS CLI get-secret-value

Die Datenbank verwendet scram-sha-256 zum Verschlüsseln der Passwörter.

Wenn Ihre Datenbank Aurora PostgreSQL Version 13 oder höher ist und scram-sha-256 zur Verschlüsselung verwendet, die Rotationsfunktion jedoch libpq Version 9 oder eine ältere Version verwendet, die scram-sha-256 nicht unterstützt, kann die Rotationsfunktion keine Verbindung zur Datenbank herstellen.

Um festzustellen, welche Datenbankbenutzer scram-sha-256-Verschlüsselung verwenden
Um festzustellen, welche Version von libpq Ihre Rotationsfunktion verwendet
  1. Navigieren Sie auf einem Linux-Computer in der Lambda-Konsole zu Ihrer Rotationsfunktion und laden Sie das Bereitstellungspaket herunter. Entpacken Sie die Zip-Datei in ein Arbeitsverzeichnis.

  2. Führen Sie in einer Befehlszeile im Arbeitsverzeichnis Folgendes aus:

    readelf -a libpq.so.5 | grep RUNPATH

  3. Wenn Sie die Zeichenfolge PostgreSQL-9.4.x oder eine Hauptversion unter 10 sehen, unterstützt die Rotationsfunktion scram-sha-256 nicht.

    • Ausgabe für eine Rotationsfunktion, die scram-sha-256 nicht unterstützt:

      0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild-a1b2c/workspace/build/PostgreSQL/PostgreSQL-9.4.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild-a1b2c/workspace/src/PostgreSQL/build/private/install/lib]

    • Ausgabe für eine Rotationsfunktion, die scram-sha-256 unterstützt:

      0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild-a1b2c/workspace/build/PostgreSQL/PostgreSQL-10.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild-a1b2c/workspace/src/PostgreSQL/build/private/install/lib]

    • Ausgabe für eine Rotationsfunktion, die scram-sha-256 unterstützt:

      0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild- a1b2c /workspace/build/PostgreSQL/PostgreSQL-14.x_client_only. 123456 .0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild- a1b2c /workspace/src/PostgreSQL/build/private/install/lib]

    • Ausgabe für eine Rotationsfunktion, die scram-sha-256 unterstützt:

      0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild- a1b2c/workspace/build/PostgreSQL/PostgreSQL- 14.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil- path/build.libfarm/lib:/local/p4clients/pkgbuild- a1b2c/workspace/src/PostgreSQL/build/private/install/lib]

Anmerkung

Wenn Sie vor dem 30. Dezember 2021 die automatische Rotation von Geheimnissen eingerichtet haben, unterstützt scram-sha-256 Ihre Rotationsfunktion in einer früheren Version libpq diese Funktion nicht. Um scram-sha-256 zu unterstützen, müssen Sie Ihre Rotationsfunktion neuerstellen.

Die Datenbank benötigt SSL/TLS Zugriff.

Wenn Ihre Datenbank eine SSL/TLS Verbindung benötigt, die Rotationsfunktion jedoch eine unverschlüsselte Verbindung verwendet, kann die Rotationsfunktion keine Verbindung mit der Datenbank herstellen. Rotationsfunktionen für Amazon RDS (außer Oracle und Db2) und Amazon DocumentDB verwenden automatisch Secure Socket Layer (SSL) oder Transport Layer Security (TLS), um eine Verbindung zu Ihrer Datenbank herzustellen, wenn sie verfügbar ist. Andernfalls verwenden sie eine unverschlüsselte Verbindung.

Anmerkung

Wenn Sie die automatische geheime Rotation vor dem 20. Dezember 2021 eingerichtet haben, basiert Ihre Rotationsfunktion möglicherweise auf einer früheren VorlageSSL/TLS. To support connections that use SSL/TLS, die nicht unterstützt wurde. Sie müssen Ihre Rotationsfunktion neu erstellen.

So bestimmen Sie, wann Ihre Rotationsfunktion erstellt wurde
  1. Öffnen Sie in der Secrets Manager Manager-Konsole https://console.aws.amazon.com/secretsmanager/Ihr Geheimnis. Im Abschnitt Rotationskonfiguration sehen Sie unter Lambda-Rotationsfunktion den ARN der Lambda-Funktion, zum Beispiel arn:aws:lambda:aws-region:123456789012:function:SecretsManagerMyRotationFunction . Kopieren Sie in diesem Beispiel den Funktionsnamen vom Ende des ARN, z. B. SecretsManagerMyRotationFunction .

  2. Fügen Sie in der AWS Lambda Konsole https://console.aws.amazon.com/lambda/unter Funktionen Ihren Lambda-Funktionsnamen in das Suchfeld ein, klicken Sie auf Enter und wählen Sie dann die Lambda-Funktion aus.

  3. Kopieren Sie auf der Funktionsdetailseite auf der Registerkarte Konfiguration unter Tags, den Wert neben den Schlüssel aws:cloudformation:stack-name.

  4. Fügen Sie in der AWS CloudFormation Konsole https://console.aws.amazon.com/cloudformation unter Stacks den Schlüsselwert in das Suchfeld ein und wählen Sie dann Enter.

  5. Die Liste der Stacks wird so gefiltert, dass nur der Stack angezeigt wird, der die Lambda-Rotationsfunktion erstellt hat. In der Spalte Erstellungsdatum sehen Sie das Datum, an dem der Stack erstellt wurde. Dies ist das Datum, an dem die Lambda-Rotationsfunktion erstellt wurde.

Fehler: „Modul ‚lambda_function‘ konnte nicht importiert werden“

Dieser Fehler kann auftreten, wenn Sie eine frühere Lambda-Funktion ausführen, die automatisch von Python 3.7 auf eine neuere Version von Python aktualisiert wurde. Um den Fehler zu beheben, können Sie die Version der Lambda-Funktion wieder auf Python 3.7 und dann auf Eine bestehende Rotationsfunktion von Python 3.7 auf 3.9 aktualisieren ändern. Weitere Informationen finden Sie unter Warum ist die Rotation meiner Secrets-Manager-Lambda-Funktion mit der Fehlermeldung „PG-Modul nicht gefunden“ fehlgeschlagen? in AWS -re:Post.

Eine bestehende Rotationsfunktion von Python 3.7 auf 3.9 aktualisieren

Einige Rotationsfunktionen, die vor November 2022 erstellt wurden, verwendeten Python 3.7. Das AWS SDK für Python hat die Unterstützung von Python 3.7 im Dezember 2023 eingestellt. Weitere Informationen finden Sie unter Updates der Python-Supportrichtlinie für AWS SDKs und Tools. Um zu einer neuen Rotationsfunktion zu wechseln, die Python 3.9 verwendet, können Sie einer vorhandenen Rotationsfunktion eine Laufzeiteigenschaft hinzufügen oder die Rotationsfunktion neu erstellen.

So finden Sie heraus, welche Lambda-Rotationsfunktionen Python 3.7 verwenden
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AWS Lambda Konsole unter https://console.aws.amazon.com/lambda/.

  2. Filtern Sie in der Liste der Funktionen nach SecretsManager.

  3. Suchen Sie in der gefilterten Liste der Funktionen unter Laufzeit nach Python 3.7.

Option 1: Die Rotationsfunktion mit AWS CloudFormation neu erstellen

Wenn Sie die Secrets Manager-Konsole verwenden, um die Rotation zu aktivieren, erstellt Secrets Manager die erforderlichen Ressourcen, einschließlich der Lambda-Rotationsfunktion. AWS CloudFormation Wenn Sie die Konsole zum Aktivieren der Rotation verwendet haben oder die Rotationsfunktion mithilfe eines AWS CloudFormation Stacks erstellt haben, können Sie denselben AWS CloudFormation Stack verwenden, um die Rotationsfunktion mit einem neuen Namen neu zu erstellen. Die neue Funktion verwendet die neuere Version von Python.

Um den AWS CloudFormation Stapel zu finden, der die Rotationsfunktion erstellt hat
  • Wählen Sie auf der Detailseite zur Lambda-Funktion auf der Registerkarte Konfiguration Tags aus. Zeigen Sie den ARN neben aws:cloudformation:stack-id an.

    Der Stack-Name ist in den ARN eingebettet, wie im folgenden Beispiel gezeigt.

    • ARN: arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537

    • Stackname: SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda

So erstellen Sie eine Rotationsfunktion neu (AWS CloudFormation)
  1. Suchen Sie in AWS CloudFormation anhand des Namens nach dem Stapel und wählen Sie dann Aktualisieren aus.

    Wenn ein Dialogfeld angezeigt wird, in dem empfohlen wird, den Root-Stack zu aktualisieren, wählen Sie Zum Root-Stack gehen und dann Aktualisieren aus.

  2. Wählen Sie auf der Seite Stack aktualisieren unter Vorlage vorbereiten die Option In Application Composer bearbeiten und dann unter Vorlage bearbeiten in Application Composer die Schaltfläche In Application Composer bearbeiten aus.

  3. Gehen Sie in Application Composer wie folgt vor:

    1. Ersetzen Sie im Vorlagencode in SecretRotationScheduleHostedRotationLambda den Wert für "functionName": "SecretsManagerTestRotationRDS" durch einen neuen Funktionsnamen, z. B. in JSON, "functionName": "SecretsManagerTestRotationRDSupdated"

    2. Wählen Sie Vorlage aktualisieren.

    3. Wählen Sie im AWS CloudFormation Dialogfeld Weiter zu die Option Bestätigen und fortfahren mit AWS CloudFormation.

  4. Fahren Sie mit dem AWS CloudFormation Stack-Workflow fort und wählen Sie dann Submit.

Option 2: Aktualisieren Sie die Laufzeit für die bestehende Rotationsfunktion mit AWS CloudFormation

Wenn Sie die Secrets Manager-Konsole verwenden, um die Rotation zu aktivieren, erstellt Secrets Manager die erforderlichen Ressourcen, einschließlich der Lambda-Rotationsfunktion. AWS CloudFormation Wenn Sie die Konsole zum Aktivieren der Rotation verwendet haben oder die Rotationsfunktion mithilfe eines AWS CloudFormation Stacks erstellt haben, können Sie denselben AWS CloudFormation Stack verwenden, um die Laufzeit für die Rotationsfunktion zu aktualisieren.

Um den AWS CloudFormation Stapel zu finden, der die Rotationsfunktion erstellt hat
  • Wählen Sie auf der Detailseite zur Lambda-Funktion auf der Registerkarte Konfiguration Tags aus. Zeigen Sie den ARN neben aws:cloudformation:stack-id an.

    Der Stack-Name ist in den ARN eingebettet, wie im folgenden Beispiel gezeigt.

    • ARN: arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537

    • Stackname: SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda

So aktualisiereen Sie die Laufzeit für eine Rotationsfunktion (AWS CloudFormation)
  1. Suchen Sie in AWS CloudFormation anhand des Namens nach dem Stapel und wählen Sie dann Aktualisieren aus.

    Wenn ein Dialogfeld angezeigt wird, in dem empfohlen wird, den Root-Stack zu aktualisieren, wählen Sie Zum Root-Stack gehen und dann Aktualisieren aus.

  2. Wählen Sie auf der Seite Stack aktualisieren unter Vorlage vorbereiten die Option In Application Composer bearbeiten und dann unter Vorlage bearbeiten in Application Composer die Schaltfläche In Application Composer bearbeiten aus.

  3. Gehen Sie in Application Composer wie folgt vor:

    1. Fügen Sie in der JSON-Vorlage für SecretRotationScheduleHostedRotationLambdaProperties, unterParameters, hinzu"runtime": "python3.9".

    2. Wählen Sie Vorlage aktualisieren aus.

    3. Wählen Sie im AWS CloudFormation Dialogfeld Weiter zu die Option Bestätigen und fortfahren mit AWS CloudFormation.

  4. Fahren Sie mit dem AWS CloudFormation Stack-Workflow fort und wählen Sie dann Submit.

Option 3: AWS CDK Benutzer müssen die CDK-Bibliothek aktualisieren

Wenn Sie die AWS CDK frühere Version v2.94.0 verwendet haben, um die Rotation für Ihr Geheimnis einzurichten, können Sie die Lambda-Funktion aktualisieren, indem Sie ein Upgrade auf Version 2.94.0 oder höher durchführen. Weitere Informationen finden Sie im AWS Cloud Development Kit (AWS CDK) -v2-Entwicklerhandbuch.

Aktualisieren Sie eine bestehende Rotationsfunktion von Python 3.9 auf 3.10

Secrets Manager stellt für Lambda-Rotationsfunktionen von Python 3.9 auf 3.10 um. Um zu einer neuen Rotationsfunktion zu wechseln, die Python 3.10 verwendet, müssen Sie dem Upgrade-Pfad folgen, der auf Ihrer Bereitstellungsmethode basiert. Verwenden Sie die folgenden Verfahren, um sowohl die Python-Version als auch die zugrunde liegenden Abhängigkeiten zu aktualisieren.

Um herauszufinden, welche Lambda-Rotationsfunktionen Python 3.9 verwenden
  1. Melden Sie sich bei an AWS Management Console und öffnen Sie die AWS Lambda Konsole unter https://console.aws.amazon.com/lambda/.

  2. Filtern Sie in der Liste der Funktionen nach SecretsManager.

  3. Suchen Sie in der gefilterten Funktionsliste unter Runtime nachPython 3.9.

Aktualisieren Sie die Pfade nach der Bereitstellungsmethode

Die in dieser Liste aufgeführten Lambda-Rotationsfunktionen können über die Secrets Manager Manager-Konsole, AWS Serverless Application Repository Apps oder AWS CloudFormation Transformationen bereitgestellt werden. Jede dieser Bereitstellungsstrategien hat einen eigenen Aktualisierungspfad.

Verwenden Sie eines der folgenden Verfahren, um Ihre Lambda-Rotationsfunktionen zu aktualisieren, je nachdem, wie Ihre Funktion bereitgestellt wurde.

AWS Secrets Manager console-deployed functions

Eine neue Lambda-Funktion muss über die AWS Secrets Manager Konsole bereitgestellt werden, da Sie Abhängigkeiten für bestehende Lambda-Funktionen nicht manuell aktualisieren können.

Gehen Sie wie folgt vor, um auf der AWS Secrets Manager Konsole bereitgestellte Funktionen zu aktualisieren.

  1. Öffnen Sie die Secrets Manager Manager-Konsole unter https://console.aws.amazon.com/secretsmanager/.

  2. Wählen Sie AWS Secrets Managerunter Secrets aus. Wählen Sie das Geheimnis aus, das die Lambda-Funktion verwendet, die Sie aktualisieren möchten.

  3. Navigieren Sie zur Registerkarte Rotationen und wählen Sie die Option Rotationskonfigurationen aktualisieren aus.

  4. Wählen Sie unter Rotationsfunktionen die Option Neue Funktion erstellen aus, und geben Sie einen neuen Namen für die Lambda-Rotationsfunktion ein.

    1. (Optional) Sobald das Update abgeschlossen ist, können Sie die aktualisierte Lambda-Funktion testen, um sicherzustellen, dass sie erwartungsgemäß funktioniert. Wählen Sie auf der Registerkarte Rotation die Option Geheim sofort drehen aus, um eine sofortige Rotation einzuleiten.

    2. (Optional) Sie können Ihre Funktionsprotokolle und die zur Laufzeit verwendete Python-Version in Amazon einsehen CloudWatch. Weitere Informationen finden Sie im AWS Lambda Entwicklerhandbuch unter CloudWatch Logs für Lambda-Funktionen anzeigen.

  5. Sobald die neue Rotationsfunktion eingerichtet ist, können Sie die alte Rotationsfunktion löschen.

AWS Serverless Application Repository deployments

Das folgende Verfahren zeigt, wie AWS Serverless Application Repository Bereitstellungen aktualisiert werden. Die über bereitgestellten Lambda-Funktionen AWS Serverless Application Repository sind mit einem Banner versehen, This function belongs to an application. Click here to manage it. das einen Link zu der Lambda-Anwendung enthält, zu der die Funktion gehört.

Wichtig

AWS Serverless Application Repository Die Verfügbarkeit ist abhängig AWS-Region .

Gehen Sie wie folgt vor, um AWS Serverless Application Repository bereitgestellte Funktionen zu aktualisieren.

  1. Öffnen Sie die AWS Lambda Konsole unter https://console.aws.amazon.com/lambda/.

  2. Navigieren Sie zur Registerkarte Konfigurationen der Lambda-Funktion, die aktualisiert werden muss.

    1. Sie benötigen die folgenden Informationen zu Ihrer Funktion, wenn Sie die bereitgestellte AWS Serverless Application Repository Anwendung aktualisieren. Sie finden diese Informationen in der Lambda-Konsole.

      • Name der Lambda-Anwendung

        • Den Namen der Lambda-Anwendung finden Sie über den Link im Banner. Auf dem Banner steht beispielsweise Folgendesserverlessrepo-SecretsManagerRedshiftRotationSingleUser. Der Name in diesem Beispiel lautetSecretsManagerRedshiftRotationSingleUser.

      • Name der Lambda-Rotationsfunktion

      • Secrets Manager Manager-Endpunkt

        • Der Endpunkt befindet sich auf den Registerkarten Konfigurationen und Umgebungsvariablen, die der Variablen SECRETS_MANAGER_ENDPOINT zugewiesen sind.

  3. Um Python zu aktualisieren, müssen Sie die semantische Version der serverlosen Anwendung aktualisieren. Weitere Informationen finden Sie unter Aktualisieren von Anwendungen im AWS Serverless Application Repository Entwicklerhandbuch.

Custom Lambda rotation functions

Wenn Sie benutzerdefinierte Lambda-Rotationsfunktionen erstellt haben, müssen Sie die Abhängigkeiten und Laufzeiten jedes Pakets für diese Funktionen aktualisieren. Weitere Informationen finden Sie unter Aktualisieren der Lambda-Funktionslaufzeit auf die neueste Version.

AWS::SecretsManager-2024-09-16 transform macro

Wenn die Lambda-Funktion über diese Transformation bereitgestellt wird, können Sie durch die Aktualisierung der Stacks mithilfe der vorhandenen Vorlage die aktualisierte Lambda-Laufzeit verwenden.

Gehen Sie wie folgt vor, um den AWS CloudFormation Stack mithilfe der vorhandenen Vorlage zu aktualisieren.

  1. Öffnen Sie die AWS CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

  2. Wählen Sie auf der Seite Stacks den Stack aus, den Sie aktualisieren möchten.

  3. Wählen Sie im Bereich mit den Stack-Details die Option Aktualisieren aus.

  4. Wählen Sie für Wählen Sie eine Methode zur Aktualisierung der Vorlage die Option Direktes Update aus.

  5. Wählen Sie auf der Seite Vorlage angeben die Option Bestehende Vorlage verwenden aus.

  6. Behalten Sie für alle anderen Optionen die Standardwerte bei und wählen Sie dann Stapel aktualisieren.

Wenn beim Aktualisieren des Stacks Probleme auftreten, finden Sie weitere Informationen unter Ermitteln der Ursache eines Stack-Fehlers im AWS CloudFormation Benutzerhandbuch.

AWS::SecretsManager-2020-07-23 transform macro

Wir empfehlen Ihnen, auf die neuere Transform-Version zu migrieren, wenn Sie diese verwendenAWS::SecretsManager-2020-07-23. Weitere Informationen finden Sie unter Einführung einer erweiterten Version von AWS Secrets Manager Transform AWS::: SecretsManager -2024-09-16 im AWS Sicherheits-Blog. Wenn Sie weiterhin verwendenAWS::SecretsManager-2020-07-23, kann es zu einem Nichtübereinstimmungsfehler zwischen Ihrer Runtime-Version und den Lambda-Funktionscode-Artefakten kommen. Weitere Informationen finden Sie unter AWS:::SecretsManager: RotationSchedule HostedRotationLambda in der AWS CloudFormation Vorlagenreferenz.

Wenn bei der Aktualisierung des Stacks Probleme auftreten, ermitteln Sie die Ursache für einen Stack-Ausfall im AWS CloudFormation Benutzerhandbuch.

Python-Upgrade überprüfen

Um das Python-Upgrade zu überprüfen, öffnen Sie die Lambda-Konsole (https://console.aws.amazon.com/lambda/) und rufen Sie die Funktionsseite auf. Wählen Sie die Funktion aus, die Sie aktualisiert haben. Überprüfen Sie im Abschnitt Codequelle die im Verzeichnis enthaltenen Dateien und stellen Sie sicher, dass die Python-.so-Datei die Version 3.10 hat.

AWS Lambda geheime Rotation mit fehlgeschlagen PutSecretValue

Wenn Sie eine angenommene Rolle oder eine kontoübergreifende Rotation mit Secrets Manager verwenden und ein RotationFailed Ereignis CloudTrail mit der Meldung finden: Ausstehende geheime Version VERSION_ID für Secret SECRET_ARN wurde nicht von Lambda erstellt LAMBDA_ARN. Entfernen Sie das AWSPENDING Staging-Label und starten Sie die Rotation neu, dann müssen Sie Ihre Lambda-Funktion aktualisieren, um den Parameter zu verwenden. RotationToken

Aktualisieren Sie die Lambda-Rotationsfunktion um Folgendes: RotationToken

  1. Laden Sie den Lambda-Funktionscode herunter

    • Öffnen Sie die Lambda-Konsole

    • Wählen Sie im Navigationsbereich Funktionen

    • Wählen Sie Ihre geheime Lambda-Rotationsfunktion als Funktionsname aus

    • Wählen Sie zum Herunterladen einen der folgenden Felder aus: Funktionscode .zip, AWS SAM file, Both

    • Wählen Sie OK, um die Funktion auf Ihrem lokalen Computer zu speichern.

  2. Bearbeiten Lambda_handler

    Fügen Sie den Parameter rotation_token in den Schritt create_secret für die kontoübergreifende Rotation ein:

    def lambda_handler(event, context): """Secrets Manager Rotation Template This is a template for creating an AWS Secrets Manager rotation lambda Args: event (dict): Lambda dictionary of event parameters. These keys must include the following: - SecretId: The secret ARN or identifier - ClientRequestToken: The ClientRequestToken of the secret version - Step: The rotation step (one of createSecret, setSecret, testSecret, or finishSecret) - RotationToken: the rotation token to put as parameter for PutSecretValue call context (LambdaContext): The Lambda runtime information Raises: ResourceNotFoundException: If the secret with the specified arn and stage does not exist ValueError: If the secret is not properly configured for rotation KeyError: If the event parameters do not contain the expected keys """ arn = event['SecretId'] token = event['ClientRequestToken'] step = event['Step'] # Add the rotation token rotation_token = event['RotationToken'] # Setup the client service_client = boto3.client('secretsmanager', endpoint_url=os.environ['SECRETS_MANAGER_ENDPOINT']) # Make sure the version is staged correctly metadata = service_client.describe_secret(SecretId=arn) if not metadata['RotationEnabled']: logger.error("Secret %s is not enabled for rotation" % arn) raise ValueError("Secret %s is not enabled for rotation" % arn) versions = metadata['VersionIdsToStages'] if token not in versions: logger.error("Secret version %s has no stage for rotation of secret %s." % (token, arn)) raise ValueError("Secret version %s has no stage for rotation of secret %s." % (token, arn)) if "AWSCURRENT" in versions[token]: logger.info("Secret version %s already set as AWSCURRENT for secret %s." % (token, arn)) return elif "AWSPENDING" not in versions[token]: logger.error("Secret version %s not set as AWSPENDING for rotation of secret %s." % (token, arn)) raise ValueError("Secret version %s not set as AWSPENDING for rotation of secret %s." % (token, arn)) # Use rotation_token if step == "createSecret": create_secret(service_client, arn, token, rotation_token) elif step == "setSecret": set_secret(service_client, arn, token) elif step == "testSecret": test_secret(service_client, arn, token) elif step == "finishSecret": finish_secret(service_client, arn, token) else: raise ValueError("Invalid step parameter")
  3. Code bearbeiten create_secret

    Überarbeiten Sie die create_secret Funktion, um den rotation_token Parameter zu akzeptieren und zu verwenden:

    # Add rotation_token to the function def create_secret(service_client, arn, token, rotation_token): """Create the secret This method first checks for the existence of a secret for the passed in token. If one does not exist, it will generate a new secret and put it with the passed in token. Args: service_client (client): The secrets manager service client arn (string): The secret ARN or other identifier token (string): The ClientRequestToken associated with the secret version rotation_token (string): the rotation token to put as parameter for PutSecretValue call Raises: ResourceNotFoundException: If the secret with the specified arn and stage does not exist """ # Make sure the current secret exists service_client.get_secret_value(SecretId=arn, VersionStage="AWSCURRENT") # Now try to get the secret version, if that fails, put a new secret try: service_client.get_secret_value(SecretId=arn, VersionId=token, VersionStage="AWSPENDING") logger.info("createSecret: Successfully retrieved secret for %s." % arn) except service_client.exceptions.ResourceNotFoundException: # Get exclude characters from environment variable exclude_characters = os.environ['EXCLUDE_CHARACTERS'] if 'EXCLUDE_CHARACTERS' in os.environ else '/@"\'\\' # Generate a random password passwd = service_client.get_random_password(ExcludeCharacters=exclude_characters) # Put the secret, using rotation_token service_client.put_secret_value(SecretId=arn, ClientRequestToken=token, SecretString=passwd['RandomPassword'], VersionStages=['AWSPENDING'], RotationToken=rotation_token) logger.info("createSecret: Successfully put secret for ARN %s and version %s." % (arn, token))
  4. Laden Sie den aktualisierten Lambda-Funktionscode hoch

    Nachdem Sie Ihren Lambda-Funktionscode aktualisiert haben, laden Sie ihn hoch, um Ihr Geheimnis zu wechseln.

Wenn Sie gelegentlich Fehler bei der geheimen Rotation feststellen und Ihre Lambda-Funktion in einer Set-Schleife hängen bleibt, z. B. zwischen CreateSecret undSetSecret, kann das Problem mit den Parallelitätseinstellungen zusammenhängen.

Schritte zur Fehlerbehebung bei Parallelität

Warnung

Wenn Sie den bereitgestellten Parallelitätsparameter auf einen Wert unter 10 setzen, kann dies aufgrund unzureichender Ausführungsthreads für die Lambda-Funktion zu einer Drosselung führen. Weitere Informationen finden Sie unter Grundlegendes zu reservierter Parallelität und bereitgestellter Parallelität im Entwicklerhandbuch. AWS Lambda AWS Lambda

  1. Überprüfen und passen Sie die Lambda-Parallelitätseinstellungen an:

    • Stellen Sie sicher, dass der Wert nicht zu niedrig reserved_concurrent_executions ist (z. B. 1)

    • Wenn Sie reservierte Parallelität verwenden, setzen Sie sie auf mindestens 10

    • Erwägen Sie aus Gründen der Flexibilität die Verwendung von unreservierter Parallelität

  2. Für bereitgestellte Parallelität:

    • Legen Sie den bereitgestellten Parallelitätsparameter nicht explizit fest (z. B. in Terraform).

    • Wenn Sie ihn festlegen müssen, verwenden Sie einen Wert von mindestens 10.

    • Testen Sie gründlich, um sicherzustellen, dass der gewählte Wert für Ihren Anwendungsfall geeignet ist.

  3. Parallelität überwachen und anpassen:

    • Berechnen Sie die Parallelität anhand der folgenden Formel: Parallelität = (durchschnittliche Anfragen pro Sekunde) * (durchschnittliche Anforderungsdauer in Sekunden). Weitere Informationen finden Sie unter Schätzung der reservierten Parallelität.

    • Beobachten Sie die Werte während der Rotationen und zeichnen Sie sie auf, um die geeigneten Parallelitätseinstellungen zu ermitteln.

    • Seien Sie vorsichtig, wenn Sie niedrige Parallelitätswerte festlegen. Sie können zu Drosselungen führen, wenn nicht genügend Ausführungs-Threads verfügbar sind.

Weitere Informationen zur Konfiguration von Lambda-Parallelität finden Sie unter Configuring Reserved Concurrency und Configuring Provisioned Concurrency im Developer Guide. AWS Lambda