View a markdown version of this page

Verwendung der AWS Anbieter von Workload-Anmeldeinformationen - 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.

Verwendung der AWS Anbieter von Workload-Anmeldeinformationen

Wie AWS Workload Credentials Provider funktioniert

Der AWS Workload Credentials Provider (früher der AWS Secrets Manager Agent) bietet einen clientseitigen HTTP-Dienst, mit dem Sie standardisieren können, wie Sie Geheimnisse von Secrets Manager in Ihren Computerumgebungen verwenden. Sie können ihn mit den folgenden Diensten verwenden:

  • AWS Lambda

  • Amazon Elastic Container Service

  • Amazon Elastic Kubernetes Service

  • Amazon Elastic Compute Cloud

Der AWS Workload Credentials Provider ruft Secrets ab und speichert sie im Speicher, sodass Ihre Anwendungen Secrets von localhost abrufen können, anstatt Secrets Manager direkt aufzurufen. Der AWS Workload Credentials Provider kann nur Secrets lesen — er kann sie nicht ändern.

Der AWS Workload Credentials Provider ist Open Source. Der Quellcode, die Installationsanweisungen und die neuesten Versionsinformationen sind verfügbar unter GitHub.

Wichtig

Der AWS Workload Credentials Provider verwendet die AWS Anmeldeinformationen aus Ihrer Umgebung, um Secrets Manager aufzurufen. Er bietet Schutz vor Server Side Request Forgery (SSRF), um die Sicherheit geheimer Daten zu verbessern. Der AWS Workload Credentials Provider verwendet standardmäßig den ML-KEM Post-Quantum-Schlüsselaustausch als Schlüsselaustausch mit der höchsten Priorität.

Verstehen AWS Zwischenspeichern des Providers für Workload Credentials

Der AWS Workload Credentials Provider verwendet einen In-Memory-Cache, der zurückgesetzt wird, wenn der AWS Workload Credentials Provider neu gestartet wird. Er aktualisiert in regelmäßigen Abständen zwischengespeicherte geheime Werte auf der Grundlage der folgenden Kriterien:

  • Die standardmäßige Aktualisierungsfrequenz (TTL) beträgt 300 Sekunden

  • Sie können die TTL mithilfe einer Konfigurationsdatei ändern

  • Die Aktualisierung erfolgt, wenn Sie nach Ablauf der TTL ein Geheimnis anfordern

Anmerkung

Der AWS Workload Credentials Provider beinhaltet keine Cache-Invalidierung. Wenn ein geheimer Schlüssel rotiert, bevor der Cache-Eintrag abläuft, gibt der AWS Workload Credentials Provider möglicherweise einen veralteten geheimen Wert zurück.

Der AWS Workload Credentials Provider gibt geheime Werte im gleichen Format zurück wie die Antwort von. GetSecretValue Geheime Werte werden im Cache nicht verschlüsselt.

Laden Sie das herunter AWS Anbieter für Workload-Anmeldeinformationen

Verwenden Sie die folgenden Links, um eine vorgefertigte Binärdatei des AWS Workload Credentials Provider herunterzuladen. Versionen für Windows sind signiert.

Plattform Architektur URL herunterladen Prüfsumme () SHA-256

Linux

x86-64

Für Linux x86-64 (3.1.1) herunterladen

471c1978f8bf63a0aeefb425e974ac3c816c7e04feb302236512eea375160de4

Linux

Ein Arch64

Laden Sie AArch64 (3.1.1) für Linux herunter

8b09dc4e58b84379f580a9ae179940bcb3de0338421f638a43376bf73380ffb6

Windows

x86-64

Für Windows x86-64 (3.1.1) herunterladen

5fbdac4017e630556b94b90e5ed9ed11be69ac7a47e67655e20181ce990dbe12

Baue das AWS Anbieter für Workload-Anmeldeinformationen aus der Quelle

Alternativ können Sie den AWS Workload Credentials Provider aus dem Quellcode erstellen. Bevor Sie beginnen, stellen Sie sicher, dass Sie die Standardentwicklungstools und Rust -tools für Ihre Plattform installiert haben.

Anmerkung

Um den Anbieter mit aktivierter fips Funktion auf macOS zu erstellen, ist derzeit die folgende Problemumgehung erforderlich:

  • Erstellen Sie eine Umgebungsvariable mit SDKROOT dem Namen, die auf das Ergebnis der Ausführung gesetzt wird xcrun --show-sdk-path

