Trzymaj sekrety z dala od kodu i logów

Bezpieczeństwo AWS dla deweloperów

Rahul Singh

Technical Product Manager

Nie wszystko, co wrażliwe, to sekret

Trzy rodzaje danych

  • Sekret: obcy może podszyć się pod ciebie
  • Dane wrażliwe: ktoś zostaje narażony
  • Konfiguracja: nic do zyskania

Trzy rzędy porównujące sekret, dane wrażliwe i konfigurację. Każdy rząd pokazuje dwie przykładowe wartości i to, co mógłby z nimi zrobić obcy - od podszycia się pod ciebie po brak jakiejkolwiek korzyści.

Bezpieczeństwo AWS dla deweloperów

Nie wszystko, co wrażliwe, to sekret

Trzy rodzaje danych

  • Sekret: obcy może podszyć się pod ciebie
  • Dane wrażliwe: ktoś zostaje narażony
  • Konfiguracja: nic do zyskania

Dwie nazwy danych osobowych

  • PII: dane umożliwiające identyfikację osoby
  • PHI: chronione dane medyczne

Trzy rzędy porównujące sekret, dane wrażliwe i konfigurację. Każdy rząd pokazuje dwie przykładowe wartości i to, co mógłby z nimi zrobić obcy - od podszycia się pod ciebie po brak jakiejkolwiek korzyści.

Bezpieczeństwo AWS dla deweloperów

Cztery sposoby wycieku sekretu

Sekret w działającym systemie rozchodzi się na cztery ponumerowane wyjścia: znacznik pierwszy - kod źródłowy i jego historia, znacznik drugi - zmienne środowiskowe, znacznik trzeci - logi aplikacji, znacznik czwarty - komunikaty błędów i ślady. Wszystkie cztery prowadzą do pola z napisem odczytywalne przez kogoś.

  1. Kod źródłowy i jego historia
  2. Zmienne środowiskowe
Bezpieczeństwo AWS dla deweloperów

Cztery sposoby wycieku sekretu

Sekret w działającym systemie rozchodzi się na cztery ponumerowane wyjścia: znacznik pierwszy - kod źródłowy i jego historia, znacznik drugi - zmienne środowiskowe, znacznik trzeci - logi aplikacji, znacznik czwarty - komunikaty błędów i ślady. Wszystkie cztery prowadzą do pola z napisem odczytywalne przez kogoś.

  1. Kod źródłowy i jego historia
  2. Zmienne środowiskowe
  3. Logi aplikacji
  4. Komunikaty błędów i ślady
Bezpieczeństwo AWS dla deweloperów

Szyfrowanie w spoczynku to nie ukrycie

Wybór, który wydaje się bezpieczny

  • Zaszyfrowane w spoczynku, zawsze
  • Klucz AWS KMS, domyślnie zarządzany przez AWS

Funkcja Lambda przechowująca zmienną środowiskową rozdziela się na dwie ścieżki. Na dysku wartość jest zaszyfrowana w spoczynku kluczem AWS KMS, oznaczone na zielono. Przez API wywołanie GetFunctionConfiguration zwraca wartość jawnym tekstem, oznaczone na czerwono. Obie ścieżki łączą się w notatce z informacją, że chroniona jest tylko jedna z nich.

Bezpieczeństwo AWS dla deweloperów

Szyfrowanie w spoczynku to nie ukrycie

Wybór, który wydaje się bezpieczny

  • Zaszyfrowane w spoczynku, zawsze
  • Klucz AWS KMS, domyślnie zarządzany przez AWS

Co zwraca GetFunctionConfiguration

  • Wartość jawnym tekstem

Odpowiedź o przechowywaniu na pytanie o dostęp

Funkcja Lambda przechowująca zmienną środowiskową rozdziela się na dwie ścieżki. Na dysku wartość jest zaszyfrowana w spoczynku kluczem AWS KMS, oznaczone na zielono. Przez API wywołanie GetFunctionConfiguration zwraca wartość jawnym tekstem, oznaczone na czerwono. Obie ścieżki łączą się w notatce z informacją, że chroniona jest tylko jedna z nich.

