Role, tymczasowe dane uwierzytelniające i SigV4

Bezpieczeństwo AWS dla deweloperów

Rahul Singh

Technical Product Manager

Klucz, który przeżywa zadanie

Aby przyspieszyć pracę, w skrypcie tworzy się klucz, który trafia do pliku konfiguracyjnego.

W pliku:

  • Nigdy nie jest rotowany
  • Nigdy nie jest unieważniany
  • Nigdy nie wygasa

Jeden klucz dostępu rozchodzący się do sześciu miejsc przechowywania, z osią czasu po prawej pokazującą, że nadal jest ważny w osiemnastym miesiącu

Bezpieczeństwo AWS dla deweloperów

Klucz, który przeżywa zadanie

Aby przyspieszyć pracę, w skrypcie tworzy się klucz, który trafia do pliku konfiguracyjnego.

W pliku:

  • Nigdy nie jest rotowany
  • Nigdy nie jest unieważniany
  • Nigdy nie wygasa

 

18 miesięcy później nadal jest ważny

Jeden klucz dostępu rozchodzący się do sześciu miejsc przechowywania, z osią czasu po prawej pokazującą, że nadal jest ważny w osiemnastym miesiącu

Bezpieczeństwo AWS dla deweloperów

Dane uwierzytelniające, które same wygasają

Ustaw wygasanie jako standard dzięki AWS STS

  1. Poproś o rolę i otrzymaj dane uwierzytelniające z wbudowanym zegarem

  2. Security Token Service (STS): czas wygaśnięcia dołączony, domyślnie godzina

Aplikacja wywołuje AssumeRole w AWS STS, a STS zwraca dane uwierzytelniające z wbudowanym zegarem.

Bezpieczeństwo AWS dla deweloperów

Dane uwierzytelniające, które same wygasają

Ustaw wygasanie jako standard dzięki AWS STS

  1. Poproś o rolę i otrzymaj dane uwierzytelniające z wbudowanym zegarem

  2. Tymczasowe dane uwierzytelniające zaczynają się od ASIA i zawierają token sesji

  3. Security Token Service (STS): czas wygaśnięcia dołączony, domyślnie godzina

Aplikacja wywołuje AssumeRole w AWS STS i otrzymuje dane uwierzytelniające z wbudowanym zegarem. Poniżej dwa zestawy danych obok siebie: długoterminowy klucz zaczynający się od AKIA, który nie zawiera tokenu sesji i nigdy nie wygasa, oraz tymczasowe dane uwierzytelniające zaczynające się od ASIA, które zawierają token sesji i wygasają po godzinie.

Bezpieczeństwo AWS dla deweloperów

Dane uwierzytelniające, które same wygasają

Ustaw wygasanie jako standard dzięki AWS STS

  1. Poproś o rolę i otrzymaj dane uwierzytelniające z wbudowanym zegarem

  2. Tymczasowe dane uwierzytelniające zaczynają się od ASIA i zawierają token sesji

  3. To samo wywołanie najpierw zostaje zaakceptowane, potem już nie

  4. Security Token Service (STS): czas wygaśnięcia dołączony, domyślnie godzina

Aplikacja wywołuje AssumeRole w AWS STS i otrzymuje dane uwierzytelniające z wbudowanym zegarem. Poniżej długoterminowy klucz zaczynający się od AKIA, który nigdy nie wygasa, obok tymczasowych danych uwierzytelniających zaczynających się od ASIA, które zawierają token sesji i wygasają po godzinie. Niżej to samo wywołanie GetObject zwraca 200 OK o dziesiątej i ExpiredToken o jedenastej pięć.

Bezpieczeństwo AWS dla deweloperów

Jak twój kod je znajduje

Sprawdzanie łańcucha dostawców danych uwierzytelniających

  • Wyszukiwaniem zajmuje się AWS SDK, biblioteka w twoim kodzie
  • Stała lista, sprawdzana po kolei
  • Zatrzymuje się na pierwszym dopasowaniu

Kolejność wyszukiwania danych uwierzytelniających: klucz przekazany w kodzie jest przekreślony nad łańcuchem, a wyszukiwanie przechodzi przez zmienne środowiskowe, plik konfiguracyjny i dane uwierzytelniające kontenera, zatrzymując się na pierwszym dopasowaniu i nigdy nie docierając do metadanych instancji

Bezpieczeństwo AWS dla deweloperów

Jak twój kod je znajduje

Sprawdzanie łańcucha dostawców danych uwierzytelniających

  • Wyszukiwaniem zajmuje się AWS SDK, biblioteka w twoim kodzie
  • Stała lista, sprawdzana po kolei
  • Zatrzymuje się na pierwszym dopasowaniu

 

Klucze zapisane na stałe w kodzie są sprawdzane jako pierwsze, dlatego trzeba je usunąć

Kolejność wyszukiwania danych uwierzytelniających: klucz przekazany w kodzie jest przekreślony nad łańcuchem, a wyszukiwanie przechodzi przez zmienne środowiskowe, plik konfiguracyjny i dane uwierzytelniające kontenera, zatrzymując się na pierwszym dopasowaniu i nigdy nie docierając do metadanych instancji