RPM-based systems
Um auf RPM-based Systemen aufzubauen
  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 aws-wcp-token Gruppe lesbar, die das Installationsskript erstellt.

  2. Damit Ihre Anwendung die Tokendatei lesen kann, müssen Sie der aws-wcp-token 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 aws-wcp-token <APP_USER>
    Installieren Sie die Entwicklungstools

    Installieren Sie auf RPM-based Systemen wie AL2023 die Gruppe Entwicklungstools:

    sudo yum -y groupinstall "Development Tools"
  3. Installieren Sie Rust

    Folgen Sie den Anweisungen unter Rust installieren in der Rust-Dokumentation:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Follow the on-screen instructions . "$HOME/.cargo/env"
  4. Erstellen Sie den Anbieter

    Erstellen Sie den AWS Workload Credentials Provider mit dem Befehl cargo build:

    cargo build --release

    Die ausführbare Datei finden Sie untertarget/release/aws-workload-credentials-provider.

Debian-based systems
Um auf Debian-based Systemen aufzubauen
  1. Installieren Sie Entwicklungstools

    Installieren Sie auf Debian-based Systemen wie Ubuntu das Paket build-essential:

    sudo apt install build-essential
  2. Installieren Sie Rust

    Folgen Sie den Anweisungen unter Rust installieren in der Rust-Dokumentation:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Follow the on-screen instructions . "$HOME/.cargo/env"
  3. Erstellen Sie den Anbieter

    Erstellen Sie den AWS Workload Credentials Provider mit dem Befehl cargo build:

    cargo build --release

    Die ausführbare Datei finden Sie untertarget/release/aws-workload-credentials-provider.

Windows
Um auf Windows aufzubauen
  1. Richten Sie die Entwicklungsumgebung ein

    Folgen Sie den Anweisungen unter Einrichten Ihrer Entwicklungsumgebung unter Windows für Rust in der Microsoft Windows-Dokumentation.

  2. Erstellen Sie den Anbieter

    Erstellen Sie den AWS Workload Credentials Provider mit dem Befehl cargo build:

    cargo build --release

    Die ausführbare Datei finden Sie untertarget/release/aws-workload-credentials-provider.exe.

Cross-compile natively
Um nativ kreuzkompilieren zu können
  1. Installieren Sie Cross-Compile-Tools

    Installieren Sie cargo-xwin:

    cargo install cargo-xwin
  2. Fügen Sie Rust-Build-Ziele hinzu

    Installieren Sie das Windows MSVC-Build-Ziel:

    rustup target add x86_64-pc-windows-msvc
  3. Für Windows erstellen

    Cross-compile der Anbieter für Windows:

    cargo xwin build --release --target x86_64-pc-windows-msvc

    Die ausführbare Datei finden Sie untertarget/x86_64-pc-windows-msvc/release/aws-workload-credentials-provider.exe.

Installieren Sie das AWS Anbieter für Workload-Anmeldeinformationen

Wählen Sie Ihre Computerumgebung aus den folgenden Installationsoptionen aus.

Amazon EC2

Auf Amazon Linux EC2-Instances können Sie den AWS Workload Credentials Provider entweder mit dem RPM-Paket (verfügbar für AL2023) oder mit dem manuellen Installationsskript installieren.

Option A: Installieren Sie das RPM-Paket (AL2023)
  1. Installieren Sie das Paket

    Installieren Sie das RPM-Paket . Der Paketmanager findet die neueste Version für Sie:

    sudo dnf install aws-workload-credentials-provider

    Das RPM-Paket richtet automatisch Folgendes ein:

    • Der aws-wcp Dienstbenutzer zusammen mit den aws-wcp-token Gruppen awscreds und.

    • Die Binär- und Hilfsskripte in/opt/aws/workload-credentials-provider/.

    • Die AWS Secrets Manager und systemd Token-Dienste, die es automatisch startet.

    • Ein zufälliges SSRF-Token bei/var/run/awssmatoken.

    Die Secrets Manager-Funktion ist sofort nach der Installation verfügbar. Wenn Sie mit dem RPM-Paket installieren, liest der AWS Workload Credentials Provider die Konfigurationsoptionen aus dem Standardpfad/etc/aws-workload-credentials-provider/config.toml. Um die Konfiguration anzupassen, erstellen oder bearbeiten Sie diese Datei.

  2. (Optional) Aktivieren Sie die Funktion zur Zertifikatsverwaltung

    Informationen zum Abrufen und Aktualisieren von AWS Certificate Manager Zertifikaten von finden Sie unter Zertifikatsautomatisierung im AWS Certificate Manager Benutzerhandbuch.

  3. Konfigurieren Sie die Anwendungsberechtigungen

    Damit Ihre Anwendung die SSRF-Tokendatei lesen kann, fügen Sie das Benutzerkonto der Anwendung zur aws-wcp-token Gruppe hinzu:

    sudo usermod -aG aws-wcp-token APP_USER

    APP_USERErsetzen Sie es durch die Benutzer-ID, unter der Ihre Anwendung ausgeführt wird.

  4. (Optional) Gewähren Sie Zugriff auf Anbieterprotokolle

    Um Anbieterprotokolle zu lesen, fügen Sie Ihren Benutzer der awscreds Gruppe hinzu und melden Sie sich dann ab und wieder an (oder führen Sie es ausnewgrp awscreds), damit die Änderung wirksam wird:

    sudo usermod -aG awscreds APP_USER
