Roluri, acreditări temporare și SigV4

Securitatea AWS pentru dezvoltatori

Rahul Singh

Technical Product Manager

Cheia care supraviețuiește sarcinii

Pentru a lucra mai rapid, o cheie este creată într-un script și stocată într-un fișier de configurare.

În fișier, ea:

  • Nu este rotită niciodată
  • Nu este revocată niciodată
  • Nu expiră niciodată

O cheie de acces ramificată în șase locații de stocare, cu o axă temporală în dreapta care arată că este încă validă în luna optsprezece

Securitatea AWS pentru dezvoltatori

Cheia care supraviețuiește sarcinii

Pentru a lucra mai rapid, o cheie este creată într-un script și stocată într-un fișier de configurare.

În fișier, ea:

  • Nu este rotită niciodată
  • Nu este revocată niciodată
  • Nu expiră niciodată

 

18 luni mai târziu, este încă validă

O cheie de acces ramificată în șase locații de stocare, cu o axă temporală în dreapta care arată că este încă validă în luna optsprezece

Securitatea AWS pentru dezvoltatori

Acreditări care expiră automat

Fă din expirare opțiunea implicită cu AWS STS

  1. Soliciți un rol și primești acreditări cu un ceas integrat

  2. Security Token Service (STS): expirare atașată, o oră implicit

O aplicație apelează AssumeRole pe AWS STS, iar STS returnează acreditări cu un ceas integrat.

Securitatea AWS pentru dezvoltatori

Acreditări care expiră automat

Fă din expirare opțiunea implicită cu AWS STS

  1. Soliciți un rol și primești acreditări cu un ceas integrat

  2. Acreditările temporare încep cu ASIA și au un token de sesiune

  3. Security Token Service (STS): expirare atașată, o oră implicit

O aplicație apelează AssumeRole pe AWS STS și primește acreditări cu un ceas integrat. Dedesubt, două acreditări una lângă alta: o cheie de lungă durată, care începe cu AKIA, fără token de sesiune și care nu expiră niciodată, și acreditări temporare, care încep cu ASIA, cu token de sesiune și care expiră într-o oră.

Securitatea AWS pentru dezvoltatori

Acreditări care expiră automat

Fă din expirare opțiunea implicită cu AWS STS

  1. Soliciți un rol și primești acreditări cu un ceas integrat

  2. Acreditările temporare încep cu ASIA și au un token de sesiune

  3. Același apel este acceptat, apoi nu mai este

  4. Security Token Service (STS): expirare atașată, o oră implicit

O aplicație apelează AssumeRole pe AWS STS și primește acreditări cu un ceas integrat. Dedesubt, o cheie de lungă durată care începe cu AKIA și care nu expiră niciodată, lângă acreditări temporare care încep cu ASIA, cu token de sesiune, și care expiră într-o oră. Mai jos, același apel GetObject returnează 200 OK la ora zece și ExpiredToken la ora unsprezece și cinci.

Securitatea AWS pentru dezvoltatori

Cum le găsește codul tău

Verificarea lanțului de furnizori de acreditări

  • SDK-ul AWS, biblioteca din codul tău, face căutarea
  • O listă fixă, verificată în ordine
  • Se oprește la prima potrivire

Ordinea de căutare a acreditărilor: o cheie transmisă în cod este tăiată deasupra lanțului, iar căutarea continuă prin variabilele de mediu, fișierul de configurare și acreditările containerului, oprindu-se la prima potrivire și fără a ajunge niciodată la metadatele instanței

Securitatea AWS pentru dezvoltatori

Cum le găsește codul tău

Verificarea lanțului de furnizori de acreditări

  • SDK-ul AWS, biblioteca din codul tău, face căutarea
  • O listă fixă, verificată în ordine
  • Se oprește la prima potrivire

 

Cheile fixate în cod sunt verificate primele, deci trebuie șterse

Ordinea de căutare a acreditărilor: o cheie transmisă în cod este tăiată deasupra lanțului, iar căutarea continuă prin variabilele de mediu, fișierul de configurare și acreditările containerului, oprindu-se la prima potrivire și fără a ajunge niciodată la metadatele instanței

