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
-
-
Auf RPM basierten Systemen wie AL2 023 können Sie die Entwicklungstools mithilfe der Gruppe Entwicklungstools installieren.
sudo yum -y groupinstall "Development Tools"
-
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"
-
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
-
-
Auf Debian-basierten Systemen wie Ubuntu können Sie die Entwicklertools mit dem Paket build-essential installieren.
sudo apt install build-essential
-
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"
-
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.
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
-
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.
-
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
-
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"]
-
Erstellen Sie ein Dockerfile für Ihre Client-Anwendung.
-
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.
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
-
Kopieren Sie die secrets-manager-agent
Binärdatei in dasselbe Verzeichnis, das Ihre Dockerfiles und die Docker Compose-Datei enthält.
-
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
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.
Um eine Lambda-Erweiterung zu erstellen, die den Secrets Manager Agent verpackt
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.
-
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"
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:
Weitere Informationen finden Sie unter Berechtigungsreferenz.
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.