Bezpieczeństwo AWS dla deweloperów

Który magazyn i dlaczego

Dwie usługi, każda do innego zadania

  • Secrets Manager: stworzony do sekretów
  • Parameter Store: stworzony do konfiguracji, a parametr SecureString jest szyfrowany kluczem KMS

Diagram spektrum. Po lewej stronie Secrets Manager, po prawej Systems Manager Parameter Store, a między nimi biegną cztery poziome linie. Na każdej linii widnieje ponumerowany znacznik: pierwszy skrajnie po lewej, drugi bliżej lewej, trzeci pośrodku, czwarty skrajnie po prawej, z kwotami kosztów na obu końcach czwartej linii i notatką mówiącą, że o wyborze decyduje rotacja.

Bezpieczeństwo AWS dla deweloperów

Który magazyn i dlaczego

Dwie usługi, każda do innego zadania

  • Secrets Manager: stworzony do sekretów
  • Parameter Store: stworzony do konfiguracji, a parametr SecureString jest szyfrowany kluczem KMS

Cztery czynniki decydują

  1. Zarządzana rotacja
  2. Udostępnianie między kontami
  3. Wersjonowanie
  4. Koszt

Diagram spektrum. Po lewej stronie Secrets Manager, po prawej Systems Manager Parameter Store, a między nimi biegną cztery poziome linie. Na każdej linii widnieje ponumerowany znacznik: pierwszy skrajnie po lewej, drugi bliżej lewej, trzeci pośrodku, czwarty skrajnie po prawej, z kwotami kosztów na obu końcach czwartej linii i notatką mówiącą, że o wyborze decyduje rotacja.

Bezpieczeństwo AWS dla deweloperów

Odczytuj na bieżąco, buforuj krótko

Twój działający proces wywołuje GetSecretValue w magazynie sekretów (znacznik pierwszy), korzystając z ograniczonej roli (znacznik drugi) ograniczonej do jednego ARN sekretu i uprawnienia kms:Decrypt, po czym przechowuje zwróconą wartość w pamięciowym cache'u (znacznik trzeci), zanim wywoła bazę danych lub API partnera.

  1. Wywołaj GetSecretValue przy starcie
  2. Rola ograniczona do jednego ARN sekretu i kms:Decrypt
Bezpieczeństwo AWS dla deweloperów

Odczytuj na bieżąco, buforuj krótko

Twój działający proces wywołuje GetSecretValue w magazynie sekretów (znacznik pierwszy), korzystając z ograniczonej roli (znacznik drugi) ograniczonej do jednego ARN sekretu i uprawnienia kms:Decrypt, po czym przechowuje zwróconą wartość w pamięciowym cache'u (znacznik trzeci), zanim wywoła bazę danych lub API partnera.

  1. Wywołaj GetSecretValue przy starcie
  2. Rola ograniczona do jednego ARN sekretu i kms:Decrypt
  3. Przechowuj wartość w pamięci

Buforuj bez końca – rotacja cię zaskoczy

Bezpieczeństwo AWS dla deweloperów

Rotacja zmienia wartość pod tobą

Dlaczego cztery kroki, nie jedna zmiana

  • Nowa wartość jest sprawdzona, zanim ktoś jej użyje
  • Jedna zmiana naraz zepsułaby wszystkich klientów

Trzy kolumny biegnące w dół strony: kroki rotacji, etykieta i twój cache. Secrets Manager wykonuje createSecret, setSecret i testSecret, a przerywana linia oznacza moment, w którym finishSecret przestawia etykietę. Powyżej tej linii etykieta brzmi AWSCURRENT równa się starej wartości, a cache jest poprawny; poniżej etykieta brzmi AWSCURRENT równa się nowej wartości, a ten sam cache jest zakreskowany na czerwono. Diagram zamykają dwa rozwiązania: krótki czas życia cache'u i odświeżanie po błędzie uwierzytelnienia.

Bezpieczeństwo AWS dla deweloperów

Rotacja zmienia wartość pod tobą

Dlaczego cztery kroki, nie jedna zmiana

  • Nowa wartość jest sprawdzona, zanim ktoś jej użyje
  • Jedna zmiana naraz zepsułaby wszystkich klientów

Cztery kroki, jedno przekazanie

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Trzy kolumny biegnące w dół strony: kroki rotacji, etykieta i twój cache. Secrets Manager wykonuje createSecret, setSecret i testSecret, a przerywana linia oznacza moment, w którym finishSecret przestawia etykietę. Powyżej tej linii etykieta brzmi AWSCURRENT równa się starej wartości, a cache jest poprawny; poniżej etykieta brzmi AWSCURRENT równa się nowej wartości, a ten sam cache jest zakreskowany na czerwono. Diagram zamykają dwa rozwiązania: krótki czas życia cache'u i odświeżanie po błędzie uwierzytelnienia.

Bezpieczeństwo AWS dla deweloperów

Rotacja zmienia wartość pod tobą

Dlaczego cztery kroki, nie jedna zmiana

  • Nowa wartość jest sprawdzona, zanim ktoś jej użyje
  • Jedna zmiana naraz zepsułaby wszystkich klientów

Cztery kroki, jedno przekazanie

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Twój cache o niczym nie wie

  • Czas życia w minutach, potem ponowny odczyt
  • Odświeżanie po błędzie uwierzytelnienia

Trzy kolumny biegnące w dół strony: kroki rotacji, etykieta i twój cache. Secrets Manager wykonuje createSecret, setSecret i testSecret, a przerywana linia oznacza moment, w którym finishSecret przestawia etykietę. Powyżej tej linii etykieta brzmi AWSCURRENT równa się starej wartości, a cache jest poprawny; poniżej etykieta brzmi AWSCURRENT równa się nowej wartości, a ten sam cache jest zakreskowany na czerwono. Diagram zamykają dwa rozwiązania: krótki czas życia cache'u i odświeżanie po błędzie uwierzytelnienia.

Bezpieczeństwo AWS dla deweloperów

Maskuj, redaguj, zachowaj debugowalność

Jeden surowy wiersz logu zawierający identyfikator żądania, pełny numer karty i token, zaznaczony na czerwono. Poniżej te same trzy pola po przetworzeniu: identyfikator żądania bez zmian, numer karty zamaskowany do ostatnich czterech cyfr, a token zastąpiony znacznikiem redakcji, pod notatką mówiącą, że zostało wystarczająco dużo informacji do debugowania.

Oczyszczaj dane przed zapisem

  • Maskowanie: kształt zostaje, wartość ukryta
Bezpieczeństwo AWS dla deweloperów

Maskuj, redaguj, zachowaj debugowalność

Jeden surowy wiersz logu zawierający identyfikator żądania, pełny numer karty i token, zaznaczony na czerwono. Poniżej te same trzy pola po przetworzeniu: identyfikator żądania bez zmian, numer karty zamaskowany do ostatnich czterech cyfr, a token zastąpiony znacznikiem redakcji, pod notatką mówiącą, że zostało wystarczająco dużo informacji do debugowania.

Oczyszczaj dane przed zapisem

  • Maskowanie: kształt zostaje, wartość ukryta
  • Redakcja: wartość usunięta, zostaje znacznik
Bezpieczeństwo AWS dla deweloperów

Maskuj, redaguj, zachowaj debugowalność

Jeden surowy wiersz logu zawierający identyfikator żądania, pełny numer karty i token, zaznaczony na czerwono. Poniżej te same trzy pola po przetworzeniu: identyfikator żądania bez zmian, numer karty zamaskowany do ostatnich czterech cyfr, a token zastąpiony znacznikiem redakcji, pod notatką mówiącą, że zostało wystarczająco dużo informacji do debugowania.

Oczyszczaj dane przed zapisem

  • Maskowanie: kształt zostaje, wartość ukryta
  • Redakcja: wartość usunięta, zostaje znacznik

Dyżurny potrzebuje konfiguracji, obcy – reszty

Bezpieczeństwo AWS dla deweloperów

Czas na praktykę!

Bezpieczeństwo AWS dla deweloperów

Preparing Video For Download...