AWS Secrets Manager Agentin - 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.

AWS Secrets Manager Agentin

Der AWS Secrets Manager Agent ist ein clientseitiger HTTP Service, mit dem Sie die Nutzung von Secrets Manager in Umgebungen wie Amazon Elastic Container Service AWS Lambda, Amazon Elastic Kubernetes Service und Amazon Elastic Compute Cloud standardisieren können. Der Secrets Manager Agent kann Geheimnisse abrufen und im Speicher zwischenspeichern, sodass Ihre Anwendungen Geheimnisse direkt aus dem Cache nutzen können. Das bedeutet, dass Sie die Secrets, die Ihre Anwendung benötigt, vom Localhost abrufen können, anstatt Secrets Manager aufzurufen. Der Secrets Manager Agent kann nur Leseanfragen an Secrets Manager stellen — er kann Secrets nicht ändern.

Der Secrets Manager Agent verwendet die AWS Anmeldeinformationen, die Sie in Ihrer Umgebung angeben, um Secrets Manager aufzurufen. Der Secrets Manager Agent bietet Schutz vor serverseitiger Anforderungsfälschung (SSRF), um die Sicherheit geheimer Daten zu verbessern. Sie können den Secrets Manager Agent konfigurieren, indem Sie die maximale Anzahl von Verbindungen, die Gültigkeitsdauer (TTL), den HTTP Localhost-Port und die Cachegröße festlegen.

Da der Secrets Manager Agent einen In-Memory-Cache verwendet, wird er zurückgesetzt, wenn der Secrets Manager Agent neu gestartet wird. Der Secrets Manager Agent aktualisiert regelmäßig den zwischengespeicherten geheimen Wert. Die Aktualisierung erfolgt, wenn Sie versuchen, ein Secret vom Secrets Manager Agent zu lesen, nachdem das TTL abgelaufen ist. Die Standard-Aktualisierungsfrequenz (TTL) beträgt 300 Sekunden, und Sie können sie ändern, indem Sie eine verwendenKonfigurationsdatei, die Sie mit dem --config Befehlszeilenargument an den Secrets Manager Agent übergeben. Der Secrets Manager Agent beinhaltet keine Cache-Invalidierung. Wenn beispielsweise ein Secret rotiert, bevor der Cache-Eintrag abläuft, gibt der Secrets Manager Agent möglicherweise einen veralteten geheimen Wert zurück.

Der Secrets Manager Agent gibt geheime Werte im gleichen Format zurück wie die Antwort vonGetSecretValue. Geheime Werte werden im Cache nicht verschlüsselt.

Informationen zum Herunterladen des Quellcodes finden Sie https://github.com/aws/aws-secretsmanager-agentunter GitHub.

Schritt 1: Die Secrets Manager Agent-Binärdatei erstellen

Um die Secrets Manager Agent-Binärdatei nativ zu erstellen, benötigen Sie die Standard-Entwicklungstools und die Rust-Tools. Alternativ können Sie für Systeme, die dies unterstützen, eine Cross-Compilierung durchführen, oder Sie können Rust Cross für die Cross-Compilierung verwenden.

RPM-based systems
  1. Auf RPM basierten Systemen wie AL2 023 können Sie die Entwicklungstools mithilfe der Gruppe Entwicklungstools installieren.

    sudo yum -y groupinstall "Development Tools"
  2. Folgen Sie den Anweisungen unter Rust installieren in der Rust-Dokumentation.

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh . "$HOME/.cargo/env"
  3. Erstellen Sie den Agenten mit dem Befehl cargo build:

    cargo build --release

    Sie finden die ausführbare Datei untertarget/release/aws-secrets-manager-agent.

Debian-based systems
  1. Auf Debian-basierten Systemen wie Ubuntu können Sie die Entwicklertools mit dem Paket build-essential installieren.

    sudo apt install build-essential
  2. Folgen Sie den Anweisungen unter Rust installieren in der Rust-Dokumentation.

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh . "$HOME/.cargo/env"
  3. Erstellen Sie den Agenten mit dem Befehl cargo build:

    cargo build --release

    Sie finden die ausführbare Datei untertarget/release/aws-secrets-manager-agent.