Bezpieczeństwo AWS dla deweloperów

Łańcuch, ogniwo po ogniwie

1. explicit      a key passed in your code
2. environment   AWS_* variables, and on Lambda
                 that is the execution role
3. config file   ~/.aws/credentials
4. container     ECS or EKS task role
5. instance      EC2 instance profile, via IMDS
  • Wygrywa pierwsze dopasowanie
  • Usuń zapisany klucz, a wyszukiwanie przejdzie do roli
Bezpieczeństwo AWS dla deweloperów

Potwierdzanie tożsamości spoza AWS

Potoki CI/CD często działają poza AWS, więc nie można do nich dołączyć łańcucha danych uwierzytelniających

  • Działa na GitHub lub GitLab
  • Łańcuch nie ma czego znaleźć

Agent CI i jego platforma przedstawione poza granicą AWS, agent oznaczony jako niemający roli do dołączenia, a platforma podpisująca token OIDC wskazujący jedno repozytorium i jeden przepływ pracy

Bezpieczeństwo AWS dla deweloperów

Potwierdzanie tożsamości spoza AWS

Potoki CI/CD często działają poza AWS, więc nie można do nich dołączyć łańcucha danych uwierzytelniających

  • Działa na GitHub lub GitLab
  • Łańcuch nie ma czego znaleźć

 

Token OIDC (OpenID Connect)

  • Podpisany i krótkotrwały
  • Potwierdza tożsamość, ale nie jest danymi uwierzytelniającymi

Agent CI i jego platforma przedstawione poza granicą AWS, agent oznaczony jako niemający roli do dołączenia, a platforma podpisująca token OIDC wskazujący jedno repozytorium i jeden przepływ pracy

Bezpieczeństwo AWS dla deweloperów

Reguła zamiast zapisanego klucza

Token OIDC wskazujący repozytorium, wymieniany przez AssumeRoleWithWebIdentity na tymczasowe dane uwierzytelniające wygasające po godzinie, ponieważ polityka zaufania roli już wskazuje tego wystawcę i to repozytorium

Wymiana tokenu na dane uwierzytelniające

Bezpieczeństwo AWS dla deweloperów

Reguła zamiast zapisanego klucza

Token OIDC wskazujący repozytorium, wymieniany przez AssumeRoleWithWebIdentity na tymczasowe dane uwierzytelniające wygasające po godzinie, ponieważ polityka zaufania roli już wskazuje tego wystawcę i to repozytorium

Wymiana tokenu na dane uwierzytelniające

  • AssumeRoleWithWebIdentity: AssumeRole, gdzie dowodem jest zewnętrzny token
  • Polityka zaufania: zapisana na roli z wyprzedzeniem, nie przechowywana w potoku
  • Roszczenie (claim): jeden fakt zawarty w tokenie
  • Wystawcę mają wspólnego wszystkie repozytoria na platformie, dlatego trzeba dodatkowo wskazać konkretne repozytorium

Sekrety repozytorium: teraz puste

Bezpieczeństwo AWS dla deweloperów

Każde żądanie jest podpisywane

Signature Version 4, czyli SigV4

  • Potwierdza, które dane uwierzytelniające wysłały żądanie
  • Potwierdza, że żądanie nie zostało zmienione po drodze
  • Podpisywane przez CLI i SDK przy każdym wywołaniu

Proces podpisywania, w którym żądanie i twoje dane uwierzytelniające tworzą podpis wysyłany w nagłówku Authorization; AWS oblicza go ponownie i porównuje, akceptując żądanie przy zgodności lub zwracając SignatureDoesNotMatch przy niezgodności

Bezpieczeństwo AWS dla deweloperów

Podpis, który możesz przekazać dalej

Tymczasowe dane uwierzytelniające

  • Wiele akcji, ograniczonych zakresem roli
  • Przechowywane przez twój kod

Twój kod wywołujący cztery różne usługi AWS — S3, DynamoDB, SQS i KMS — za pomocą tymczasowych danych uwierzytelniających

Bezpieczeństwo AWS dla deweloperów

Podpis, który możesz przekazać dalej

Tymczasowe dane uwierzytelniające

  • Wiele akcji, ograniczonych zakresem roli
  • Przechowywane przez twój kod

Pre-signed URL

  • Jeden obiekt, jedna akcja i każdy, kto ma link
  • Wybrany przez ciebie czas wygaśnięcia, a potem nic
  • Niesie twoje uprawnienia, nie uprawnienia posiadacza linku

Twój kod wywołujący cztery różne usługi AWS — S3, DynamoDB, SQS i KMS — za pomocą tymczasowych danych uwierzytelniających

Przeglądarka innej osoby docierająca dokładnie do jednego obiektu przez jedną ścieżkę, przerwana przez zegar oznaczony jako ustawiony przez ciebie czas wygaśnięcia

Bezpieczeństwo AWS dla deweloperów

Czas na praktykę!

Bezpieczeństwo AWS dla deweloperów

Preparing Video For Download...