Houd geheimen uit code en logs

AWS-beveiliging gebruiken voor developers

Rahul Singh

Technical Product Manager

Niet alles wat gevoelig is, is een geheim

Drie soorten string

  • Geheim: een vreemde kan zich als jij voordoen
  • Gevoelige data: een persoon wordt blootgesteld
  • Config: niets te halen

Drie gestapelde rijen die een geheim, gevoelige data en config vergelijken. Elke rij toont twee voorbeeldwaarden en wat een vreemde ermee kan, van zich voordoen als jij tot niets te halen.

AWS-beveiliging gebruiken voor developers

Niet alles wat gevoelig is, is een geheim

Drie soorten string

  • Geheim: een vreemde kan zich als jij voordoen
  • Gevoelige data: een persoon wordt blootgesteld
  • Config: niets te halen

Twee namen voor persoonsgegevens

  • PII: personally identifiable information
  • PHI: protected health information

Drie gestapelde rijen die een geheim, gevoelige data en config vergelijken. Elke rij toont twee voorbeeldwaarden en wat een vreemde ermee kan, van zich voordoen als jij tot niets te halen.

AWS-beveiliging gebruiken voor developers

Vier manieren waarop een geheim uitlekt

Een geheim in een draaiend systeem waaiert uit naar vier genummerde uitgangen: marker één naar broncode en de geschiedenis, twee naar omgevingsvariabelen, drie naar applicatielogs, vier naar foutoutput en traces. Alle vier komen samen in een vak met leesbaar door iemand.

  1. Broncode en de geschiedenis
  2. Omgevingsvariabelen
AWS-beveiliging gebruiken voor developers

Vier manieren waarop een geheim uitlekt

Een geheim in een draaiend systeem waaiert uit naar vier genummerde uitgangen: marker één naar broncode en de geschiedenis, twee naar omgevingsvariabelen, drie naar applicatielogs, vier naar foutoutput en traces. Alle vier komen samen in een vak met leesbaar door iemand.

  1. Broncode en de geschiedenis
  2. Omgevingsvariabelen
  3. Applicatielogs
  4. Foutoutput en traces
AWS-beveiliging gebruiken voor developers

Versleuteld in rust is niet verborgen

De keuze die veilig voelt

  • Versleuteld in rust, altijd
  • AWS KMS-sleutel, standaard door AWS beheerd

Een Lambda-functie met een omgevingsvariabele splitst in twee paden. Op schijf is deze versleuteld in rust met een AWS KMS-sleutel (groen). Over de API geeft een aanroep naar GetFunctionConfiguration de waarde in het klare (rood). Beide paden komen samen bij een notitie: slechts één pad is beschermd.

AWS-beveiliging gebruiken voor developers

Versleuteld in rust is niet verborgen

De keuze die veilig voelt

  • Versleuteld in rust, altijd
  • AWS KMS-sleutel, standaard door AWS beheerd

Wat GetFunctionConfiguration teruggeeft

  • De waarde, in platte tekst

Een opslagantwoord op een toegangsprobleem

Een Lambda-functie met een omgevingsvariabele splitst in twee paden. Op schijf is deze versleuteld in rust met een AWS KMS-sleutel (groen). Over de API geeft een aanroep naar GetFunctionConfiguration de waarde in het klare (rood). Beide paden komen samen bij een notitie: slechts één pad is beschermd.

AWS-beveiliging gebruiken voor developers

Welke store, en waarom

Twee services, elk één taak

  • Secrets Manager: gebouwd voor geheimen
  • Parameter Store: gebouwd voor config, en een SecureString-parameter is versleuteld met een KMS-sleutel

Een spectrumdiagram. Links staat Secrets Manager, rechts Systems Manager Parameter Store, met vier horizontale rails ertussen. Op elke rail een marker: één uiterst links, twee links van het midden, drie op de middenlijn, vier uiterst rechts, met kostencijfers aan beide uiteinden van de vierde rail en een notitie dat rotatie de doorslag geeft.

AWS-beveiliging gebruiken voor developers

Welke store, en waarom

Twee services, elk één taak

  • Secrets Manager: gebouwd voor geheimen
  • Parameter Store: gebouwd voor config, en een SecureString-parameter is versleuteld met een KMS-sleutel

Vier dingen beslissen het

  1. Beheerde rotatie
  2. Delen tussen accounts
  3. Versiebeheer
  4. Kosten

Een spectrumdiagram. Links staat Secrets Manager, rechts Systems Manager Parameter Store, met vier horizontale rails ertussen. Op elke rail een marker: één uiterst links, twee links van het midden, drie op de middenlijn, vier uiterst rechts, met kostencijfers aan beide uiteinden van de vierde rail en een notitie dat rotatie de doorslag geeft.

AWS-beveiliging gebruiken voor developers

Lees vers, cache kort

Je draaiende proces roept GetSecretValue aan op een geheimenstore bij marker één, met een afgebakende rol bij marker twee, beperkt tot één secret ARN plus kms:Decrypt, en bewaart de teruggegeven waarde in een in-memory cache bij marker drie voordat het een database of partner-API aanroept.

  1. Roep GetSecretValue aan bij opstarten
  2. Rol afgebakend tot één secret ARN plus kms:Decrypt