Windows

Um unter Windows zu bauen, folgen Sie den Anweisungen unter Einrichten Ihrer Entwicklungsumgebung unter Windows für Rust in der Microsoft Windows-Dokumentation.

Cross-compile natively

Auf Distributionen, auf denen das mingw-w64-Paket verfügbar ist, wie z. B. Ubuntu, können Sie nativ Cross-Compile durchführen.

# Install the cross compile tool chain sudo add-apt-repository universe sudo apt install -y mingw-w64 # Install the rust build targets rustup target add x86_64-pc-windows-gnu # Cross compile the agent for Windows cargo build --release --target x86_64-pc-windows-gnu

Sie finden die ausführbare Datei unter. target/x86_64-pc-windows-gnu/release/aws-secrets-manager-agent.exe

Cross compile with Rust cross

Wenn die Cross-Compile-Tools nicht nativ auf dem System verfügbar sind, können Sie das Rust-Cross-Projekt verwenden. Weitere Informationen finden Sie unter https://github.com/cross-rs/Cross.

Wichtig

Wir empfehlen 32 GB Festplattenspeicher für die Build-Umgebung.

# Install and start docker sudo yum -y install docker sudo systemctl start docker sudo systemctl enable docker # Make docker start after reboot # Give ourselves permission to run the docker images without sudo sudo usermod -aG docker $USER newgrp docker # Install cross and cross compile the executable cargo install cross cross build --release --target x86_64-pc-windows-gnu

Schritt 2: Installieren Sie den Secrets Manager Agent

Je nach Art der Datenverarbeitung haben Sie mehrere Möglichkeiten, den Secrets Manager Agent zu installieren.

Amazon EKS, Amazon EC2, and Amazon ECS
Um den Secrets Manager Agent zu installieren
  1. Verwenden Sie das im Repository bereitgestellte install Skript.

    Das Skript generiert beim Start ein zufälliges SSRF Token und speichert es in der Datei/var/run/awssmatoken. Das Token ist für die awssmatokenreader Gruppe lesbar, die das Installationsskript erstellt.

  2. Damit Ihre Anwendung die Tokendatei lesen kann, müssen Sie der awssmatokenreader Gruppe das Benutzerkonto hinzufügen, unter dem Ihre Anwendung ausgeführt wird. Beispielsweise können Sie Ihrer Anwendung mit dem folgenden usermod-Befehl Berechtigungen zum Lesen der Tokendatei gewähren. Dabei <APP_USER> handelt es sich um die Benutzer-ID, unter der Ihre Anwendung ausgeführt wird.

    sudo usermod -aG awssmatokenreader <APP_USER>
Docker

Sie können den Secrets Manager Agent als Sidecar-Container neben Ihrer Anwendung ausführen, indem Sie Docker verwenden. Dann kann Ihre Anwendung Secrets von dem lokalen HTTP Server abrufen, den der Secrets Manager Agent bereitstellt. Informationen zu Docker finden Sie in der Docker-Dokumentation.