Deinstallieren Sie AWS Anbieter für Workload-Anmeldeinformationen

Führen Sie den Befehl aus, um den AWS Workload Credentials Provider zu deinstallierensudo dnf remove aws-workload-credentials-provider. Bei der Deinstallation werden alle Dienste beendet und die Binärdateien und Diensteinheiten entfernt. Bei der Deinstallation bleiben der aws-wcp Benutzer, die Gruppen und das Protokollverzeichnis erhalten.

Option B: Führen Sie das Installationsskript aus (beliebig Linux)
  1. Navigieren Sie zum Konfigurationsverzeichnis

    Wechseln Sie in das Konfigurationsverzeichnis:

    cd aws_workload_credentials_provider_common/configuration
  2. Führen Sie das Installationsskript aus

    Führen Sie das im Repository bereitgestellte install Skript aus.

    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 aws-wcp-token Gruppe lesbar, die das Installationsskript erstellt.

  3. Konfigurieren Sie die Anwendungsberechtigungen

    Fügen Sie das Benutzerkonto, unter dem Ihre Anwendung ausgeführt wird, der aws-wcp-token Gruppe hinzu:

    sudo usermod -aG aws-wcp-token APP_USER

    APP_USERErsetzen Sie es durch die Benutzer-ID, unter der Ihre Anwendung ausgeführt wird.

Container Sidecar

Sie können den AWS Workload Credentials Provider als Sidecar-Container zusammen mit Ihrer Anwendung ausführen, indem Sie Docker verwenden. Dann kann Ihre Anwendung Geheimnisse vom lokalen HTTP-Server abrufen, den der AWS Workload Credentials Provider bereitstellt. Informationen zu Docker finden Sie in der Docker-Dokumentation.

Um einen Sidecar-Container für den zu erstellen AWS Anbieter für Workload-Anmeldeinformationen
  1. Erstellen Sie den Anbieter Dockerfile

    Erstellen Sie ein Dockerfile für den Sidecar-Container des AWS Workload Credentials Provider:

    # Use the latest Debian image as the base FROM debian:latest # Set the working directory inside the container WORKDIR /app # Copy the Workload Credentials Provider binary to the container COPY aws-workload-credentials-provider . # Install any necessary dependencies RUN apt-get update && apt-get install -y ca-certificates # Set the entry point to run the provider ENTRYPOINT ["./aws-workload-credentials-provider", "sm", "start"]
  2. Erstellen Sie das Dockerfile der Anwendung

    Erstellen Sie ein Dockerfile für Ihre Client-Anwendung.

  3. Erstellen Sie eine Docker Compose-Datei

    Erstellen Sie eine Docker Compose-Datei, um beide Container mit einer gemeinsamen Netzwerkschnittstelle auszuführen:

    Wichtig

    Sie müssen AWS Anmeldeinformationen und das SSRF-Token laden, damit die Anwendung den AWS Workload Credentials Provider verwenden kann. Informationen zu Amazon EKS und Amazon ECS finden Sie im Folgenden:

    version: '3' services: client-application: container_name: client-application build: context: . dockerfile: Dockerfile.client command: tail -f /dev/null # Keep the container running workload-credentials-provider: container_name: workload-credentials-provider build: context: . dockerfile: Dockerfile.provider network_mode: "container:client-application" # Attach to the client-application container's network depends_on: - client-application
  4. Kopieren Sie die Binärdatei des

    Kopieren Sie die aws-workload-credentials-provider Binärdatei in dasselbe Verzeichnis, das Ihre Dockerfiles und die Docker Compose-Datei enthält.

  5. Container erstellen und ausführen

    Erstellen und starten Sie die Container mit Docker Compose:

    docker-compose up --build
  6. Nächste Schritte

    Sie können jetzt den AWS Workload Credentials Provider verwenden, um Geheimnisse aus Ihrem Client-Container abzurufen. Weitere Informationen finden Sie unter Rufen Sie Geheimnisse ab mit dem AWS Anbieter für Workload-Anmeldeinformationen.

Lambda

Sie können den AWS Workload Credentials Provider als Lambda-Erweiterung https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html verpacken. Dann können Sie ihn als Ebene zu Ihrer Lambda-Funktion hinzufügen und den AWS Workload Credentials Provider von Ihrer Lambda-Funktion aus aufrufen, um Secrets abzurufen.

Die folgenden Anweisungen zeigen, wie Sie MyTest mithilfe des Beispielskripts secrets-manager-provider-extension.sh im aws-workload-credentials GitHub provider-Repository einen Namen für ein Geheimnis abrufen, um den Workload Credentials Provider als Lambda-Erweiterung zu installieren. AWS

So erstellen Sie eine Lambda-Erweiterung für AWS Anbieter für Workload-Anmeldeinformationen
  1. Verpacken Sie die Provider-Ebene

    Führen Sie im Stammverzeichnis des AWS Workload Credentials Provider-Codepakets die folgenden Befehle aus:

    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-workload-credentials-provider ./bin/aws-workload-credentials-provider # Copy the `secrets-manager-provider-extension.sh` example script into the `extensions` folder. mkdir -p ./extensions cp aws_secretsmanager_provider/examples/example-lambda-extension/secrets-manager-provider-extension.sh ./extensions # Zip the extension shell script and the binary zip secrets-manager-provider-extension.zip bin/* extensions/* # Publish the layer version LAYER_VERSION_ARN=$(aws lambda publish-layer-version \ --layer-name secrets-manager-provider-extension \ --zip-file "fileb://secrets-manager-provider-extension.zip" | jq -r '.LayerVersionArn')
  2. Konfigurieren Sie das SSRF-Token

    Die Standardkonfiguration des Anbieters setzt das SSRF-Token automatisch auf den Wert, der in den voreingestellten Variablen AWS_SESSION_TOKEN oder AWS_CONTAINER_AUTHORIZATION_TOKEN Umgebungsvariablen festgelegt ist (letztere Variable für Lambda-Funktionen mit aktivierter Funktion). SnapStart Alternativ können Sie die AWS_TOKEN Umgebungsvariable stattdessen mit einem beliebigen Wert für Ihre Lambda-Funktion definieren, da diese Variable Vorrang vor den anderen beiden hat. Wenn Sie die AWS_TOKEN Umgebungsvariable verwenden möchten, müssen Sie diese Umgebungsvariable mit einem lambda:UpdateFunctionConfiguration Aufruf festlegen.

  3. Fügen Sie der Funktion eine Ebene hinzu

    Hängen Sie die Layer-Version an Ihre Lambda-Funktion an:

    # Attach the layer version to the Lambda function aws lambda update-function-configuration \ --function-name $LAMBDA_ARN \ --layers "$LAYER_VERSION_ARN"
  4. Funktionscode aktualisieren

    Aktualisieren Sie Ihre Lambda-Funktion so, dass http://localhost:2773/secretsmanager/get?secretId=MyTest bei der Abfrage der X-Aws-codes-Secrets-Token Header-Wert auf den Wert des SSRF-Tokens gesetzt ist, das aus einer der oben genannten Umgebungsvariablen stammt, um das Geheimnis abzurufen. Stellen Sie sicher, dass Sie in Ihrem Anwendungscode eine Wiederholungslogik implementieren, um Verzögerungen bei der Initialisierung und Registrierung der Lambda-Erweiterung auszugleichen.

  5. Testen der Funktion

    Rufen Sie die Lambda-Funktion auf, um zu überprüfen, ob das Geheimnis korrekt abgerufen wird.

Rufen Sie Geheimnisse ab mit dem AWS Anbieter für Workload-Anmeldeinformationen

Um ein Geheimnis abzurufen, rufen Sie den lokalen Endpunkt des AWS Workload Credentials Providers mit dem geheimen Namen oder ARN als Abfrageparameter auf. Standardmäßig ruft der AWS Workload Credentials Provider die AWSCURRENT Version des Geheimnisses ab. Um eine andere Version abzurufen, verwenden Sie entweder den Parameter VersionStage oder VersionID.

Wichtig

Um den AWS Workload Credentials Provider zu schützen, müssen Sie in jede Anfrage einen SSRF-Token-Header aufnehmen:. X-Aws-Parameters-Secrets-Token Der AWS Workload Credentials Provider lehnt Anfragen ab, die diesen Header nicht oder die ein ungültiges SSRF-Token enthalten. Sie können den Namen des SSRF-Headers im anpassen. Konfigurieren Sie die AWS Anbieter für Workload-Anmeldeinformationen

Erforderliche Berechtigungen

Der AWS Workload Credentials Provider verwendet das AWS SDK für Rust, das die Anbieterkette für AWS Anmeldeinformationen verwendet. Die Identität dieser IAM-Anmeldeinformationen bestimmt die Berechtigungen, die der AWS Workload Credentials Provider zum Abrufen von Geheimnissen hat.

  • secretsmanager:DescribeSecret

  • secretsmanager:GetSecretValue

Weitere Informationen zu Berechtigungen finden Sie unter Referenz zu den Berechtigungen für AWS Secrets Manager.

Wichtig

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

Beispiele für Anfragen

curl
Beispiel Beispiel — Holen Sie sich ein Geheimnis mit Curl

Das folgende Curl-Beispiel zeigt, wie Sie ein Geheimnis vom AWS Workload Credentials Provider abrufen. Das Beispiel basiert darauf, dass das SSRF 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'
Python
Beispiel Beispiel — Holen Sie sich ein Geheimnis mit Python

Das folgende Python-Beispiel zeigt, wie ein Geheimnis vom AWS Workload Credentials Provider abgerufen wird. Das Beispiel basiert darauf, dass das SSRF in einer Datei vorhanden ist, in der es vom Installationsskript gespeichert wird.

import requests import json # Function that fetches the secret from AWS Workload Credentials Provider 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}")

Grundlegendes zum RefreshNow-Parameter

Der AWS Workload Credentials Provider verwendet einen In-Memory-Cache, um geheime Werte zu speichern, die er regelmäßig aktualisiert. Standardmäßig erfolgt diese Aktualisierung, wenn Sie ein Geheimnis anfordern, nachdem die Gültigkeitsdauer (TTL) abgelaufen ist, normalerweise alle 300 Sekunden. Dieser Ansatz kann jedoch manchmal zu veralteten Geheimwerten führen, insbesondere wenn ein Secret rotiert, bevor der Cacheeintrag abläuft.

Um diese Einschränkung zu umgehen, unterstützt der AWS Workload Credentials Provider einen Parameter, der refreshNow in der URL genannt wird. Sie können diesen Parameter verwenden, um eine sofortige Aktualisierung des Werts eines Geheimnisses zu erzwingen, den Cache zu umgehen und sicherzustellen, dass Sie über die aktuellsten Informationen verfügen.

Standardverhalten (ohnerefreshNow)
  • Verwendet zwischengespeicherte Werte, bis TTL abläuft

  • Aktualisiert Geheimnisse erst nach TTL (Standard 300 Sekunden)

  • Gibt möglicherweise veraltete Werte zurück, wenn Geheimnisse rotieren, bevor der Cache abläuft

Verhalten mit refreshNow=true
  • Umgeht den Cache vollständig

  • Ruft den neuesten geheimen Wert direkt aus Secrets Manager ab

  • Aktualisiert den Cache mit dem neuen Wert und setzt die TTL zurück

  • Stellt sicher, dass Sie immer den aktuellsten geheimen Wert erhalten

Force-refresh ein geheimer Wert

Wichtig

Der Standardwert von refreshNow ist false. Wenn auf gesetzttrue, überschreibt es die in der Konfigurationsdatei des AWS Workload Credentials Providers angegebene TTL und führt einen API-Aufruf an Secrets Manager durch.

curl
Beispiel Beispiel — Force-refresh ein Geheimnis, das Curl verwendet

Das folgende Curl-Beispiel zeigt, wie der AWS Workload Credentials Provider gezwungen wird, das Geheimnis zu aktualisieren. Das Beispiel basiert darauf, dass das SSRF 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&refreshNow=true'
Python
Beispiel Beispiel — Force-refresh ein Geheimnis mit Python

Das folgende Python-Beispiel zeigt, wie ein Geheimnis vom AWS Workload Credentials Provider abgerufen wird. Das Beispiel basiert darauf, dass das SSRF in einer Datei vorhanden ist, in der es vom Installationsskript gespeichert wird.

import requests import json # Function that fetches the secret from AWS Workload Credentials Provider 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&refreshNow=true" # 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}")

Mithilfe der Rollenverkettung können Geheimnisse kontenübergreifend abgerufen werden

Die Rollenverkettung ermöglicht es dem AWS Workload Credentials Provider, Geheimnisse von anderen AWS Konten abzurufen, indem er IAM-Rollen mit übernimmt. AWS STS AssumeRole Der AWS Workload Credentials Provider erstellt einen separaten Caching-Client und speichert ihn für jeden eindeutigen Rollen-ARN. Jeder Rollen-Client unterhält seinen eigenen unabhängigen Cache, sodass derselbe geheime Schlüssel, der mit verschiedenen Rollen abgerufen wurde, separate Cache-Einträge hat.

