Zum Inhalt springen

SSE-C in Object Storage mit dem Secrets Manager verwenden

Verschlüsselungsschlüssel generieren und speichern

Abschnitt betitelt „Verschlüsselungsschlüssel generieren und speichern“

Erstellen Sie zunächst einen sicheren Zufallsschlüssel und den zugehörigen MD5-Hash und speichern Sie beide Werte im STACKIT Secrets Manager. Öffnen Sie ein Terminal und führen Sie die folgenden Befehle aus. Die Befehle generieren die Werte und schreiben diese direkt in den Secrets Manager.

Terminal-Fenster
# 1\. Einen 32-Byte (256-Bit) Zufallsschlüssel generieren und Base64-kodieren
KEY_B64=$(openssl rand 32 | base64)
# 2\. Den MD5-Hash des RAW-Schlüssels generieren und diesen Hash Base64-kodieren
KEY_MD5_B64=$(echo -n "$KEY_B64" | base64 --decode | openssl dgst -md5 -binary | base64)
# 3\. Die Schlüssel anzeigen
echo "Base64 Key: $KEY_B64" echo "Base64 MD5: $KEY_MD5_B64"

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

Terminal-Fenster
boto3 hvac

Führen Sie anschließend 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 Rechner. Benennen Sie die Datei beispielsweise ssec_secrets_manager_example.py.

Konfigurieren Sie als Nächstes das Skript passend für Ihre Umgebung.

Öffnen Sie die Datei ssec_secrets_manager_example.py in einem Texteditor und aktualisieren Sie die Konfigurationsvariablen am Anfang der Datei. Stellen Sie sicher, dass die folgenden Werte korrekt gesetzt sind:

## --- KONFIGURATION ---
# Bitte ändern Sie die folgenden Werte entsprechend Ihrem Setup.
S3_ENDPOINT_URL = "[https://object.storage.eu01.onstackit.cloud](https://object.storage.eu01.onstackit.cloud)"
S3_BUCKET_NAME = ""
# Dies ist der Name der Datei im Object Storage.
OBJECT_KEY = "my-secret-object.txt"
# Dies ist der Name der lokalen Datei, die in diesem Beispiel erstellt und hochgeladen wird.
FILE_TO_UPLOAD = "secret-upload.txt"
# Dies ist der Name der lokalen Datei, in der der heruntergeladene Inhalt gespeichert wird.
DOWNLOAD_FILE_PATH = "secret-download.txt"
# Secrets Manager Konfiguration
VAULT_ADDR = "[https://prod.sm.eu01.stackit.cloud](https://prod.sm.eu01.stackit.cloud)"
VAULT_MOUNT_POINT = ""
VAULT_SECRET_PATH = ""

Umgebungsvariablen setzen

Exportieren Sie als Nächstes die folgenden Umgebungsvariablen in Ihrem Terminal. Das Skript verwendet diese, um sicher auf Ihre Zugangsdaten zuzugreifen, ohne sensible Werte fest im Code zu hinterlegen. Ersetzen Sie die Platzhalter durch Ihre tatsächlichen Zugangsdaten.

Terminal-Fenster
## For Secrets Manager
export VAULT_USERNAME="secret-manager-username"
export VAULT_PASSWORD="seceret-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"

Wenn die Konfiguration abgeschlossen ist, führen Sie das Skript aus:

Terminal-Fenster
python ssec_secrets_manager_example.py

Nachdem das Skript beendet ist, überprüfen Sie dessen Aktionen an zwei Stellen:

  • Lokaler Ordner: Es sollten zwei identische Dateien vorhanden sein:
    • secret-upload.txt: Die ursprüngliche Datei, die vom Skript erstellt und hochgeladen wurde.
    • secret-download.txt: Die entschlüsselte Kopie, die aus dem STACKIT Object Storage heruntergeladen wurde.
  • Object Storage bucket: Das verschlüsselte Objekt (my-secret-object.txt) ist nun in Ihrem Bucket gespeichert. 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 mit Standard-AWS-CLI-Befehlen herunterzuladen. Diese Versuche werden fehlschlagen und damit die Wirksamkeit von SSE-C demonstrieren.

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 (wird fehlschlagen)

Abschnitt betitelt „2. Versuch mit aws s3api get-object ohne Schlüssel (wird fehlschlagen)“

Der Low-Level-Befehl s3api wird ebenfalls fehlschlagen, wenn Sie den Verschlüsselungsschlüssel nicht angeben.

Terminal-Fenster
## Dieser Befehl wird fehlschlagen
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. Korrekter Download mit aws s3api get-object und Schlüsseln (wird erfolgreich sein)

Abschnitt betitelt „3. Korrekter Download mit aws s3api get-object und Schlüsseln (wird erfolgreich sein)“

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

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 als Nächstes den Befehl get-object mit den erforderlichen SSE-C-Parametern aus:

Terminal-Fenster
## Dieser Befehl wird erfolgreich sein
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. Dies beweist, dass der Zugriff nur gewährt wird, wenn der korrekte Verschlüsselungsschlüssel bereitgestellt wird.