Um einen Sidecar-Container für den Secrets Manager Agent mit Docker zu erstellen
  1. Erstellen Sie ein Dockerfile für den Secrets Manager Agent Sidecar-Container. Das folgende Beispiel erstellt einen Docker-Container mit der Secrets Manager Agent-Binärdatei.

    # Use the latest Debian image as the base FROM debian:latest # Set the working directory inside the container WORKDIR /app # Copy the Secrets Manager Agent binary to the container COPY secrets-manager-agent . # Install any necessary dependencies RUN apt-get update && apt-get install -y ca-certificates # Set the entry point to run the Secrets Manager Agent binary ENTRYPOINT ["./secrets-manager-agent"]
  2. Erstellen Sie ein Dockerfile für Ihre Client-Anwendung.

  3. Erstellen Sie eine Docker Compose-Datei, um beide Container auszuführen, und achten Sie darauf, dass sie dieselbe Netzwerkschnittstelle verwenden. Dies ist notwendig, da der Secrets Manager Agent keine Anfragen von außerhalb der Localhost-Schnittstelle akzeptiert. Das folgende Beispiel zeigt eine Docker Compose-Datei, in der der network_mode Schlüssel den secrets-manager-agent Container an den Netzwerk-Namespace des client-application Containers anhängt, sodass sie dieselbe Netzwerkschnittstelle gemeinsam nutzen können.

    Wichtig

    Sie müssen die AWS Anmeldeinformationen und das SSRF Token laden, damit die Anwendung den Secrets Manager Agent verwenden kann. Weitere Informationen:

    version: '3' services: client-application: container_name: client-application build: context: . dockerfile: Dockerfile.client command: tail -f /dev/null # Keep the container running secrets-manager-agent: container_name: secrets-manager-agent build: context: . dockerfile: Dockerfile.agent network_mode: "container:client-application" # Attach to the client-application container's network depends_on: - client-application
  4. Kopieren Sie die secrets-manager-agent Binärdatei in dasselbe Verzeichnis, das Ihre Dockerfiles und die Docker Compose-Datei enthält.

  5. Erstellen Sie die Container auf der Grundlage der bereitgestellten Dockerfiles und führen Sie sie aus, indem Sie den folgenden Befehl verwenden. docker-compose

    docker-compose up --build
  6. In Ihrem Client-Container können Sie jetzt den Secrets Manager Agent verwenden, um Geheimnisse abzurufen. Weitere Informationen finden Sie unter Schritt 3: Secrets mit dem Secrets Manager Agent abrufen.

AWS Lambda

Sie können den Secrets Manager Agent als AWS Lambda Erweiterung paketieren. Dann können Sie es als Ebene zu Ihrer Lambda-Funktion hinzufügen und den Secrets Manager Agent von Ihrer Lambda-Funktion aus aufrufen, um Geheimnisse abzurufen.

Die folgenden Anweisungen zeigen, wie Sie MyTest mithilfe des Beispielskripts secrets-manager-agent-extension.sh in ein Secret einen Namen erhalten https://github.com/aws/aws-secretsmanager-agent, um den Secrets Manager Agent als Lambda-Erweiterung zu installieren.

Anmerkung

Das Beispielskript verwendet den curl Befehl, der in auf Amazon Linux 2023 basierenden Laufzeiten wie Python 3.12 und Node.js 20 enthalten ist. Wenn Sie eine auf Amazon Linux 2 basierende Laufzeitumgebung wie Python 3.11 oder Node.js 18 verwenden, müssen Sie die Installation zunächst curl in Ihrem Lambda-Container-Image durchführen. Anweisungen finden Sie unter Wie kann ich AMI native Amazon Linux 2-Binärpakete mit Lambda auf AWS re:POST verwenden.

Um eine Lambda-Erweiterung zu erstellen, die den Secrets Manager Agent verpackt
  1. Erstellen Sie eine Python-Lambda-Funktion, die abfragt, http://localhost:2773/secretsmanager/get?secretId=MyTest um das Geheimnis abzurufen. Stellen Sie sicher, dass Sie die Wiederholungslogik in Ihrem Anwendungscode implementieren, um Verzögerungen bei der Initialisierung und Registrierung der Lambda-Erweiterung zu vermeiden.

  2. Führen Sie im Stammverzeichnis des Secrets Manager Agent-Codepakets die folgenden Befehle aus, um die Lambda-Erweiterung zu testen.

    AWS_ACCOUNT_ID=<AWS_ACCOUNT_ID> LAMBDA_ARN=<LAMBDA_ARN> # Build the release binary cargo build --release --target=x86_64-unknown-linux-gnu # Copy the release binary into the `bin` folder mkdir -p ./bin cp ./target/x86_64-unknown-linux-gnu/release/aws_secretsmanager_agent ./bin/secrets-manager-agent # Copy the `secrets-manager-agent-extension.sh` script into the `extensions` folder. mkdir -p ./extensions cp aws_secretsmanager_agent/examples/example-lambda-extension/secrets-manager-agent-extension.sh ./extensions # Zip the extension shell script and the binary zip secrets-manager-agent-extension.zip bin/* extensions/* # Publish the layer version LAYER_VERSION_ARN=$(aws lambda publish-layer-version \ --layer-name secrets-manager-agent-extension \ --zip-file "fileb://secrets-manager-agent-extension.zip" | jq -r '.LayerVersionArn') # Attach the layer version to the Lambda function aws lambda update-function-configuration \ --function-name $LAMBDA_ARN \ --layers "$LAYER_VERSION_ARN"
  3. Rufen Sie die Lambda-Funktion auf, um zu überprüfen, ob das Geheimnis korrekt abgerufen wurde.

