Daten mit SSE-C verschlüsseln

Last change on 2024-12-06 • Created on 2024-10-30 • ID: ST-B9E67

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.

  1. 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

  1. 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.


  1. 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

  1. Daten hochladen und verschlüsseln

    • MinIO Client

      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

    • AWS CLI

      # 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

  1. 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.

    • MinIO Client

      # 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

    • AWS CLI

      # 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: