Zum Inhalt springen

Verwenden Sie SSE-C im Object Storage mit dem Secrets Manager

Zuletzt aktualisiert am

Generieren und speichern Sie einen Verschlüsselungsschlüssel

Abschnitt betitelt „Generieren und speichern Sie einen Verschlüsselungsschlüssel“

Erstellen Sie zunächst einen sicheren Zufallsschlüssel und den entsprechenden MD5-Hash und speichern Sie dann beide Werte im Secrets Manager.
Öffnen Sie ein Terminal und führen Sie die folgenden Befehle aus. Die Befehle generieren die Werte und schreiben sie direkt an den Secrets Manager.

Terminal-Fenster
# 1\. Generate a 32-byte (256-bit) random key and base64-encode it
KEY_B64=$(openssl rand 32 | base64)
# 2\. Generate the MD5 hash of the RAW key and base64-encode that hash
KEY_MD5_B64=$(echo -n "$KEY_B64" | base64 --decode | openssl dgst -md5 -binary | base64)
# 3\. Display the keys
echo "Base64 Key: $KEY_B64"
echo "Base64 MD5: $KEY_MD5_B64"

Installieren Sie die Anforderungen für das Python-Skript

Abschnitt betitelt „Installieren Sie die Anforderungen für das Python-Skript“

Um die erforderlichen Abhängigkeiten zu installieren, erstellen Sie eine Datei mit dem Namen „requirements.txt“ im Stammverzeichnis Ihres Projekts Verzeichnis und fügen Sie die folgenden Zeilen hinzu:

Terminal-Fenster
boto3 hvac

Führen Sie dann den folgenden Befehl in Ihrem Terminal aus:

Terminal-Fenster
pip install -r requirements.txt

Speichern Sie den in diesem Tutorial bereitgestellten Python-Code in einer Datei auf Ihrem lokalen Computer. Zum Beispiel Name die Datei ssec_secrets_manager_example.py.

Konfigurieren Sie als Nächstes das Skript entsprechend Ihrer Umgebung.

Öffnen Sie die Datei ssec_secrets_manager_example.py in einem Texteditor und aktualisieren Sie die Konfiguration Variablen oben in der Datei. Stellen Sie sicher, dass die folgenden Werte richtig eingestellt sind:

## --- CONFIGURATION ---
S3_ENDPOINT_URL = "https://object.storage.eu01.onstackit.cloud"
S3_BUCKET_NAME = ""
# This is the name of the file in the object storage.
OBJECT_KEY = "my-secret-object.txt"
# This is the name of the local file that will be created and uploaded in this example.
FILE_TO_UPLOAD = "secret-upload.txt"
# This is the name of the local file where the downloaded content will be saved.
DOWNLOAD_FILE_PATH = "secret-download.txt"
# Secrets Manager configuration
VAULT_ADDR = "https://prod.sm.eu01.stackit.cloud"
VAULT_MOUNT_POINT = ""
VAULT_SECRET_PATH = ""

Umgebungsvariablen festlegen

Exportieren Sie als Nächstes die folgenden Umgebungsvariablen in Ihr Terminal. Das Skript verwendet sie auf sichere Weise Greifen Sie auf Ihre Anmeldeinformationen zu, ohne sensible Werte hart zu codieren. Ersetzen Sie die Platzhalter durch Ihre tatsächliche Zeugnisse.

Terminal-Fenster
## For Secrets Manager
export VAULT_USERNAME="secret-manager-username"
export VAULT_PASSWORD="secret-manager-password"
# For Object Storage or save it in (e.g., \~/.aws/credentials)
export AWS_ACCESS_KEY_ID="YOUR_S3_ACCESS_KEY"
export AWS_SECRET_ACCESS_KEY="YOUR_S3_SECRET_KEY"

Führen Sie nach Abschluss der Konfiguration das Skript aus:

Terminal-Fenster
python ssec_secrets_manager_example.py

Überprüfen Sie nach Abschluss des Skripts seine Aktionen an zwei Stellen:

  • Lokaler Ordner: Es sollten zwei identische Dateien vorhanden sein:
    • secret-upload.txt: Die vom Skript erstellte und hochgeladene Originaldatei.
    • secret-download.txt: Die entschlüsselte Kopie, die vom Object Storage heruntergeladen wurde.
  • Object Storage-Bucket: Das verschlüsselte Objekt (my-secret-object.txt) wird jetzt in Ihrem gespeichert Eimer. Bestätigen Sie dies mit der AWS CLI:
Terminal-Fenster
aws s3 ls s3://<your-bucket-name>/ --endpoint-url <your-endpoint-url>

Um zu beweisen, dass das Objekt verschlüsselt ist und ohne den Schlüssel nicht darauf zugegriffen werden kann, versuchen Sie, es herunterzuladen mit standardmäßigen AWS CLI-Befehlen.
Diese Versuche scheitern, was die Wirksamkeit von SSE-C zeigt.

  1. Versuch mit AWS s3 cp (fehlschlägt)

    Der High-Level-Befehl s3 cp unterstützt die erforderlichen SSE-C-Header nicht.

    Terminal-Fenster
    ## This command will fail
    aws s3 cp s3://<your-bucket-name>/my-secret-object.txt ./download-fail-1.txt --endpoint-url <your-endpoint-url>

    Erwarteter Fehler:

    Terminal-Fenster
    An error occurred (400) when calling the HeadObject operation: Bad Request.
  2. Versuch mit AWS s3api get-object ohne Schlüssel (fehlschlägt)

    Der Low-Level-Befehl s3api schlägt auch fehl, wenn Sie den Verschlüsselungsschlüssel nicht angeben.

    Terminal-Fenster
    ## This command will fail
    aws s3api get-object --bucket <your-bucket-name> --key my-secret-object.txt ./download-fail-2.txt --endpoint-url <your-endpoint-url>

    Erwarteter Fehler:

    Terminal-Fenster
    An error occurred (InvalidRequest) when calling the GetObject operation:
    The object was stored using a form of Server Side Encryption.
    The correct parameters must be provided to retrieve the object.
  3. Download mit AWS s3api get-object und dem Verschlüsselungsschlüssel (erfolgreich)

    Um die Datei erfolgreich mit der AWS CLI herunterzuladen, müssen Sie denselben Schlüssel und MD5-Hash angeben wurden im Python-Skript verwendet.

    Exportieren Sie zunächst die Werte als Umgebungsvariablen:

    Terminal-Fenster
    export KEY_B64="YOUR-B64-KEY"
    export KEY_MD5_B64="YOUR-MD5-B64-KEY"

    Führen Sie anschließend den Befehl get-object mit den erforderlichen SSE-C-Parametern aus:

    Terminal-Fenster
    ## This command will succeed
    aws s3api get-object \
    --bucket \
    --key my-secret-object.txt \
    --sse-customer-algorithm AES256 \
    --sse-customer-key "$KEY_B64" \
    --sse-customer-key-md5 "$KEY_MD5_B64" \
    --endpoint-url \
    ./download-success.txt

Dieser Befehl lädt das Objekt herunter und entschlüsselt es. Dadurch wird bewiesen, dass der Zugriff nur dann gewährt wird, wenn das richtige Objekt vorliegt Der Verschlüsselungsschlüssel wird bereitgestellt.