Erforderliche Berechtigungen

Um die Rollenverkettung zu verwenden, benötigen Sie Folgendes:

  • Die AWS Umgebungsanmeldedaten des Workload Credentials Providers müssen über eine sts:AssumeRole Berechtigung für den ARN der Zielrolle verfügen.

  • Die Zielrolle muss über secretsmanager:GetSecretValue secretsmanager:DescribeSecret Berechtigungen für die Geheimnisse verfügen, auf die Sie zugreifen möchten.

  • Die Vertrauensrichtlinie der Zielrolle muss zulassen, dass die Identität des AWS Workload Credentials Providers dies annimmt.

Rufen Sie kontoübergreifende Geheimnisse ab

Fügen Sie den roleArn Abfrageparameter in Ihre Anfrage an den AWS Workload Credentials Provider ein, um anzugeben, welche Rolle für den geheimen Abruf übernommen werden soll.

curl
Beispiel Beispiel — Cross-account geheim mit Curl
curl -v -H \ "X-Aws-Parameters-Secrets-Token: $(</var/run/awssmatoken)" \ 'http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID&roleArn=arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME'
Python
Beispiel Beispiel — Cross-account geheim mit Python
import requests def get_secret_cross_account(): secret_id = "YOUR_SECRET_ID" role_arn = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME" url = f"http://localhost:2773/secretsmanager/get?secretId={secret_id}&roleArn={role_arn}" with open('/var/run/awssmatoken') as fp: token = fp.read() headers = { "X-Aws-Parameters-Secrets-Token": token.strip() } try: response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: raise Exception(f"Status code {response.status_code} - {response.text}") except Exception as e: raise Exception(f"Error: {e}")

Konfiguration und Grenzen der Rollenverkettung

Konfigurieren Sie die Rollenverkettung mit der max_roles Option in Ihrer TOML-Konfigurationsdatei. Dadurch wird die maximale Anzahl gleichzeitig übernommener Rollen im Bereich von 1 bis 20 festgelegt. Die Standardeinstellung ist 20.

Wichtig

Angenommene Rollen werden nicht aus dem Rollencache des AWS Workload Credentials Providers entfernt. Sobald die maximale Anzahl von Rollen erreicht ist, werden Anfragen mit neuen Rollen-ARNs mit einem 400 Fehler zurückgewiesen, bis der AWS Workload Credentials Provider neu gestartet wird.

Fehlerantworten bei der Rollenverkettung
400

Das roleArn Format ist ungültig oder die maximale Anzahl übernommener Rollen wurde erreicht.

403

Der AWS STS AssumeRole-Aufruf ist fehlgeschlagen. Stellen Sie sicher, dass die Vertrauensrichtlinie der Zielrolle es zulässt, dass die Identität des AWS Workload Credentials Providers dies annimmt.

Pre-fetch Geheimnisse beim Start

Standardmäßig ruft der AWS Workload Credentials Provider Geheimnisse bei Bedarf ab, wenn Ihre Anwendung sie anfordert. Beim Prefetching lädt der AWS Workload Credentials Provider beim Start bestimmte Geheimnisse in den Cache, sodass Ihre Anwendung sofort darauf zugreifen kann, ohne auf den ersten API-Aufruf warten zu müssen. Pre-fetching wird als Hintergrundaufgabe ausgeführt — Der AWS Workload Credentials Provider beginnt sofort mit der Annahme von Anfragen und blockiert nicht, wenn der Prefetch abgeschlossen ist.

Sie können Geheimnisse, die vorab abgerufen werden sollen, auf zwei Arten angeben:

  • Explizite Geheimnisse — Listet bestimmte geheime IDs oder ARNs auf.

  • Tag-based Entdeckung — Entdecke Geheimnisse anhand des Tag-Schlüssels. Der AWS Workload Credentials Provider ruft alle Geheimnisse ab, die das angegebene Tag enthalten.

Erforderliche Berechtigungen

Zusätzlich zu den Standardberechtigungen zum Abrufen von Geheimnissen erfordert das Vorabrufen Folgendes:

  • secretsmanager:BatchGetSecretValue— Für alle Pre-Fetch-Operationen erforderlich.

  • secretsmanager:ListSecrets— Nur erforderlich, wenn die Tag-basierte Erkennung verwendet wird.

Konfigurieren des Vorabrufs

Fügen Sie Ihrer TOML-Konfigurationsdatei einen [capabilities.secrets_manager.prefetch] Abschnitt hinzu. Die folgenden Optionen sind verfügbar:

cache_buffer_ratio

