Rollen, tijdelijke credentials en SigV4

AWS-beveiliging gebruiken voor developers

Rahul Singh

Technical Product Manager

De key die langer leeft dan de taak

Om sneller te werken wordt in een script een key aangemaakt en in een configuratiebestand opgeslagen.

In dat bestand wordt hij:

  • Nooit geroteerd
  • Nooit ingetrokken
  • Nooit verlopen

Eén access key die uitwaaiert naar zes opslaglocaties, met rechts een tijdas die laat zien dat hij op maand achttien nog geldig is

AWS-beveiliging gebruiken voor developers

De key die langer leeft dan de taak

Om sneller te werken wordt in een script een key aangemaakt en in een configuratiebestand opgeslagen.

In dat bestand wordt hij:

  • Nooit geroteerd
  • Nooit ingetrokken
  • Nooit verlopen

 

18 maanden later is hij nog steeds geldig

Eén access key die uitwaaiert naar zes opslaglocaties, met rechts een tijdas die laat zien dat hij op maand achttien nog geldig is

AWS-beveiliging gebruiken voor developers

Credentials die zelf verlopen

Maak verloop standaard met AWS STS

  1. Vraag een rol aan, ontvang credentials met een ingebouwde klok

  2. Security Token Service (STS): verloop ingebouwd, standaard één uur

Een applicatie roept AssumeRole aan op AWS STS, en STS retourneert credentials met een ingebouwde klok.

AWS-beveiliging gebruiken voor developers

Credentials die zelf verlopen

Maak verloop standaard met AWS STS

  1. Vraag een rol aan, ontvang credentials met een ingebouwde klok

  2. Tijdelijke credentials beginnen met ASIA en hebben een session token

  3. Security Token Service (STS): verloop ingebouwd, standaard één uur

Een applicatie roept AssumeRole aan op AWS STS en ontvangt credentials met een ingebouwde klok. Daaronder twee credentials naast elkaar: een langlevende key die begint met AKIA zonder session token en zonder verloop, en tijdelijke credentials die beginnen met ASIA met een session token en die na één uur verlopen.

AWS-beveiliging gebruiken voor developers

Credentials die zelf verlopen

Maak verloop standaard met AWS STS

  1. Vraag een rol aan, ontvang credentials met een ingebouwde klok

  2. Tijdelijke credentials beginnen met ASIA en hebben een session token

  3. Dezelfde call wordt eerst geaccepteerd, daarna niet meer

  4. Security Token Service (STS): verloop ingebouwd, standaard één uur

Een applicatie roept AssumeRole aan op AWS STS en ontvangt credentials met een ingebouwde klok. Daaronder een langlevende key die begint met AKIA en nooit verloopt naast tijdelijke credentials die beginnen met ASIA met een session token en die na één uur verlopen. Daaronder dezelfde GetObject-call die om tien uur 200 OK teruggeeft en om vijf over elf ExpiredToken.

AWS-beveiliging gebruiken voor developers

Hoe je code ze vindt

De credential provider chain controleren

  • De AWS SDK, de bibliotheek in je code, doet de zoekactie
  • Een vaste lijst, in volgorde gecheckt
  • Stopt bij de eerste match

Zoekvolgorde voor credentials: een key meegegeven in code is doorgestreept boven de keten; de zoekactie gaat verder langs omgevingsvariabelen, configbestand en container-credentials, stopt bij de eerste match en bereikt instance-metadata niet

AWS-beveiliging gebruiken voor developers

Hoe je code ze vindt

De credential provider chain controleren

  • De AWS SDK, de bibliotheek in je code, doet de zoekactie
  • Een vaste lijst, in volgorde gecheckt
  • Stopt bij de eerste match

 

Hardcoded keys worden als eerste gecheckt, dus verwijder ze

Zoekvolgorde voor credentials: een key meegegeven in code is doorgestreept boven de keten; de zoekactie gaat verder langs omgevingsvariabelen, configbestand en container-credentials, stopt bij de eerste match en bereikt instance-metadata niet