AWS-beveiliging gebruiken voor developers

Lees vers, cache kort

Je draaiende proces roept GetSecretValue aan op een geheimenstore bij marker één, met een afgebakende rol bij marker twee, beperkt tot één secret ARN plus kms:Decrypt, en bewaart de teruggegeven waarde in een in-memory cache bij marker drie voordat het een database of partner-API aanroept.

  1. Roep GetSecretValue aan bij opstarten
  2. Rol afgebakend tot één secret ARN plus kms:Decrypt
  3. Cache de waarde in geheugen

Cache je voor altijd, dan breekt rotatie je

AWS-beveiliging gebruiken voor developers

Rotatie verplaatst de waarde onder je vandaan

Waarom vier stappen, geen één swap

  • De nieuwe waarde is bewezen vóór iemand hem gebruikt
  • Eén swap zou alle clients tegelijk breken

Drie kolommen van boven naar beneden: de rotatiestappen, het label en je cache. Secrets Manager draait createSecret, setSecret en testSecret, dan markeert een stippellijn het moment waarop finishSecret het label verplaatst. Boven die lijn luidt het label AWSCURRENT is de oude waarde en is de cache correct; eronder luidt het label AWSCURRENT is de nieuwe waarde en is dezelfde cache gearceerd rood. Twee fixes sluiten het diagram: korte cachelevensduur en verversen bij een authenticatiefout.

AWS-beveiliging gebruiken voor developers

Rotatie verplaatst de waarde onder je vandaan

Waarom vier stappen, geen één swap

  • De nieuwe waarde is bewezen vóór iemand hem gebruikt
  • Eén swap zou alle clients tegelijk breken

Vier stappen, één overdracht

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Drie kolommen van boven naar beneden: de rotatiestappen, het label en je cache. Secrets Manager draait createSecret, setSecret en testSecret, dan markeert een stippellijn het moment waarop finishSecret het label verplaatst. Boven die lijn luidt het label AWSCURRENT is de oude waarde en is de cache correct; eronder luidt het label AWSCURRENT is de nieuwe waarde en is dezelfde cache gearceerd rood. Twee fixes sluiten het diagram: korte cachelevensduur en verversen bij een authenticatiefout.

AWS-beveiliging gebruiken voor developers

Rotatie verplaatst de waarde onder je vandaan

Waarom vier stappen, geen één swap

  • De nieuwe waarde is bewezen vóór iemand hem gebruikt
  • Eén swap zou alle clients tegelijk breken

Vier stappen, één overdracht

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Niets vertelt het je cache

  • Levensduur van minuten, dan opnieuw lezen
  • Ververs bij een authenticatiefout

Drie kolommen van boven naar beneden: de rotatiestappen, het label en je cache. Secrets Manager draait createSecret, setSecret en testSecret, dan markeert een stippellijn het moment waarop finishSecret het label verplaatst. Boven die lijn luidt het label AWSCURRENT is de oude waarde en is de cache correct; eronder luidt het label AWSCURRENT is de nieuwe waarde en is dezelfde cache gearceerd rood. Twee fixes sluiten het diagram: korte cachelevensduur en verversen bij een authenticatiefout.

AWS-beveiliging gebruiken voor developers

Mask, redact, blijf debugbaar

Eén ruwe logregel met een request-ID, een volledig kaartnummer en een token, rood omlijnd. Daaronder dezelfde drie velden na behandeling: de request-ID ongemoeid, de kaart gemaskeerd tot de laatste vier cijfers, en het token vervangen door een geredigeerde markering, met de notitie genoeg over om te debuggen.

Schoon voor je wegschrijft

  • Mask: vorm blijft, waarde verborgen
AWS-beveiliging gebruiken voor developers

Mask, redact, blijf debugbaar

Eén ruwe logregel met een request-ID, een volledig kaartnummer en een token, rood omlijnd. Daaronder dezelfde drie velden na behandeling: de request-ID ongemoeid, de kaart gemaskeerd tot de laatste vier cijfers, en het token vervangen door een geredigeerde markering, met de notitie genoeg over om te debuggen.

Schoon voor je wegschrijft

  • Mask: vorm blijft, waarde verborgen
  • Redact: waarde weg, marker blijft
AWS-beveiliging gebruiken voor developers

Mask, redact, blijf debugbaar

Eén ruwe logregel met een request-ID, een volledig kaartnummer en een token, rood omlijnd. Daaronder dezelfde drie velden na behandeling: de request-ID ongemoeid, de kaart gemaskeerd tot de laatste vier cijfers, en het token vervangen door een geredigeerde markering, met de notitie genoeg over om te debuggen.

Schoon voor je wegschrijft

  • Mask: vorm blijft, waarde verborgen
  • Redact: waarde weg, marker blijft

On-call heeft config nodig, een vreemde de rest niet

AWS-beveiliging gebruiken voor developers

Laten we oefenen!

AWS-beveiliging gebruiken voor developers

Preparing Video For Download...