Mit SSE-C ("Server-Side Encryption with Customer-provided keys") ist es möglich, Daten vom S3-Service verschlüsseln zu lassen, indem man beim Hochladen der Daten einen eigenen Key für die Verschlüsselung bereitstellt. Um die Daten nach dem Hochladen entschlüsseln zu können, muss derselbe Key erneut angegeben werden. Metadaten werden mit SSE-C nicht verschlüsselt.
Beachten Sie, dass der S3-Service den Key nicht speichert. Nachdem die Daten verschlüsselt wurden, verwirft der S3-Service den Key. Wenn Sie den Key verlieren sollten, können Sie nicht mehr auf die damit verschlüsselten Daten zugreifen.
Die Befehle unterscheiden sich je nach S3-kompatiblem Tool. Die folgenden Schritte werden mittels Beispielbefehlen für MinIO Client und AWS CLI erklärt.
-
Generieren Sie einen zufälligen 32-Byte-Schlüssel für die Verschlüsselung
Für den MinIO Client wird der Key in hexadezimaler Form erstellt und in einer neuen Datei gespeichert.
Für die AWS CLI wird der Key von seiner hexadezimalen Form in eine binäre Form umgewandelt und in einer neuen Datei gespeichert.
# MinIO Client echo $(openssl rand -hex 32) > ~/enc.key # AWS CLI echo $(openssl rand -hex 32) | xxd -r -p > ~/enc.key
-
Speichern Sie den eben erstellten Key dauerhaft
Wenn Sie mit dem Key Daten verschlüsseln und den Key anschließend verlieren, ist es NICHT mehr möglich die Daten zu entschlüsseln. Speichern Sie den Key daher an einem sicheren Ort!
Key anzeigen:
# MinIO Client cat ~/enc.key # AWS CLI xxd -p ~/enc.key | tr -d '\n'
Kopieren Sie den Key in hexadezimaler Form aus dem Output und speichern Sie den Key an einem sicheren Ort.
-
Key als Umgebungsvariable speichern
In den folgenden Schritten wird der Key über eine Umgebungsvariable angegeben. Erstellen Sie dafür jetzt die entsprechende Variable:
-
Key als temporäre Umgebungsvariable speichern:
# MinIO Client export KEY="$(cat ~/enc.key)" # AWS CLI export KEY="$HOME/enc.key"
-
Key als dauerhafte Umgebungsvariable speichern:
# MinIO Client echo 'export KEY="$(cat ~/enc.key)"' >> ~/.bashrc # AWS CLI echo 'export KEY="$HOME/enc.key"' >> ~/.bashrc
Konfiguration neuladen:
source ~/.bashrc
-
-
Daten hochladen und verschlüsseln
-
Beim Hochladen der Datei, muss der Key für die Verschlüsselung mittels
--enc-c
ergänzt werden.# Eine einzelne neue Datei hochladen und verschlüsseln mc cp example-file.txt <alias_name>/<bucket_name>/example-file.txt \ --enc-c <alias_name>/=$KEY # Mehrere neue Dateien hochladen und alle verschlüsseln mc cp file-1.txt file-2.txt file-3.txt \ <alias_name>/<bucket_name> \ --enc-c <alias_name>/=$KEY # Mehrere neue Dateien hochladen und nur einzelne Dateien verschlüsseln ## Option 1 - "--enc-c" für jede Datei, die verschlüsselt werden soll mc cp file-1.txt file-2.txt file-3.txt \ <alias_name>/<bucket_name> \ --enc-c <alias_name>/<bucket_name>/file-1.txt=$KEY \ --enc-c <alias_name>/<bucket_name>/file-2.txt=$KEY ## Option 2 - "--enc-c" für alle Dateien, die einen bestimmten Präfix besitzen mc cp <prefix> file-3.txt \ <alias_name>/<bucket_name> \ --recursive \ --enc-c <alias_name>/<bucket_name>/<prefix>/=$KEY
Option 2 verwendet folgenden Verzeichnisbaum:
<directory>/ ├─ <prefix>/ │ ├─ file-1.txt │ └─ file-2.txt └─ file-3.txt
-
# Eine einzelne neue Datei hochladen und verschlüsseln aws s3 cp example-file.txt s3://<bucket_name>/example.txt \ --sse-c AES256 \ --sse-c-key fileb://$KEY # Mehrere Dateien aus einem Ordner gleichzeitig hochladen und alle verschlüsseln aws s3 cp <directory_path> s3://<bucket_name>/ \ --recursive \ --sse-c AES256 \ --sse-c-key fileb://$KEY
-
-
Verschlüsselte Datei anzeigen und herunterladen
Damit Sie sich eine verschlüsselte Datei herunterladen oder anzeigen lassen können, müssen Sie denselben Key angeben, der für die Verschlüsselung verwendet wurde.
-
# Anzeigen mc cat <alias_name>/<bucket_name>/example-file.txt \ --enc-c <alias_name>/=$KEY # Herunterladen mc cp <alias_name>/<bucket_name>/example-file.txt example-file.txt \ --enc-c <alias_name>/=$KEY
-
# Anzeigen aws s3 cp s3://<bucket_name>/example-file.txt - \ --sse-c AES256 \ --sse-c-key fileb://$KEY # Herunterladen aws s3 cp s3://<bucket_name>/example-file.txt example-file.txt \ --sse-c AES256 \ --sse-c-key fileb://$KEY
-
Sie sollten nun verschlüsselte Daten in Ihrem Bucket hinzufügen können.
Nächste Schritte: