5

DynamoDB: czy możemy razem używać szyfrowania i replikacji między regionami?DynamoDB: czy możemy razem używać szyfrowania i replikacji między regionami?

Oceniamy DynamoDB dla naszej nowej aplikacji. Nasze wymagania to: szyfrowanie

  • danych w spoczynku replikacji
  • Cross-regionem dla odzyskiwania po awarii. Nasza aplikacja w regionie musi polegać wyłącznie na usługach w tym regionie: tylko

Nasze wymagania można spełnić oddzielnie, korzystając z bibliotek Java dostarczanych przez AWS. Rozwiązania są:

jednak nie mamy pewności, czy rozwiązania te mogą ze sobą współpracować. Obawiamy się, że nie będziemy w stanie odszyfrować rekordów replikowanych między regionami. Rozwiązanie szyfrowania po stronie klienta zaleca utworzenie hierarchii kluczy z kluczem zarządzanym przez KMS w katalogu głównym. KMS jest specyficzny dla regionu, więc nie będziemy mogli odszyfrować rekordów, jeśli skopiujemy je do innego regionu. Klucz szyfrowania nie jest dostępny w innym regionie.

Pytania są:

  • Czy to prawda, że ​​deszyfrowanie lub cross-Region replikowane rekordów jest niemożliwe, jeśli klucz szyfrowania jest KMS?
  • Czy istnieje zalecane podejście do replikacji zaszyfrowanych rekordów DynamoDB? Czy ktoś to wcześniej zrobił?
  • Czy są jakieś alternatywy, na które powinniśmy zwrócić uwagę?
+0

Głosuję, aby zamknąć to pytanie jako nietypowe. Nie jestem pewien, ale może [dba] (http://dba.stackexchange.com/) jest lepszą stroną do zadawania tego pytania. –

+0

W zależności od przedziału czasowego, w którym należy przywrócić bazę danych, można spróbować wykonać kopię zapasową do wersji S3 i wykonać replikację. http://stackoverflow.com/questions/23510704/using-amazon-data-pipeline-to-backup-dynamodb-data-to-s3 – BillMan

Odpowiedz

5

Masz rację. Tak jak konfiguracja nie będzie działać, ponieważ kluczy KMS nie można współdzielić między regionami.

Załóżmy, że replikujesz dane z regionu R1 do R2, które mają odpowiednio klucze KMS K1 i K2. Mogę zasugerować następujące alternatywy:

  1. Zmodyfikuj bibliotekę nieco, aby odszyfrować dane z R1 przy użyciu K1 i ponownie zaszyfrować za pomocą K2 podczas replikacji. Byłbyś zainteresowany klasą DynamoDBStreamsRecordTransformer.
  2. Zaimportuj swój własny materiał klucza zarówno w R1, jak i R2. Sprawdź odpowiednią dokumentację here.
    • Zastrzeżenie: Może być operacyjnie bolesne, w zależności od przypadku użycia.

Aktualizacja: Dodawanie swoje myśli też tak, że może pomóc każdemu, potykając na to pytanie w przyszłości:

  1. Stwórz własną zwykłego tekstu-dane (za pomocą API KMS GenerateRandom), zaszyfruj go za pomocą K1 i K2 (przy użyciu interfejsu API Encrypt) i zapisz zarówno wynikowe teksty cypher wraz z danymi w obu regionach.
    • Zastrzeżenie: połączenia między regionami dla każdej aktualizacji. W opcji nr 1 aktualizacje są asynchroniczne.
+0

Dziękujemy! Ciekawy pomysł na DynamoDBStreamsRecordTransformer. Przyjrzę się temu bardziej szczegółowo. Uzgodniono, że radzenie sobie z własnym kluczowym materiałem jest operacyjnie trudne. Istnieje jeszcze jedna możliwość włamania się do biblioteki szyfrowania w taki sposób, że przechowuje dwie kopie klucza szyfrowania danych - jedna kopia jest zaszyfrowana za pomocą K1, a druga zaszyfrowana za pomocą K2. Następnie kod w R1 używa K1 do odszyfrowania pierwszej kopii klucza szyfrowania danych, a kod w R2 używa K2 do odszyfrowania drugiej kopii klucza szyfrowania danych. Kod w obu regionach może następnie odszyfrować dane. – ez121sl

+0

, który może działać tylko wtedy, gdy * ty * może dostarczyć klucz danych tekstowych do KMS i zwraca klucz szyfrowany-danych. czy to wspiera? Nie widzę czegoś takiego tutaj: http://docs.aws.amazon.com/kms/latest/APIReference/API_Operations.html –

+0

o tak, to może działać też –