Schritt 3: Secrets mit dem Secrets Manager Agent abrufen

Um den Agenten zu verwenden, rufen Sie den lokalen Secrets Manager Agent-Endpunkt auf und geben den Namen oder ARN das Geheimnis als Abfrageparameter an. Standardmäßig ruft der Secrets Manager Agent die AWSCURRENT Version des Secrets ab. Um eine andere Version abzurufen, können Sie versionStage oder versionId festlegen.

Um den Secrets Manager Agent zu schützen, müssen Sie jeder Anfrage einen SSRF Token-Header beifügen:X-Aws-Parameters-Secrets-Token. Der Secrets Manager Agent lehnt Anfragen ab, die diesen Header nicht haben oder die ein ungültiges SSRF Token haben. Sie können den SSRF Header-Namen in der Konfigurationsdatei anpassen.

Der Secrets Manager Agent verwendet AWS SDK for Rust, das die standardmäßige Anbieterkette für Anmeldeinformationen verwendet. Die Identität dieser IAM Anmeldeinformationen bestimmt die Rechte, die der Secrets Manager Agent zum Abrufen von Geheimnissen hat.

Erforderliche Berechtigungen:

  • secretsmanager:DescribeSecret

  • secretsmanager:GetSecretValue

Weitere Informationen finden Sie unter Berechtigungsreferenz.

Wichtig

Nachdem der geheime Wert in den Secrets Manager Agent abgerufen wurde, kann jeder Benutzer mit Zugriff auf die Rechenumgebung und das SSRF Token aus dem Secrets Manager Agent-Cache auf das Geheimnis zugreifen. Weitere Informationen finden Sie unter Sicherheitsüberlegungen.

curl

Das folgende Curl-Beispiel zeigt, wie Sie ein Geheimnis vom Secrets Manager Agent abrufen können. Das Beispiel basiert darauf, SSRF dass es in einer Datei vorhanden ist, in der es vom Installationsskript gespeichert wird.

curl -v -H \ "X-Aws-Parameters-Secrets-Token: $(</var/run/awssmatoken)" \ 'http://localhost:2773/secretsmanager/get?secretId=<YOUR_SECRET_ID>'; \ echo
Python

Das folgende Python-Beispiel zeigt, wie ein Secret vom Secrets Manager Agent abgerufen wird. Das Beispiel basiert darauf, SSRF dass es in einer Datei vorhanden ist, in der es vom Installationsskript gespeichert wird.

import requests import json # Function that fetches the secret from Secrets Manager Agent for the provided secret id. def get_secret(): # Construct the URL for the GET request url = f"http://localhost:2773/secretsmanager/get?secretId=<YOUR_SECRET_ID>" # Get the SSRF token from the token file with open('/var/run/awssmatoken') as fp: token = fp.read() headers = { "X-Aws-Parameters-Secrets-Token": token.strip() } try: # Send the GET request with headers response = requests.get(url, headers=headers) # Check if the request was successful if response.status_code == 200: # Return the secret value return response.text else: # Handle error cases raise Exception(f"Status code {response.status_code} - {response.text}") except Exception as e: # Handle network errors raise Exception(f"Error: {e}")

Den Secrets Manager Agent konfigurieren

Um die Konfiguration des Secrets Manager Agents zu ändern, erstellen Sie eine TOMLKonfigurationsdatei und rufen Sie dann auf./aws-secrets-manager-agent --config config.toml.