Der maximale Anteil des Caches, der pro Client beim Prefetch gefüllt werden soll, liegt im Bereich von 0,1 bis 1,0. Die Standardeinstellung ist 0,8. Wenn das Pufferlimit erreicht ist, beendet der AWS Workload Credentials Provider das Vorabrufen der verbleibenden Secrets — er löscht keine vorhandenen Cache-Einträge. Geheimnisse, die während des Vorabrufs nicht geladen wurden, sind weiterhin auf Anfrage verfügbar.

max_jitter_seconds

Eine zufällige Verzögerung in Sekunden, bevor der Vorabruf beginnt, im Bereich von 0 bis 10. Der Standardwert ist 0. Verwenden Sie dies, um synchronisierte API-Aufrufe für die gesamte Flotte zu verhindern, wenn mehrere Anbieter gleichzeitig starten.

Beispiel Pre-fetch Konfiguration mit expliziten Geheimnissen
[capabilities.secrets_manager.prefetch] cache_buffer_ratio = 0.6 max_jitter_seconds = 5 secrets = [ { secret_id = "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-AbCdEf" }, { secret_id = "MyOtherSecret" }, ]
Beispiel Pre-fetch Konfiguration mit tagbasierter Erkennung
[capabilities.secrets_manager.prefetch] cache_buffer_ratio = 0.8 filter_tags = [ { key = "Environment" }, { key = "Team" }, ]

Sie können auch explizite Geheimnisse und Tag-basierte Erkennung in derselben Konfiguration kombinieren. Für kontoübergreifendes Prefetching fügen Sie das Feld hinzu. role_arn Weitere Informationen finden Sie unter Mithilfe der Rollenverkettung können Geheimnisse kontenübergreifend abgerufen werden.

Beispiel Pre-fetch Konfiguration mit kontoübergreifendem Zugriff
[capabilities.secrets_manager.prefetch] cache_buffer_ratio = 0.6 max_jitter_seconds = 5 secrets = [ { secret_id = "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-AbCdEf" }, { secret_id = "cross-account-secret", role_arn = "arn:aws:iam::987654321098:role/SecretAccessRole" }, ] filter_tags = [ { key = "Environment" }, { key = "Team", role_arn = "arn:aws:iam::987654321098:role/SecretAccessRole" }, ]

Konfigurieren Sie die AWS Anbieter für Workload-Anmeldeinformationen

Um die Konfiguration des AWS Workload Credentials Providers zu ändern, erstellen Sie eine https://toml.io/en/ TOML-Konfigurationsdatei und rufen Sie ./aws-workload-credentials-provider sm start --config config.toml dann auf.

Die Konfigurationsdatei unterstützt ein verschachteltes Format. Die Secrets Manager-Optionen befinden sich unter[capabilities.secrets_manager], mit Unterabschnitten für Cache- und Sicherheitseinstellungen. Die Protokollierungsoptionen befinden sich unter[logging].

Beispiel Beispiel für eine verschachtelte Konfigurationsdatei
[logging] log_level = "INFO" log_to_file = true [capabilities.secrets_manager] enabled = true http_port = 2773 region = "us-east-1" path_prefix = "/v1/" max_conn = 800 max_roles = 20 [capabilities.secrets_manager.cache] ttl_seconds = 300 cache_size = 1000 [capabilities.secrets_manager.security] ssrf_headers = ["X-Aws-Parameters-Secrets-Token", "X-Vault-Token"] ssrf_env_variables = ["AWS_TOKEN", "AWS_SESSION_TOKEN", "AWS_CONTAINER_AUTHORIZATION_TOKEN"]
Anmerkung

Flatkeys auf der Stammebene (z. B.http_port = 2773) werden aus Gründen der Abwärtskompatibilität mit vorhandenen Konfigurationsdateien weiterhin unterstützt.

Secrets Manager-Konfigurationsoptionen
enabled

Ob die Secrets Manager-Funktion aktiv ist: true oderfalse. Der Standardwert ist true.

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 AWS Workload Credentials Provider die Region anhand des SDK. Weitere Informationen finden Sie unter Spezifizieren Sie Ihre Anmeldeinformationen und die Standardregion im AWS SDK for Rust Developer Guide.

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 AWS Workload Credentials Provider zulässt, liegt im Bereich von 1 bis 1000. Die Standardeinstellung ist 800.

max_roles

Die maximale Anzahl gleichzeitiger IAM-Rollen für den kontoübergreifenden Zugriff im Bereich von 1 bis 20. Die Standardeinstellung ist 20. Weitere Informationen finden Sie unter Mithilfe der Rollenverkettung können Geheimnisse kontenübergreifend abgerufen werden.

