Obniżenie kosztów usługi zarządzania kluczami AWS nawet o 99% dzięki kluczom bucketu S3

16 czerwca 2023

Klienci z wielu branż stają w obliczu coraz bardziej rygorystycznych wymagań dotyczących audytów i zgodności w zakresie bezpieczeństwa danych i prywatności. Niektóre ramy zgodności, takie jak FISMA, FEDRAMP, PCI DSS i SOC 2, mają określone standardy regulacyjne dotyczące walidacji bezpieczeństwa systemów.

Klienci z wielu branż stają w obliczu coraz bardziej rygorystycznych wymagań dotyczących audytów i zgodności w zakresie bezpieczeństwa danych i prywatności. Niektóre ramy zgodności, takie jak FISMA, FEDRAMP, PCI DSS i SOC 2, mają określone standardy regulacyjne dotyczące walidacji bezpieczeństwa systemów. Powszechnym wymaganiem dla tych ram zgodności są bardziej rygorystyczne standardy szyfrowania danych w stanie spoczynku, w przypadku których organizacje muszą szyfrować dane za pomocą klucza szyfrowania, który kontrolują. Aby spełnić te wymagania lokalnie, klienci muszą przeznaczyć zasoby na utrzymanie modułów kryptograficznych. W chmurze klienci korzystają z ofert szyfrowania, które są wyceniane na podstawie ich użycia.

Amazon Simple Storage Service (Amazon S3) szyfruje wszystkie nowe obiekty za pomocą szyfrowania po stronie serwera zarządzanego przez Amazon S3 (SSE-S3), chyba że klient wybierze inny typ szyfrowania po stronie serwera. SSE-S3 spełnia wymagania bezpieczeństwa dla wielu klientów Amazon S3, ale klienci stosujący się do niektórych ram zgodności mogą potrzebować większej kontroli nad swoimi kluczami szyfrowania. Ci klienci mogą polegać na AWS Key Management Service (AWS KMS) i szyfrowaniu po stronie serwera za pomocą AWS KMS (SSE-KMS). SSE-KMS wiąże się zarówno z opłatą AWS KMS za żądanie, jak i miesięczną opłatą za przechowywanie za klucz AWS KMS. Ze względu na to, że klienci skalują swoje obciążenia do milionów lub miliardów obiektów, ich koszty AWS KMS mogą wzrosnąć. Klienci doświadczają tego dotkliwie w aplikacjach do intensywnego odczytu/zapisu, w których dane klientów są uzyskiwane z dużą częstotliwością. Aby pomóc klientom obniżyć ten koszt, Amazon S3 wprowadził S3 Bucket Keys. W rzeczywistości S3 Bucket Keys może obniżyć koszty AWS KMS nawet o 99% i zaoszczędzić klientom ponad 80 mln USD od czasu ich uruchomienia pod koniec 2020 roku.

W tym artykule autorzy zaprezentują, jak wymagać SSE-KMS dla wszystkich obiektów zapisywanych w buckecie, jak włączyć klucze bucketu S3, jak używać kluczy bucketu S3 z wieloma dzierżawcami oraz jak ocenić istniejące obiekty zaszyfrowane przez SSE-KMS na poziomie obiektu. Korzystanie z S3 Bucket Keys pomaga zaoszczędzić na rachunku za AWS KMS przy jednoczesnym zachowaniu zgodności z wymogami bezpieczeństwa dotyczącymi szyfrowania danych za pomocą SSE-KMS.

Tło

SSE-KMS zapewnia klientom kontrolę nad kluczami szyfrowania i możliwość audytu użycia klucza. Te dodatkowe kontrole są bardzo ważne dla klientów korporacyjnych, którzy muszą wykazać audytorom, że są właścicielami swoich kluczy szyfrujących, kontrolować harmonogramy rotacji kluczy i zarządzać uprawnieniami do kluczy szyfrujących. Kiedy obiekt jest szyfrowany za pomocą SSE-KMS, AWS KMS otrzymuje żądanie szyfrowania od Amazon S3 i odsyła unikalny klucz danych do zaszyfrowania obiektu.