Securitatea AWS pentru dezvoltatori

Lanțul, verigă cu verigă

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
  • Câștigă prima potrivire
  • Ștergi cheia stocată, iar căutarea continuă spre rol
Securitatea AWS pentru dezvoltatori

Demonstrarea identității din afara AWS

Pipeline-urile de cod rulează adesea în afara AWS, deci lanțul de acreditări nu poate fi atașat

  • Rulează pe GitHub sau GitLab
  • Lanțul nu are ce găsi

Un runner CI și platforma sa reprezentate în afara granițelor AWS, runner-ul marcat ca neavând rol de atașat, iar platforma semnând un token OIDC care identifică un singur repository și un singur workflow

Securitatea AWS pentru dezvoltatori

Demonstrarea identității din afara AWS

Pipeline-urile de cod rulează adesea în afara AWS, deci lanțul de acreditări nu poate fi atașat

  • Rulează pe GitHub sau GitLab
  • Lanțul nu are ce găsi

 

Token OIDC (OpenID Connect)

  • Semnat și de scurtă durată
  • O declarație de identitate, nu o acreditare

Un runner CI și platforma sa reprezentate în afara granițelor AWS, runner-ul marcat ca neavând rol de atașat, iar platforma semnând un token OIDC care identifică un singur repository și un singur workflow

Securitatea AWS pentru dezvoltatori

O regulă în loc de o cheie stocată

Un token OIDC care identifică un repository, schimbat prin AssumeRoleWithWebIdentity pentru acreditări temporare care expiră într-o oră, deoarece politica de încredere a rolului identifică deja acel emitent și acel repository

Schimbul tokenului pe acreditări

Securitatea AWS pentru dezvoltatori

O regulă în loc de o cheie stocată

Un token OIDC care identifică un repository, schimbat prin AssumeRoleWithWebIdentity pentru acreditări temporare care expiră într-o oră, deoarece politica de încredere a rolului identifică deja acel emitent și acel repository

Schimbul tokenului pe acreditări

  • AssumeRoleWithWebIdentity: AssumeRole, cu un token extern ca dovadă
  • Politică de încredere: scrisă pe rol în avans, nu stocată în pipeline
  • Claim: un fapt din interiorul tokenului
  • Emitentul este comun tuturor repository-urilor de pe platformă, deci fixează și repository-ul

Secretele din repository: acum goale

Securitatea AWS pentru dezvoltatori

Fiecare cerere este semnată

Signature Version 4, sau SigV4

  • Dovedește ce acreditare a făcut cererea
  • Dovedește că cererea nu a fost modificată în tranzit
  • Semnată de CLI și SDK la fiecare apel

Flux de semnare în care o cerere și acreditările tale produc o semnătură trimisă în header-ul Authorization, pe care AWS o recalculează și o compară, acceptând-o la potrivire și returnând SignatureDoesNotMatch în caz de nepotrivire

Securitatea AWS pentru dezvoltatori

O semnătură pe care o poți preda

Acreditări temporare

  • Multe acțiuni, limitate de rol
  • Deținute de codul tău

Codul tău apelând patru servicii AWS diferite, S3, DynamoDB, SQS și KMS, cu acreditări temporare

Securitatea AWS pentru dezvoltatori

O semnătură pe care o poți preda

Acreditări temporare

  • Multe acțiuni, limitate de rol
  • Deținute de codul tău

URL presemnat

  • Un obiect, o acțiune, și oricine deține linkul
  • O expirare pe care o alegi, apoi nimic
  • Poartă permisiunile tale, nu ale deținătorului

Codul tău apelând patru servicii AWS diferite, S3, DynamoDB, SQS și KMS, cu acreditări temporare

Browserul altcuiva ajungând la exact un obiect printr-o singură cale, întrerupt de un ceas etichetat cu expirarea pe care ai setat-o

Securitatea AWS pentru dezvoltatori

Hai să exersăm!

Securitatea AWS pentru dezvoltatori

Preparing Video For Download...