Zum Inhalt springen

Verschlüsselung

Alle Daten, die in unserem STACKIT Object Storage gespeichert werden, sind im Ruhezustand mit AES256 verschlüsselt. Zusätzlich haben Sie die Optionen, serverseitige Verschlüsselung (SSE) oder serverseitige Verschlüsselung mit vom Kunden bereitgestellten Schlüsseln (SSE-C) zu verwenden.

Die serverseitige Verschlüsselung bietet Ihnen die Möglichkeit, Objekte während des Uploads zu verschlüsseln. Wenn Sie eine S3-Anfrage zum Speichern eines Objekts stellen, verschlüsselt das Storage-Backend das Objekt automatisch mit einem eindeutigen Schlüssel. Die Verschlüsselungsschlüssel werden vom Storage-Backend verwaltet.

Um ein Objekt während des Uploads mit einem eindeutigen Schlüssel zu verschlüsseln, können Sie den folgenden Header verwenden:

x-amz-server-side-encryption

SSE wird für die folgenden Operationen unterstützt:

  • PUT Object
  • PUT Object - Copy
  • Initiate Multipart Upload

SSE-C bietet die Möglichkeit, ein Objekt mit einem eindeutigen Schlüssel zu verschlüsseln, den Sie selbst verwalten.

Um SSE-C zu nutzen, müssen Sie die folgenden Header verwenden:

  • x-amz-server-side-encryption-customer-algorithm
    • Verschlüsselungsalgorithmus. Der Wert muss AES256 sein.
  • x-amz-server-side-encryption-customer-key
    • Verschlüsselungsschlüssel, der zum Verschlüsseln oder Entschlüsseln des Objekts verwendet wird. Muss 256 Bit groß und Base64-kodiert sein.
  • x-amz-server-side-encryption-customer-key
    • MD5-Digest Ihres Verschlüsselungsschlüssels, um sicherzustellen, dass Ihr Verschlüsselungsschlüssel korrekt übertragen wurde. Muss 128 Bit groß und Base64-kodiert sein.

SSE-C wird für die folgenden Operationen unterstützt:

  • GET Object
  • PUT Object
  • PUT Object - Copy
  • HEAD Object
  • Initiate Multipart Upload
  • Upload Part
  • Upload Part - Copy

Beachten Sie bei der Verwendung von SSE-C, dass das ETag nicht die MD5-Summe der Objektdaten ist.

**Wichtig: Wenn Sie Customer-Provided Keys verwenden, liegt die Verantwortung für die Verwaltung dieser Schlüssel vollständig bei Ihnen.

Diese beinhaltet:

  • Sie müssen die Zuordnung zwischen Schlüsseln und Objekten selbst nachverfolgen.
  • Wenn die Versionierung aktiviert ist, wird empfohlen, für jede Version einen eindeutigen Schlüssel zu verwenden. Sie müssen die Zuordnung zwischen Objektversionen und Schlüsseln selbst verwalten.
  • Die Schlüssel müssen von Ihnen selbst rotiert werden.

Um ein Objekt mit s3cmd hochzuladen und es automatisch mit einem vom Storage-Backend verwalteten Schlüssel zu verschlüsseln, geben Sie beim Upload die Option “—server-side-encryption” an:

Terminal-Fenster
s3cmd put ./my-encrypted-object s3://directory1 --server-side-encryption

Wenn Sie immer serverseitige Verschlüsselung verwenden möchten, können Sie einfach die folgende Zeile zu ~/.s3cfg hinzufügen:

server_side_encryption = true

Hinweis: Das gpg-Paket ist zwingend erforderlich, um SSE-C mit s3cmd zu verwenden.

Verschlüsselungsschlüssel mit dem Konfigurationsassistenten konfigurieren:
Abschnitt betitelt „Verschlüsselungsschlüssel mit dem Konfigurationsassistenten konfigurieren:“

Geben Sie ein Verschlüsselungspasswort an und geben Sie den Pfad zu gpg an:

Terminal-Fenster
...
Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: enter-your-encryption-key-here
Path to GPG program [/usr/bin/gpg]:
...
Den Schlüssel manuell in der Konfigurationsdatei angeben:
Abschnitt betitelt „Den Schlüssel manuell in der Konfigurationsdatei angeben:“

Fügen Sie die folgenden Zeilen zu Ihrer s3cmd-Konfigurationsdatei hinzu (Standard: ~/.s3cfg).
Die erste Zeile enthält den Pfad zu gpg, der Standardwert ist /usr/bin/gpg.
Geben Sie den Verschlüsselungsschlüssel, den Sie verwenden möchten, in die Zeile ein, die mit gpg_passphrase beginnt.

Terminal-Fenster
gpg_command = /usr/bin/gpggpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)sgpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)sgpg_passphrase = enter-your-encryption-key-here
Ein Objekt während des Uploads mit dem bei der Konfiguration angegebenen Schlüssel verschlüsseln
Abschnitt betitelt „Ein Objekt während des Uploads mit dem bei der Konfiguration angegebenen Schlüssel verschlüsseln“

Sobald Sie s3cmd für die Nutzung von SSE-C konfiguriert haben, können Sie bei allen unterstützten Operationen die Option “-e” angeben, zum Beispiel beim Hochladen eines Objekts in einen Bucket und dessen Verschlüsselung mit dem bereitgestellten Schlüssel:

Terminal-Fenster
s3cmd -e put ./my-encrypted-object s3://directory1

Um zu prüfen, ob die Verschlüsselung korrekt funktioniert hat, können Sie die Passphrase vorübergehend aus Ihrer Konfiguration entfernen und versuchen, die Datei zu lesen.

  1. Entfernen Sie die gpg_passphrase in der ~/.s3cfg.

  2. Versuchen Sie, das Objekt per GET abzurufen:

    Terminal-Fenster
    s3cmd get s3://directory1/my-encrypted-object ./my-encrypted-object-download
  3. Überprüfen Sie den Dateityp mit file:

    Terminal-Fenster
    file my-encrypted-object

    Die Ausgabe sollte so aussehen: my-encrypted-object: GPG symmetrically encrypted data (AES256 cipher)

  4. Versuchen Sie, die Datei mit cat zu lesen:

    Terminal-Fenster
    cat my-encrypted-object

    Wenn die Ausgabe so ähnlich aussieht, ist Ihr Objekt verschlüsselt:

    � �Q�)�+�W��N���C�g��]4�$t�y��Vg:Gh6Y�K�r��W���#}�.e#y�#��+��m��J�Q����p0W���
  5. Fügen Sie Ihre Passphrase wieder in die ~/.s3cfg ein.

  6. Rufen Sie das Objekt erneut per GET ab:

    Terminal-Fenster
    s3cmd get s3://directory1/my-encrypted-object ./my-decrypted-object

    Wenn die Passphrase wieder eingetragen ist, wird die Datei während der GET-Operation automatisch entschlüsselt.

  7. Überprüfen Sie den Dateityp mit file:
    file my-decrypted-object

    Die Ausgabe sollte so aussehen:
    my-decrypted-object: ASCII text

  8. Versuchen Sie, die Datei mit cat zu lesen:

    Terminal-Fenster
    cat my-decrypted-object

    Wenn die Ausgabe so ähnlich aussieht, wurde Ihr Objekt bei der GET-Operation automatisch entschlüsselt:

    hallo