Dzięki S3 Bucket Keys, zamiast indywidualnego wywołania AWS KMS w celu zaszyfrowania każdego obiektu, AWS KMS generuje ograniczony czasowo klucz na poziomie bucketu. Amazon S3 używa tego klucza na poziomie bucketu do tworzenia unikalnych kluczy danych do szyfrowania obiektów w buckecie, unikając potrzeby dodatkowych żądań AWS KMS w celu wykonania operacji kryptograficznych. S3 Bucket Keys zmniejszają ruch żądań z Amazon S3 do AWS KMS, umożliwiając dostęp do zaszyfrowanych obiektów w Amazon S3 za ułamek poprzedniego kosztu.

Wymagania wstępne

Aby móc śledzić tutorial na blogu, Twój główny podmiot (użytkownik lub rola) AWS Identity and Access Management (IAM) potrzebuje uprawnień do tworzenia bucketów i używania kluczy AWS KMS.

 

Minimum IAM permissions to use Bucket Keys
{
   "Version":"2012-10-17",
   "Statement":[
{
   "Sid": "Permissions to use Bucket Keys",
   "Effect":"Allow",
   "Principal": {"AWS": "arn:aws:iam::111122223333:user/willcavin"},
         "Action":[
         "s3:PutObject",
         "s3:GetObject",
         "s3:CreateBucket",
         "kms:Decrypt",
         "kms:GenerateDataKey"
         ],
         "Resource":"arn:aws:s3:::willcavinbucket/*"
      }
   ]
}

Wymagaj SSE-KMS dla wszystkich obiektów zapisywanych w buckecie

Klienci z wymaganiami dotyczącymi zgodności często wymagają szyfrowania za pomocą SSE-KMS dla wszystkich obiektów przesyłanych do ich bucketów S3. Można to osiągnąć za pomocą S3 Bucket Policies. Poniższe zasady bucketu uniemożliwiają zapis do bucketu, który nie jest zaszyfrowany przy użyciu SSE-KMS. Korzystając z tych zasad, możesz z powodzeniem przesyłać obiekty do bucketu, dodając nagłówek żądania szyfrowania do żądania PutObject, który określa SSE-KMS. Alternatywnie możesz ustawić domyślną konfigurację szyfrowania bucketu w buckecie, aby automatycznie szyfrować nowe obiekty za pomocą SSE-KMS, nawet jeśli żaden nagłówek szyfrowania nie zostanie dodany do żądań przesyłania przez klientów. Ta zasada bucketu w połączeniu z włączeniem kluczy bucketu S3 w domyślnej konfiguracji szyfrowania bucketu weryfikuje, czy przesłane obiekty używają kluczy bucketu S3, chyba że wyraźnie wyłączysz klucze bucketu S3 w żądaniu PutObject.

JSON

 {
 "Version": "2012-10-17",
 "Id": "PutObjPolicy",
 "Statement": [{
 		"Sid": "DenyObjectsThatAreNotSSEKMS",
 		"Effect": "Deny",
 		"Principal": "*",
 		"Action": "s3:PutObject",
 		"Resource": "arn:aws:s3:::example-bucket/*",
 		"Condition": {
 		"Null": {
 		"s3:x-amz-server-side-encryption-aws-kms-key-id": "true"
           }
      }
   }]
 }

Aktywacja kluczy bucketu S3

S3 Bucket Keys można włączyć za pośrednictwem konsoli Amazon S3, edytując domyślne szyfrowanie w buckecie. Po wybraniu bucketu wybierz Properties. W obszarze Default encryption wybierz opcję Edit.

W obszarze Encryption key type wybierz opcję AWS Key Management Service key (SSE-KMS). W obszarze AWS KMS Key wybierz preferowany klucz AWS KMS. W obszarze Bucket Key wybierz opcję Enable. Następnie wybierz Save changes.

Obnizenie kosztow uslugi zarzadzania kluczami AWS nawet o 99 procent dzieki kluczom bucketu S3

BASH

aws s3api put-bucket-encryption --bucket <bucket-name> --server-side-encryption-configuration '{
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "aws:kms",
                    "KMSMasterKeyID": "<KMS-Key-ARN>"
                },
                "BucketKeyEnabled": true
            }
        ]
    }'