AWS-beveiliging gebruiken voor developers

De keten, schakel voor schakel

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
  • First match wins
  • Verwijder de opgeslagen key, dan zoekt hij door naar de rol
AWS-beveiliging gebruiken voor developers

Je identiteit bewijzen van buiten AWS

Code-pipelines draaien vaak buiten AWS, dus de credential chain kan niet worden gekoppeld

  • Draait op GitHub of GitLab
  • Niks voor de keten om te vinden

Een CI-runner en zijn platform buiten de AWS-grens; de runner heeft geen koppelbare rol, en het platform ondertekent een OIDC-token met één repository en één workflow

AWS-beveiliging gebruiken voor developers

Je identiteit bewijzen van buiten AWS

Code-pipelines draaien vaak buiten AWS, dus de credential chain kan niet worden gekoppeld

  • Draait op GitHub of GitLab
  • Niks voor de keten om te vinden

 

OIDC-token (OpenID Connect)

  • Ondertekend en kortlevend
  • Een identiteitsverklaring, geen credential

Een CI-runner en zijn platform buiten de AWS-grens; de runner heeft geen koppelbare rol, en het platform ondertekent een OIDC-token met één repository en één workflow

AWS-beveiliging gebruiken voor developers

Een regel in plaats van een opgeslagen key

Een OIDC-token met een repositorynaam, ingewisseld via AssumeRoleWithWebIdentity voor tijdelijke credentials die na één uur verlopen, omdat het trustbeleid van de rol die issuer en die repository al noemt

De token inwisselen voor credentials

AWS-beveiliging gebruiken voor developers

Een regel in plaats van een opgeslagen key

Een OIDC-token met een repositorynaam, ingewisseld via AssumeRoleWithWebIdentity voor tijdelijke credentials die na één uur verlopen, omdat het trustbeleid van de rol die issuer en die repository al noemt

De token inwisselen voor credentials

  • AssumeRoleWithWebIdentity: AssumeRole, met een externe token als bewijs
  • Trust policy: vooraf op de rol gezet, niet in de pipeline opgeslagen
  • Claim: één feit in de token
  • De issuer is gedeeld door elke repository op het platform, pin dus ook de repository

Repositorygeheimen: nu leeg

AWS-beveiliging gebruiken voor developers

Elke aanvraag wordt ondertekend

Signature Version 4, of SigV4

  • Bewijst welke credential de aanvraag deed
  • Bewijst dat de aanvraag onderweg niet is gewijzigd
  • Ondertekend door de CLI en SDK bij elke call

Ondertekeningsstroom waarbij een request en je credentials een handtekening opleveren die in de Authorization-header wordt verzonden; AWS berekent opnieuw en vergelijkt, accepteert bij een match en retourneert SignatureDoesNotMatch bij een mismatch

AWS-beveiliging gebruiken voor developers

Een handtekening die je kunt doorgeven

Tijdelijke credentials

  • Veel acties, begrensd door de rol
  • In je code aanwezig

Je code die vier verschillende AWS-services aanroept, S3, DynamoDB, SQS en KMS, met tijdelijke credentials

AWS-beveiliging gebruiken voor developers

Een handtekening die je kunt doorgeven

Tijdelijke credentials

  • Veel acties, begrensd door de rol
  • In je code aanwezig

Pre-signed URL

  • Eén object, één actie, en iedereen met de link
  • Een door jou gekozen verloop, daarna niets
  • Draagt jouw rechten, niet die van de houder

Je code die vier verschillende AWS-services aanroept, S3, DynamoDB, SQS en KMS, met tijdelijke credentials

De browser van iemand anders die precies één object bereikt via één pad, onderbroken door een klok met het door jou ingestelde verloop

AWS-beveiliging gebruiken voor developers

Laten we oefenen!

AWS-beveiliging gebruiken voor developers

Preparing Video For Download...