Verwenden Sie SSE-C im Object Storage mit dem Secrets Manager
Zuletzt aktualisiert am
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Ein aktives STACKIT-Projekt mit aktiviertem Object Storage und einem erstellten Bucket. Anweisungen finden Sie unter Object Storage aktivieren und Erstellen und verwalten Sie Object Storage-Buckets.
- Anmeldeinformationen für den Object Storage-Zugriff. Anweisungen finden Sie unter Erstellen Sie Object Storage-Anmeldeinformationen.
- Zugriff auf STACKIT Secrets Manager mit einem konfigurierten Mount-Punkt und einem vorhandenen geheimen Pfad.
- Python 3 und
pipsind auf Ihrem System installiert. opensslist auf Ihrem System installiert.
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.
# 1\. Generate a 32-byte (256-bit) random key and base64-encode itKEY_B64=$(openssl rand 32 | base64)
# 2\. Generate the MD5 hash of the RAW key and base64-encode that hashKEY_MD5_B64=$(echo -n "$KEY_B64" | base64 --decode | openssl dgst -md5 -binary | base64)
# 3\. Display the keysecho "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:
boto3 hvacFühren Sie dann den folgenden Befehl in Ihrem Terminal aus:
pip install -r requirements.txtSpeichern Sie das Python-Beispielskript
Abschnitt betitelt „Speichern Sie das Python-Beispielskript“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 das Beispiel-Python-Skript
Abschnitt betitelt „Konfigurieren Sie das Beispiel-Python-Skript“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 configurationVAULT_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.
## For Secrets Managerexport 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 das Skript aus
Abschnitt betitelt „Führen Sie das Skript aus“Führen Sie nach Abschluss der Konfiguration das Skript aus:
python ssec_secrets_manager_example.pyÜberprüfen Sie die Ergebnisse
Abschnitt betitelt „Überprüfen Sie die Ergebnisse“Ü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:
aws s3 ls s3://<your-bucket-name>/ --endpoint-url <your-endpoint-url>Beweisen Sie die Verschlüsselung
Abschnitt betitelt „Beweisen Sie die Verschlüsselung“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.
-
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 failaws 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. -
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 failaws 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. -
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-objectmit den erforderlichen SSE-C-Parametern aus:Terminal-Fenster ## This command will succeedaws 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.