Użycie S3 Bucket Keys w środowisku wielu dzierżawców

Wielu klientów korzysta z bucketów S3 w scenariuszach z wieloma dzierżawcami, w których może posiadać wiele zespołów lub klientów końcowych przesyłających obiekty do współdzielonego bucketu w celu analizy lub przetwarzania danych. Do pracy w tym modelu zaprojektowano S3 Bucket Keys. Możesz po prostu aktywować klucze bucketu S3 w domyślnej konfiguracji szyfrowania bucketu i poprosić klientów końcowych o dodanie preferowanego, zarządzanego przez klienta klucza AWS KMS do nagłówków żądań Amazon S3. Dzięki temu klienci końcowi mogą szyfrować obiekty za pomocą zarządzanego przez nich klucza AWS KMS, a właściciele wielu dzierżawców mogą włączyć klucze bucketu S3 dla obiektów przesłanych do ich bucketu.

W tej konstrukcji każdy najemca udostępnia Ci swój klucz AWS KMS zarządzany przez klienta, abyś mógł świadczyć swoje usługi (analiza danych, przetwarzanie danych itp.). Jeśli najemca zdecyduje, że nie chce, abyś miał już dostęp do swoich danych, po prostu odbiera ci dostęp do swojego klucza. Model ten zachowuje poufność kluczowych materiałów, zapewniając jednocześnie dostęp odpowiednim stronom.

Obnizenie kosztow uslugi zarzadzania kluczami AWS nawet o 99 procent dzieki kluczom bucketu S3

Ocena bucketów z dużą liczbą odczytów za pomocą obiektów SSE-KMS

Od czasu wprowadzenia S3 Bucket Keys wielu klientów ponownie zaszyfrowało swoje istniejące dane, aby zastosować Bucket Keys i obniżyć koszty AWS KMS. Jeśli posiadasz bucket z dużą liczbą odczytów z obiektami zaszyfrowanymi za pomocą SSE-KMS na poziomie obiektu, powinieneś dokładnie ocenić swoje wzorce dostępu, aby zobaczyć, czy ma to sens dla twoich aplikacji. Możesz użyć S3 Storage Lens, aby zidentyfikować żądania AWS KMS w całej organizacji AWS, a następnie powiększyć konta i buckety z największą liczbą żądań AWS KMS. Jeśli zwykle uzyskujesz dostęp do danych tylko przez krótki czas po ich utworzeniu, zalecamy po prostu pozwolenie obiektom na starzenie się i używanie S3 Bucket Keys dla wszystkich nowych obiektów. Jeśli twoje dane są bardzo obciążone odczytem przez dłuższy okres czasu, być może lata, sensowne może być ponowne zaszyfrowanie istniejących obiektów SSE-KMS na poziomie obiektu za pomocą kluczy segmentu S3.

Aby zaszyfrować istniejące obiekty Amazon S3 za pomocą S3 Bucket Keys, możesz użyć Amazon S3 Batch Operations. Dostarczasz S3 Batch Operations listę obiektów, a Batch Operations wykonuje określoną operację na każdym z nich. Możesz użyć operacji kopiowania operacji wsadowych S3, aby skopiować istniejące obiekty SSE-KMS i zapisać je z powrotem do tego samego bucketu, i tym samym włączyć klucze bucketu S3 na tych obiektach. Pojedyncze zadanie operacji wsadowych może wykonać określoną operację na miliardach obiektów. Ten post stanowi doskonały przykład wykorzystania funkcji AWS Lambda do pobrania identyfikatora klucza SSE-KMS dla każdego obiektu i włączenia kluczy bucketu S3 poprzez skopiowanie obiektów na miejsce za pomocą odpowiedniego klucza zarządzanego przez klienta.

Warto wiedzieć

Wielu klientów często chce szybko skontrolować domyślną konfigurację szyfrowania swoich bucketów na swoich kontach dla bucketów bez włączonego S3 Bucket Key. W powyższym artykule szczegółowo opisano, jak można szybko identyfikować buckety i korygować je bez włączonej funkcji oszczędzania kosztów.