Cache-Optionen ([capabilities.secrets_manager.cache])
ttl_seconds

Die TTL in Sekunden für die zwischengespeicherten Elemente im Bereich 0 bis 3600. Die Standardeinstellung ist 300. 0 gibt an, dass kein Caching stattfindet.

cache_size

Die maximale Anzahl von Geheimnissen, die im Cache gespeichert werden können, im Bereich von 1 bis 1000. Der Standardwert ist 1000.

Sicherheitsoptionen ([capabilities.secrets_manager.security])
ssrf_headers

Eine Liste von Header-Namen, die der Workload Credentials Provider auf das SSRF-Token überprüft AWS . Die Standardeinstellung ist "X-Aws-Parameters-Secrets-Token, X-Vault-Token“.

ssrf_env_variables

Eine Liste von Umgebungsvariablennamen, die der AWS Workload Credentials Provider in sequentieller Reihenfolge nach dem SSRF-Token überprüft. 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, AWS_CONTAINER_AUTHORIZATION_TOKEN“.

Protokollierungsoptionen ([logging])
log_level

Die in den Protokollen für den AWS Workload Credentials Provider angegebene Detailebene: DEBUG, INFO, WARN, ERROR oder NONE. Die Standardeinstellung ist INFO.

log_to_file

Ob Sie sich bei einer Datei anmelden möchten oder stdout/stderr: true oderfalse. Der Standardwert ist true.

Optionale Funktionen

Der AWS Workload Credentials Provider kann mit optionalen Funktionen erstellt werden, indem das --features Flag an übergeben wirdcargo build. Die verfügbaren Funktionen sind:

Build-Funktionen
prefer-post-quantum

Stellt X25519MLKEM768 den Algorithmus für den Schlüsselaustausch mit der höchsten Priorität her. Andernfalls ist er verfügbar, aber nicht mit der höchsten Priorität. X25519MLKEM768ist ein hybrider Algorithmus für den Schlüsselaustausch nach der Quantensicherheit.

fips

Beschränkt die vom Anbieter verwendeten Verschlüsselungssammlungen ausschließlich auf Chiffren. FIPS-approved

Protokollierung

Lokale Protokollierung

Der AWS Workload Credentials Provider protokolliert Fehler lokal in der Datei logs/secrets_manager_provider.log oder in, stdout/stderr abhängig von der log_to_file Konfigurationsvariablen. Wenn Ihre Anwendung den AWS Workload Credentials Provider aufruft, um ein Geheimnis abzurufen, werden diese Aufrufe im lokalen Protokoll angezeigt. Sie erscheinen nicht in den CloudTrail Protokollen.

Rotation protokollieren

Der AWS Workload Credentials Provider erstellt eine neue Protokolldatei, wenn die Datei 10 MB erreicht, und er speichert insgesamt bis zu fünf Protokolldateien.

AWS Dienstprotokollierung

Das Protokoll geht nicht an Secrets Manager, CloudTrail, oder CloudWatch. Anfragen zum Abrufen von Geheimnissen vom AWS Workload Credentials Provider erscheinen nicht in diesen Protokollen. Wenn der AWS Workload Credentials Provider Secrets Manager aufruft, um ein Geheimnis abzurufen, wird dieser Anruf CloudTrail mit einer User-Agent-Zeichenfolge aufgezeichnet, die Folgendes enthältaws-workload-credentials-provider.

Sie können die Protokollierungsoptionen in der konfigurierenKonfigurieren Sie die AWS Anbieter für Workload-Anmeldeinformationen.

Sicherheitsüberlegungen

Domäne des Vertrauens

Bei einer lokalen Anbieterarchitektur ist die Vertrauensdomäne der Ort, an dem auf den Provider-Endpunkt und das SSRF-Token zugegriffen werden kann, was normalerweise der gesamte Host ist. Die Vertrauensdomäne für den AWS Workload Credentials Provider sollte mit der Domain übereinstimmen, in der die Secrets Manager-Anmeldeinformationen verfügbar sind, um das gleiche Sicherheitsniveau aufrechtzuerhalten. Auf Amazon EC2 wäre beispielsweise die Vertrauensdomäne für den AWS Workload Credentials Provider dieselbe wie die Domain der Anmeldeinformationen, wenn Rollen für Amazon EC2 verwendet werden.

Wichtig

Sicherheitsbewusste Anwendungen, die noch keine anbieterbasierte Lösung verwenden, bei der die Secrets Manager-Anmeldeinformationen für die Anwendung gesperrt sind, sollten die Verwendung der AWS sprachspezifischen SDKs oder Caching-Lösungen in Betracht ziehen. Weitere Informationen finden Sie unter Get Secrets. https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html