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.
Verwenden von Secrets-Manager-Secrets in Lambda-Funktionen
AWS Secrets Manager hilft Ihnen bei der Verwaltung von Anmeldeinformationen, API-Schlüsseln und anderen Geheimnissen, die Ihre Lambda-Funktionen benötigen. Sie haben zwei Hauptansätze für das Abrufen von Geheimnissen in Ihren Lambda-Funktionen, die beide eine bessere Leistung und geringere Kosten bieten als das direkte Abrufen von Geheimnissen mithilfe des SDK: AWS
-
AWS Lambda-Erweiterung für Parameter und Geheimnisse — Eine laufzeitunabhängige Lösung, die eine einfache HTTP-Schnittstelle zum Abrufen von Geheimnissen bietet
-
Powertools for AWS Lambda Parameters Utility — Eine codeintegrierte Lösung, die mehrere Anbieter (Secrets Manager, Parameter Store AppConfig) mit integrierten Transformationen unterstützt
Beide Ansätze verwenden lokale Caches für Secrets, sodass Ihre Funktion nicht bei jedem Aufruf den Secrets Manager aufrufen muss. Wenn Ihre Funktion ein Secret anfordert, wird zuerst der Cache überprüft. Ist das Secret verfügbar und nicht abgelaufen, wird es sofort zurückgegeben. Andernfalls wird es aus dem Secrets Manager abgerufen, zwischengespeichert und zurückgegeben. Dieser Caching-Mechanismus führt zu schnelleren Antwortzeiten und geringeren Kosten durch die Minimierung von API-Aufrufen.
Auswahl des Ansatzes
Berücksichtigen Sie diese Faktoren, wenn Sie zwischen der Erweiterung und folgenden Optionen wählen: PowerTools
- Verwenden Sie die Lambda-Erweiterung AWS parameters and secrets, wenn:
-
Sie eine laufzeitunabhängige Lösung benötigen, die mit jeder Lambda-Laufzeit funktioniert.
Sie keine Codeabhängigkeiten zu Ihrer Funktion hinzufügen möchten.
Sie nur Secrets aus Secrets Manager oder Parameter Store abrufen müssen.
- Verwenden Sie Powertools for AWS Lambda Parameters Utility, wenn:
-
Sie eine integrierte Entwicklungserfahrung mit Ihrem Anwendungscode wünschen.
Sie benötigen Unterstützung für mehrere Anbieter (Secrets Manager, Parameter Store, AppConfig)
Sie integrierte Datentransformationen (JSON-Parsing, Base64-Decodierung) benötigen.
Sie verwenden Python- TypeScript, Java- oder .NET-Laufzeiten
Wann Sie den Secrets Manager mit Lambda verwenden sollten
Zu den häufigsten Anwendungsfällen für den Secrets Manager mit Lambda gehören:
-
Speichern von Datenbank-Anmeldeinformationen, die Ihre Funktion für die Verbindung zu Amazon RDS oder anderen Datenbanken verwendet.
-
Verwalten von API-Schlüsseln für externe Dienste, die Ihre Funktion aufruft.
-
Speichern von Verschlüsselungsschlüsseln oder anderen sensiblen Konfigurationsdaten.
-
Automatische Rotation der Anmeldeinformationen, ohne dass Sie Ihren Funktionscode aktualisieren müssen.
Verwenden der Lambda-Erweiterung AWS Parameter und Geheimnisse
Die Lambda-Erweiterung AWS Parameters and Secrets verwendet eine einfache HTTP-Schnittstelle, die mit jeder Lambda-Laufzeit kompatibel ist. Standardmäßig werden Secrets 300 Sekunden (5 Minuten) lang zwischengespeichert und es können bis zu 1 000 Secrets gespeichert werden. Sie können diese Einstellungen mit Umgebungsvariablen anpassen.
Verwendung des Secrets Manager in einer Lambda-Funktion
In diesem Abschnitt wird davon ausgegangen, dass Sie bereits ein Secret im Secrets Manager besitzen. Informationen zum Erstellen eines Secrets finden Sie unter Create an AWS Secrets Manager Secret.
Wählen Sie Ihre bevorzugte Laufzeit und folgen Sie den Schritten, um eine Funktion zu erstellen, die Secrets aus dem Secrets Manager abruft. Die Beispielfunktion ruft ein Secrets aus dem Secrets Manager ab und kann verwendet werden, um auf Datenbank-Anmeldeinformationen, API-Schlüssel oder andere sensible Konfigurationsdaten in Ihren Anwendungen zuzugreifen.
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie Funktion erstellen.
-
Wählen Sie Verfassen von Grund auf aus.
-
Geben Sie für Function name (Funktionsname)
secret-retrieval-demoein. -
Wählen Sie Ihre bevorzugte Laufzeit.
-
Wählen Sie Funktion erstellen.
So laden Sie das Bereitstellungspaket hoch
-
Wählen Sie auf der Registerkarte Code der Funktion die Option Hochladen von und dann ZIP-Datei (für Python und Node.js) oder JAR-Datei (für Java) aus.
-
Laden Sie das Bereitstellungspaket hoch, das Sie zuvor erstellt haben.
-
Wählen Sie Speichern.
Um die Lambda-Erweiterung AWS Parameters and Secrets als Ebene hinzuzufügen
-
Scrollen Sie auf der Registerkarte Code der Funktion nach unten zu Ebenen.
-
Wählen Sie Add a layer (Layer hinzufügen) aus.
-
Wählen Sie AWS -Ebenen aus.
-
Wählen Sie AWS-Parameters-and-Secrets-Lambda-Extension aus.
-
Wählen Sie die neueste Version aus.
-
Wählen Sie Hinzufügen aus.
So fügen Sie Ihrer Ausführungsrolle Berechtigungen für den Secrets Manager hinzu
-
Wählen Sie die Registerkarte Konfiguration und dann Berechtigungen aus.
-
Wählen Sie unter Rollenname den Link zu Ihrer Ausführungsrolle. Dieser Link öffnet die Rolle in der IAM-Konsole.
-
Wählen Sie Add permissions (Berechtigungen hinzufügen) und dann Create inline policy (Inline-Richtlinie erstellen) aus.
-
Wählen Sie die Registerkarte JSON aus und fügen Sie die folgende Richtlinie hinzu. Geben Sie für
Resourceden ARN Ihres Secrets ein. -
Wählen Sie Weiter aus.
-
Geben Sie einen Namen für die Richtlinie ein.
-
Wählen Sie Richtlinie erstellen aus.
So testen Sie die -Funktion
-
Kehren Sie zur Lambda-Konsole zurück.
-
Wählen Sie die Registerkarte Test.
-
Wählen Sie Test aus. Sie sollten die folgende Antwort sehen:
Umgebungsvariablen
Die Lambda-Erweiterung AWS Parameters and Secrets verwendet die folgenden Standardeinstellungen. Sie können diese Einstellungen überschreiben, indem Sie die entsprechenden Umgebungsvariablen erstellen. Setzen Sie PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL auf DEBUG, um die aktuellen Einstellungen für eine Funktion anzuzeigen. Die Erweiterung CloudWatch protokolliert ihre Konfigurationsinformationen zu Beginn jedes Funktionsaufrufs in Logs.
| Einstellung | Standardwert | Zulässige Werte | Umgebungsvariable | Details |
|---|---|---|---|---|
| HTTP-Port | 2773 | 1–65 535 | PARAMETERS_SECRETS_EXTENSION_HTTP_PORT | Port für den lokalen HTTP-Server |
| Cache aktiviert | TRUE | TRUE | FALSE | PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED | Aktivieren oder Deaktivieren des Cache |
| Cache-Größe | 1000 | 0–1 000 | PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE | Auf 0 setzen, um das Caching zu deaktivieren |
| Secrets Manager TTL | 300 Sekunden | 0–300 Sekunden | SECRETS_MANAGER_TTL | Time-to-live für zwischengespeicherte Geheimnisse. Auf 0 setzen, um das Caching zu deaktivieren. Diese Variable wird ignoriert, wenn der Wert für PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE 0 ist. |
| Parameter Store TTL | 300 Sekunden | 0–300 Sekunden | SSM_PARAMETER_STORE_TTL | Time-to-live für zwischengespeicherte Parameter. Auf 0 setzen, um das Caching zu deaktivieren. Diese Variable wird ignoriert, wenn der Wert für PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE 0 ist. |
| Protokollebene | INFO | DEBUG | INFO | WARN | ERROR | NONE | PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL | Der Detaillierungsgrad, der in Protokollen für die Erweiterung gemeldet wird |
| Maximale Verbindungen | 3 | 1 oder höher | PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS | Maximale Anzahl von HTTP-Verbindungen für Anforderungen an den Parameter Store oder Secrets Manager |
| Timeout für Secrets Manager | 0 (kein Timeout) | Alle ganzen Zahlen | SECRETS_MANAGER_TIMEOUT_MILLIS | Timeout für Anfragen an Secrets Manager (in Millisekunden) |
| Timeout für Parameter Store | 0 (kein Timeout) | Alle ganzen Zahlen | SSM_PARAMETER_STORE_TIMEOUT_MILLIS | Timeout für Anfragen an den Parameter Store (in Millisekunden) |
Arbeiten mit Secret-Rotation
Wenn Sie Secrets häufig rotieren, kann die standardmäßige Cachedauer von 300 Sekunden dazu führen, dass Ihre Funktion veraltete Secrets verwendet. Sie haben zwei Möglichkeiten, um sicherzustellen, dass Ihre Funktion den neuesten Secret-Wert verwendet:
-
Reduzieren Sie die Cache-TTL, indem Sie die
SECRETS_MANAGER_TTL-Umgebungsvariable auf einen niedrigeren Wert (in Sekunden) setzen. Wenn Sie sie beispielsweise auf60einstellen, wird sichergestellt, dass Ihre Funktion niemals ein Secret verwendet, das älter als eine Minute ist. -
Verwenden Sie die Staging-Bezeichnungen
AWSCURRENToderAWSPREVIOUSin Ihrer Secret-Anfrage, um sicherzustellen, dass Sie die gewünschte Version erhalten:secretsmanager/get?secretId=YOUR_SECRET_NAME&versionStage=AWSCURRENT
Wählen Sie den Ansatz, der Ihren Anforderungen an Leistung und Aktualität am besten gerecht wird. Eine niedrigere TTL bedeutet häufigere Aufrufe von Secrets Manager, stellt jedoch sicher, dass Sie mit den aktuellsten Secret-Werten arbeiten.
Verwenden Sie das Parameter-Hilfsprogramm von Powertools für AWS Lambda
Das Parameter-Hilfsprogramm von Powertools for AWS Lambda bietet eine einheitliche Oberfläche zum Abrufen von Geheimnissen von mehreren Anbietern, darunter Secrets Manager, Parameterspeicher und. AppConfig Es übernimmt Caching und Transformationen und bietet im Vergleich zum Erweiterungsansatz eine integriertere Entwicklungserfahrung.
Vorteile des Parameter-Dienstprogramms
Mehrere Anbieter — Rufen Sie Parameter aus Secrets Manager und Parameter Store ab und AppConfig verwenden Sie dieselbe Schnittstelle
Integrierte Transformationen – Automatisches JSON-Parsing, Base64-Decodierung und weitere Datentransformationen
Integriertes Caching – Konfigurierbares Caching mit TTL-Unterstützung zur Reduzierung von API-Aufrufen
Typsicherheit — Starke Tippunterstützung in TypeScript und anderen unterstützten Laufzeiten
Fehlerbehandlung – Integrierte Wiederholungslogik und Fehlerbehandlung
Codebeispiele
Die folgenden Beispiele zeigen, wie Secrets mit dem Parameter-Dienstprogramm in verschiedenen Laufzeiten abgerufen werden:
- Python
-
Anmerkung
Vollständige Beispiele und Anweisungen zur Einrichtung finden Sie in der Dokumentation zum Parameter-Dienstprogramm
. Abrufen von Geheimnissen aus Secrets Manager mit dem Hilfsprogramm Powertools for AWS Lambda Parameters.
from aws_lambda_powertools import Logger from aws_lambda_powertools.utilities import parameters logger = Logger() def lambda_handler(event, context): try: # Get secret with caching (default TTL: 5 seconds) secret_value = parameters.get_secret("my-secret-name") # Get secret with custom TTL secret_with_ttl = parameters.get_secret("my-secret-name", max_age=300) # Get secret and transform JSON secret_json = parameters.get_secret("my-json-secret", transform="json") logger.info("Successfully retrieved secrets") return { 'statusCode': 200, 'body': 'Successfully retrieved secrets' } except Exception as e: logger.error(f"Error retrieving secret: {str(e)}") return { 'statusCode': 500, 'body': f'Error: {str(e)}' } - TypeScript
-
Anmerkung
Vollständige Beispiele und Anweisungen zur Einrichtung finden Sie in der Dokumentation zum Parameter-Dienstprogramm.
Abrufen von Geheimnissen aus Secrets Manager mit dem Hilfsprogramm Powertools for AWS Lambda Parameters.
import { Logger } from '@aws-lambda-powertools/logger'; import { getSecret } from '@aws-lambda-powertools/parameters/secrets'; import type { Context } from 'aws-lambda'; const logger = new Logger(); export const handler = async (event: any, context: Context) => { try { // Get secret with caching (default TTL: 5 seconds) const secretValue = await getSecret('my-secret-name'); // Get secret with custom TTL const secretWithTtl = await getSecret('my-secret-name', { maxAge: 300 }); // Get secret and transform JSON const secretJson = await getSecret('my-json-secret', { transform: 'json' }); logger.info('Successfully retrieved secrets'); return { statusCode: 200, body: 'Successfully retrieved secrets' }; } catch (error) { logger.error('Error retrieving secret', { error }); return { statusCode: 500, body: `Error: ${error}` }; } }; - Java
-
Anmerkung
Vollständige Beispiele und Anweisungen zur Einrichtung finden Sie in der Dokumentation zum Parameter-Dienstprogramm
. Abrufen von Geheimnissen aus Secrets Manager mit dem Hilfsprogramm Powertools for AWS Lambda Parameters.
import software.amazon.lambda.powertools.logging.Logging; import software.amazon.lambda.powertools.parameters.SecretsProvider; import software.amazon.lambda.powertools.parameters.ParamManager; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class SecretHandler implements RequestHandler<Object, String> { private final SecretsProvider secretsProvider = ParamManager.getSecretsProvider(); @Logging @Override public String handleRequest(Object input, Context context) { try { // Get secret with caching (default TTL: 5 seconds) String secretValue = secretsProvider.get("my-secret-name"); // Get secret with custom TTL (300 seconds) String secretWithTtl = secretsProvider.withMaxAge(300).get("my-secret-name"); // Get secret and transform JSON MySecret secretJson = secretsProvider.get("my-json-secret", MySecret.class); return "Successfully retrieved secrets"; } catch (Exception e) { return "Error retrieving secret: " + e.getMessage(); } } public static class MySecret { // Define your secret structure here } } - .NET
-
Anmerkung
Vollständige Beispiele und Anweisungen zur Einrichtung finden Sie in der Dokumentation zum Parameter-Dienstprogramm.
Abrufen von Geheimnissen aus Secrets Manager mit dem Hilfsprogramm Powertools for AWS Lambda Parameters.
using AWS.Lambda.Powertools.Logging; using AWS.Lambda.Powertools.Parameters; using Amazon.Lambda.Core; [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] public class Function { private readonly ISecretsProvider _secretsProvider; public Function() { _secretsProvider = ParametersManager.SecretsProvider; } [Logging] public async Task<string> FunctionHandler(object input, ILambdaContext context) { try { // Get secret with caching (default TTL: 5 seconds) var secretValue = await _secretsProvider.GetAsync("my-secret-name"); // Get secret with custom TTL var secretWithTtl = await _secretsProvider.WithMaxAge(TimeSpan.FromMinutes(5)) .GetAsync("my-secret-name"); // Get secret and transform JSON var secretJson = await _secretsProvider.GetAsync<MySecret>("my-json-secret"); return "Successfully retrieved secrets"; } catch (Exception e) { return $"Error retrieving secret: {e.Message}"; } } public class MySecret { // Define your secret structure here } }
Einrichtung und Berechtigungen
Um das Parameter-Dienstprogramm zu verwenden, müssen Sie Folgendes tun:
Installieren Sie Powertools für AWS Lambda für Ihre Runtime. Details hierzu finden Sie unter Powertools for AWS Lambda.
Fügen Sie der Ausführungsrolle Ihrer Funktion die erforderlichen IAM-Berechtigungen hinzu. Weitere Einzelheiten finden Sie unter Verwaltung von Berechtigungen in AWS Lambda.
Konfigurieren Sie optionale Einstellungen über Umgebungsvariablen.
Die erforderlichen IAM-Berechtigungen sind dieselben wie beim Erweiterungsansatz. Das Dienstprogramm übernimmt automatisch das Caching und die API-Aufrufe an den Secrets Manager basierend auf Ihrer Konfiguration.