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.
# 1\. Einen 32-Byte (256-Bit) Zufallsschlüssel generieren und Base64-kodierenKEY_B64=$(openssl rand 32 | base64)
# 2\. Den MD5-Hash des RAW-Schlüssels generieren und diesen Hash Base64-kodierenKEY_MD5_B64=$(echo -n "$KEY_B64" | base64 --decode | openssl dgst -md5 -binary | base64)
# 3\. Die Schlüssel anzeigenecho "Base64 Key: $KEY_B64" echo "Base64 MD5: $KEY_MD5_B64"Anforderungen für das Python-Skript installieren
Abschnitt betitelt „Anforderungen für das Python-Skript installieren“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:
boto3 hvacFühren Sie anschließend den folgenden Befehl in Ihrem Terminal aus:
pip install -r requirements.txtBeispiel-Python-Skript speichern
Abschnitt betitelt „Beispiel-Python-Skript speichern“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.
Beispiel-Python-Skript konfigurieren
Abschnitt betitelt „Beispiel-Python-Skript konfigurieren“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 KonfigurationVAULT_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.
## For Secrets Managerexport 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"Skript ausführen
Abschnitt betitelt „Skript ausführen“Wenn die Konfiguration abgeschlossen ist, führen Sie das Skript aus:
python ssec_secrets_manager_example.pyErgebnisse überprüfen
Abschnitt betitelt „Ergebnisse überprüfen“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:
aws s3 ls s3://<your-bucket-name>/ --endpoint-url <your-endpoint-url>Verschlüsselung nachweisen
Abschnitt betitelt „Verschlüsselung nachweisen“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.
1. Versuch mit aws s3 cp (wird fehlschlagen)
Abschnitt betitelt „1. Versuch mit aws s3 cp (wird fehlschlagen)“Der High-Level-Befehl s3 cp unterstützt die erforderlichen SSE-C-Header nicht.
## 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:
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.
## Dieser Befehl wird fehlschlagenaws s3api get-object --bucket <your-bucket-name> --key my-secret-object.txt ./download-fail-2.txt --endpoint-url <your-endpoint-url>Erwarteter Fehler:
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:
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:
## Dieser Befehl wird erfolgreich seinaws 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.txtDieser 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.