Zmiany, o których należy pamiętać przed aktywowaniem klucza bucketu S3

Jeśli Twoje istniejące zasady IAM lub zasady kluczy AWS KMS wykorzystują Twoją nazwę zasobu Amazon Resource Name (ARN) obiektu jako szyfrowanie kontekstowe w celu udoskonalenia lub ograniczenia dostępu do klucza AWS KMS, wówczas te zasady nie będą działać z kluczami bucketu S3. S3 Bucket Keys używają ARN bucketu jako kontekstu szyfrowania. Zanim aktywujesz klucz bucketu S3, zaktualizuj zasady IAM lub zasady kluczy AWS KMS, aby używać ARN bucketu jako kontekstu szyfrowania.

Po włączeniu S3 Bucket Keys zobaczysz w dziennikach mniej zdarzeń AWS KMS CloudTrail dla obiektów SSE-KMS, ponieważ wykonuje się mniej wywołań AWS KMS. Ponadto zdarzenia AWS KMS CloudTrail rejestrują ARN Twojego bucketu zamiast ARN obiektu.

Korzystanie z interfejsu Copy API

Możesz użyć operacji Copy, aby ponownie zaszyfrować istniejący obiekt. Należy pamiętać, że operacja Copy zmienia datę ostatniej modyfikacji obiektu, co powoduje zresetowanie uprawnień Lifecycle obiektu, jeśli obowiązują reguły Lifecycle. Opcjonalnie możesz dodać nowy znacznik obiektu podczas operacji Copy, aby z mocą wsteczną zidentyfikować ponownie zaszyfrowane obiekty. Następnie możesz utworzyć nową regułę Lifecycle, aby przenieść te oznaczone obiekty do colder storage lub wygasić je według własnego uznania. Ponadto każdy obiekt większy niż 5 GB musi zostać skopiowany przy użyciu interfejsu Multipart Upload API, ponieważ interfejs API kopiowania nie obsługuje obiektów większych niż 5 GB.

Porządkowanie

Jeśli utworzyłeś nowe zasoby, aby przetestować sugestie udostępnione w tym poście, usuń zarządzane przez klienta klucze AWS KMS i wszelkie obiekty dodane do bucketów.

Podsumowanie

Wielu klientów ma wymagania dotyczące zgodności, które nakładają na klienta kontrolę nad kluczem szyfrowania. Klienci ci używają SSE-KMS z kluczami zarządzanymi przez klienta, aby zachować zgodność z tymi standardami regulacyjnymi. Za pomocą tego artykuły dowiedziałeś się, jak można wymusić szyfrowanie SSE-KMS na poziomie bucketu za pomocą zasad bucketu S3. Sprawdziłeś również, w jaki sposób można włączyć klucze bucketu S3 w domyślnej konfiguracji szyfrowania bucketu, aby łatwo skorzystać z tej oszczędzającej koszty funkcji. Twórcy omówili, w jaki sposób właściciele bucketów z wieloma dzierżawcami mogą włączyć klucze bucketu S3, jednocześnie umożliwiając swoim klientom korzystanie z własnych kluczy KMS zarządzanych przez klienta. Na koniec wraz z autorami przejrzałeś kilka ważnych kwestii dotyczących wzorców dostępu przed ponownym zaszyfrowaniem istniejących obiektów SSE-KMS w celu użycia kluczy segmentu S3.

Aktywowanie S3 Bucket Keys to zalecana najlepsza praktyka dla klientów spełniających wymagania dotyczące szyfrowania danych. Ta funkcja zapewnia oszczędności na rachunkach za AWS KMS, jednocześnie pomagając zachować zgodność ze standardami szyfrowania danych. Od teraz posiadasz wiedzę i narzędzia, aby zmaksymalizować swoje oszczędności, korzystając z S3 Bucket Keys.

Źródło: AWS

Case Studies
Referencje

Bardzo profesjonalne podejście, niesamowicie szybki czas reakcji i bardzo miła obsługa sprawiły, że na pewno podejmiemy jeszcze współpracę. 

Marcin Krzaczkowski
Założyciel Automa.Net
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.