Die folgende Liste zeigt die Optionen, die Sie für den Secrets Manager Agent konfigurieren können.

  • log_level — Die Detailebene, die in den Protokollen für den Secrets Manager Agent gemeldet wird:DEBUG,INFO, WARNERROR, oder. NONE Der Standardwert ist INFO.

  • http_port — Der Port für den lokalen HTTP Server im Bereich 1024 bis 65535. Die Standardeinstellung ist 2773.

  • region — Die AWS Region, die für Anfragen verwendet werden soll. Wenn keine Region angegeben ist, bestimmt der Secrets Manager Agent die Region aus demSDK. Weitere Informationen finden Sie unter Geben Sie Ihre Anmeldeinformationen und die Standardregion an im AWS SDKfor Rust Developer Guide.

  • ttl_seconds — Die Angabe TTL in Sekunden für die zwischengespeicherten Elemente, im Bereich von 1 bis 3600. Der Standardwert ist 300. Diese Einstellung wird nicht verwendet, wenn die Cachegröße 0 ist.

  • cache_size — Die maximale Anzahl von Geheimnissen, die im Cache gespeichert werden können, im Bereich von 0 bis 1000. 0 gibt an, dass kein Caching stattfindet. Der Standardwert ist 1000.

  • ssrf_headers — Eine Liste von Header-Namen, die der Secrets Manager Agent auf das Token überprüft. SSRF Die Standardeinstellung ist „X-Aws-Parameters-Secrets-Token,“. X-Vault-Token

  • ssrf_env_variables — Eine Liste von Umgebungsvariablennamen, die der Secrets Manager Agent auf das Token überprüft. SSRF Die Umgebungsvariable kann das Token oder einen Verweis auf die Tokendatei enthalten, wie in:. AWS_TOKEN=file:///var/run/awssmatoken Die Standardeinstellung ist "AWS_TOKEN, AWS_SESSION _TOKEN“.

  • path_prefix — Das URI Präfix, das verwendet wird, um festzustellen, ob es sich bei der Anfrage um eine pfadbasierte Anfrage handelt. Die Standardeinstellung ist „/v1/“.

  • max_conn — Die maximale Anzahl von Verbindungen von HTTP Clients, die der Secrets Manager Agent zulässt, im Bereich von 1 bis 1000. Die Standardeinstellung ist 800.

Protokollierung

Der Secrets Manager Agent protokolliert Fehler lokal in der Dateilogs/secrets_manager_agent.log. Wenn Ihre Anwendung den Secrets Manager Agent aufruft, um ein Geheimnis zu erhalten, werden diese Aufrufe im lokalen Protokoll angezeigt. Sie erscheinen nicht in den CloudTrail Protokollen.

Der Secrets Manager Agent erstellt eine neue Protokolldatei, wenn die Datei 10 MB erreicht, und speichert insgesamt bis zu fünf Protokolldateien.

Das Protokoll geht nicht an Secrets Manager, CloudTrail, oder CloudWatch. Anfragen zum Abrufen von Geheimnissen vom Secrets Manager Agent werden in diesen Protokollen nicht angezeigt. Wenn der Secrets Manager Agent Secrets Manager aufruft, um ein Geheimnis zu erhalten, wird dieser Anruf CloudTrail mit einer Benutzer-Agent-Zeichenfolge aufgezeichnet, die enthältaws-secrets-manager-agent.

Sie können das Einloggen in konfigurierenKonfigurationsdatei.

Sicherheitsüberlegungen

Bei einer Agentenarchitektur ist die Vertrauensdomäne der Ort, an dem der Endpunkt und das SSRF Token des Agenten zugänglich sind. In der Regel handelt es sich dabei um den gesamten Host. Die Vertrauensdomäne für den Secrets Manager Agent sollte mit der Domäne übereinstimmen, in der die Secrets Manager Manager-Anmeldeinformationen verfügbar sind, um den gleichen Sicherheitsstatus aufrechtzuerhalten. Bei Amazon wäre EC2 die Vertrauensdomäne für den Secrets Manager Agent beispielsweise dieselbe wie die Domäne der Anmeldeinformationen, wenn Rollen für Amazon verwendet werdenEC2.

Sicherheitsbewusste Anwendungen, die noch keine Agentenlösung verwenden, bei der die Secrets Manager Manager-Anmeldeinformationen für die Anwendung gesperrt sind, sollten die Verwendung sprachspezifischer Lösungen AWS SDKs oder Caching-Lösungen in Betracht ziehen. Weitere Informationen finden Sie unter Hol dir Geheimnisse von AWS Secrets Manager.