Skip to main content
  • »
  • S3 »
  • Szyfrowanie po stronie serwera z kluczami zarządzanymi przez klienta (SSE-C) w NSIS

Szyfrowanie po stronie serwera z kluczami zarządzanymi przez klienta (SSE-C) w NSIS

Wprowadzenie

Ten przewodnik wyjaśnia, jak szyfrować obiekty po stronie serwera za pomocą SSE-C.

Szyfrowanie po stronie serwera jest sposobem ochrony danych w stanie spoczynku. SSE szyfruje tylko dane obiektu. Korzystanie z szyfrowania po stronie serwera z kluczami szyfrowania dostarczonymi przez klienta (SSE-C) pozwala ustawić własne klucze do szyfrowania. Serwer zarządza szyfrowaniem podczas zapisu na dyskach i deszyfrowaniem podczas uzyskiwania dostępu do obiektów. Jedyną rzeczą, którą musisz zarządzać, jest dostarczenie własnych kluczy szyfrowania.

SSE-C działa jak w momencie przesyłania obiektu. Serwer używa klucza szyfrowania podanego przez użytkownika w celu zastosowania szyfrowania AES-256 do danych i usuwa klucz szyfrowania z pamięci. Aby ponownie uzyskać dostęp do danych, należy podać ten sam klucz szyfrowania w żądaniu. Serwer weryfikuje, czy podany klucz pasuje, a następnie odszyfrowuje obiekt przed zwróceniem danych obiektu do użytkownika.

Wymagania

Jeśli nie korzystałeś wcześniej z aws:

$ sudo apt install awscli

Następnie:

$ aws configure

AWS Access Key ID [None]: <your EC2 Access Key>
AWS Secret Access Key [None]: <your EC2 Secret Key>
Default region name [None]: <enter>
Default output format [None]: <enter>

SSE-C w skrócie

  • Tylko HTTPS S3 odrzuca wszelkie żądania wykonane przez HTTP przy użyciu SSE-C.

  • W przypadku błędnego wysłania żądania za pomocą protokołu HTTP, dla bezpieczeństwa należy odrzucić klucz i przeprowadzić jego rotację.

  • ETag w odpowiedzi nie jest MD5 danych obiektu.

  • Użytkownik jest odpowiedzialny za zarządzanie kluczami szyfrowania i za to, do którego obiektu zostały one użyte.

  • Jeśli bucket ma włączoną obsługę wersji, każda wersja obiektu może mieć swój własny klucz szyfrowania.

Uwaga

Utrata klucza szyfrowania oznacza również utratę obiektu. Nasze serwery nie przechowują kluczy szyfrowania, więc bez nich nie jest możliwy ponowny dostęp do danych.

REST API

Do szyfrowania lub deszyfrowania obiektów w trybie SSE-C wymagane są następujące nagłówki:

Nagłówek

Typ

Opis

x-amz-server-side-encryption-customer-alglubithm

ciąg

Algorytm szyfrowania. Musi być ustawiony na AES256

x-amz-server-side-encryption-customer-key

ciąg

256-bitowy klucz szyfrowania base64 używany w procesie szyfrowania po stronie serwera.

x-amz-server-side-encryption-customer-key-MD5

ciąg

zakodowany w base64 128-bitowy skrót MD5 klucza szyfrowania zgodnie z RFC 1321. Jest on używany w celu zapewnienia, że szyfrowanie nie zostało uszkodzone podczas procesu transplubtu i kodowania.

Informacja

Skrót MD5 klucza przed kodowaniem base64.

Nagłówki mają zastosowanie do następujących operacji API:

  • PutObject

  • PostObject

  • CopyObject (do obiektów docelowych)

  • HeadObject

  • GetObject

  • InitiateMultipartUpload

  • UploadPart

  • UploadPart-Copy (do części docelowych)

Przykład nr 1 Generowanie wartości nagłówka

secret="32bytesOfTotallyRandomCharacters"
key=$(echo -n $secret | base64)
keymd5=$(echo -n $secret | openssl dgst -md5 -binary | base64)

LUB

openssl rand 32 > sse-c.key
key=$(cat sse-c.key | base64)
keymd5=$(cat sse-c.key | openssl dgst -md5 -binary | base64)

Przykład nr 2 aws-cli (s3api)

Przesyłanie obiektu z włączonym szyfrowaniem SSE-C

aws s3api put-object \
  --bucket bucket-name --key object-name \
  --body contents.txt \
  --sse-customer-algorithm AES256 \
  --sse-customer-key $key \
  --sse-customer-key-md5 $keymd5 \
  --endpoint-url https://s3.waw4-1.cloudferro.com

Przykład nr 3 aws-cli (s3)

aws s3 cp file.txt s3://bucket-name/ \
  --sse-c-key $secret \
  --sse-c AES256 \
  --endpoint https://s3.waw4-1.cloudferro.com

Przykład nr 4 aws-cli (s3 blob)

aws s3 cp file.txt s3://bucket/ \
--sse-c-key fileb://sse-c.key \
--sse-c AES256 \
--endpoint https://s3.waw4-1.cloudferro.com

Informacja

Obecnie s3cmd nie obsługuje szyfrowania SSE-C.

Pobieranie zaszyfrowanego obiektu

aws s3api get-object <file_name> --bucket <bucket_name> \
 --key <object_key> \
 --sse-customer-key $secret \
 --sse-customer-algorithm AES256 \
 --endpoint https://s3.waw4-1.cloudferro.com

lub

aws s3api get-object <file_name> --bucket <bucket_name> \
 --key <object_key> \
 --sse-customer-key fileb://<key_name> \
 --sse-customer-algorithm AES256 \
 --endpoint https://s3.waw4-1.cloudferro.com