Rollen, temporäre Anmeldedaten und SigV4

AWS-Sicherheit für Entwickler:innen nutzen

Rahul Singh

Technical Product Manager

Der Schlüssel, der die Aufgabe überlebt

Um Arbeit zu beschleunigen, wird ein Schlüssel per Skript erstellt und in einer Konfigurationsdatei gespeichert.

In der Datei ist er:

  • Nie rotiert
  • Nie widerrufen
  • Nie abgelaufen

Ein Zugriffsschlüssel verzweigt sich auf sechs Speicherorte; rechts zeigt eine Zeitachse, dass er im 18. Monat noch gültig ist

AWS-Sicherheit für Entwickler:innen nutzen

Der Schlüssel, der die Aufgabe überlebt

Um Arbeit zu beschleunigen, wird ein Schlüssel per Skript erstellt und in einer Konfigurationsdatei gespeichert.

In der Datei ist er:

  • Nie rotiert
  • Nie widerrufen
  • Nie abgelaufen

 

18 Monate später ist er noch gültig

Ein Zugriffsschlüssel verzweigt sich auf sechs Speicherorte; rechts zeigt eine Zeitachse, dass er im 18. Monat noch gültig ist

AWS-Sicherheit für Entwickler:innen nutzen

Anmeldedaten, die selbst ablaufen

Ablauf standardmäßig aktivieren mit AWS STS

  1. Eine Rolle anfordern, Anmeldedaten mit eingebauter Uhr erhalten

  2. Security Token Service (STS): Ablauf angehängt, standardmäßig eine Stunde

Eine Anwendung ruft AssumeRole bei AWS STS auf, und STS liefert Anmeldedaten mit eingebauter Uhr.

AWS-Sicherheit für Entwickler:innen nutzen

Anmeldedaten, die selbst ablaufen

Ablauf standardmäßig aktivieren mit AWS STS

  1. Eine Rolle anfordern, Anmeldedaten mit eingebauter Uhr erhalten

  2. Temporäre Anmeldedaten beginnen mit ASIA und enthalten ein Sitzungstoken

  3. Security Token Service (STS): Ablauf angehängt, standardmäßig eine Stunde

Eine Anwendung ruft AssumeRole bei AWS STS auf und erhält Anmeldedaten mit eingebauter Uhr. Darunter zwei Anmeldedaten nebeneinander: ein langlebiger Schlüssel beginnend mit AKIA ohne Sitzungstoken und ohne Ablauf sowie temporäre Anmeldedaten beginnend mit ASIA mit Sitzungstoken, die in einer Stunde ablaufen.

AWS-Sicherheit für Entwickler:innen nutzen

Anmeldedaten, die selbst ablaufen

Ablauf standardmäßig aktivieren mit AWS STS

  1. Eine Rolle anfordern, Anmeldedaten mit eingebauter Uhr erhalten

  2. Temporäre Anmeldedaten beginnen mit ASIA und enthalten ein Sitzungstoken

  3. Derselbe Aufruf wird erst akzeptiert, dann nicht mehr

  4. Security Token Service (STS): Ablauf angehängt, standardmäßig eine Stunde

Eine Anwendung ruft AssumeRole bei AWS STS auf und erhält Anmeldedaten mit eingebauter Uhr. Darunter ein langlebiger Schlüssel beginnend mit AKIA ohne Ablauf neben temporären Anmeldedaten beginnend mit ASIA mit Sitzungstoken, die in einer Stunde ablaufen. Darunter derselbe GetObject-Aufruf mit 200 OK um zehn Uhr und ExpiredToken um fünf nach elf.

AWS-Sicherheit für Entwickler:innen nutzen

So findet dein Code sie

Die Credential Provider Chain prüfen

  • Das AWS SDK, also die Bibliothek in deinem Code, übernimmt die Suche
  • Eine feste Liste, in Reihenfolge geprüft
  • Stoppt beim ersten Treffer

Reihenfolge der Anmeldedaten-Suche: Ein im Code übergebener Schlüssel ist durchgestrichen; die Suche läuft dann über Umgebungsvariablen, Konfigurationsdatei und Container-Anmeldedaten, stoppt beim ersten Treffer und erreicht nie die Instanzmetadaten

AWS-Sicherheit für Entwickler:innen nutzen

So findet dein Code sie

Die Credential Provider Chain prüfen

  • Das AWS SDK, also die Bibliothek in deinem Code, übernimmt die Suche
  • Eine feste Liste, in Reihenfolge geprüft
  • Stoppt beim ersten Treffer

 

Hart codierte Schlüssel werden zuerst geprüft und müssen daher gelöscht werden

Reihenfolge der Anmeldedaten-Suche: Ein im Code übergebener Schlüssel ist durchgestrichen; die Suche läuft dann über Umgebungsvariablen, Konfigurationsdatei und Container-Anmeldedaten, stoppt beim ersten Treffer und erreicht nie die Instanzmetadaten

AWS-Sicherheit für Entwickler:innen nutzen

Die Kette, Glied für Glied

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
  • Erster Treffer gewinnt
  • Gespeicherten Schlüssel löschen, die Suche geht bis zur Rolle weiter
AWS-Sicherheit für Entwickler:innen nutzen

Identität außerhalb von AWS nachweisen

Code-Pipelines laufen oft außerhalb von AWS, daher lässt sich die Credential Chain nicht anhängen

  • Läuft auf GitHub oder GitLab
  • Nichts, was die Kette finden könnte

Ein CI-Runner und seine Plattform außerhalb der AWS-Grenze; der Runner hat keine anhängbare Rolle, und die Plattform signiert ein OIDC-Token, das ein Repository und einen Workflow nennt

AWS-Sicherheit für Entwickler:innen nutzen

Identität außerhalb von AWS nachweisen

Code-Pipelines laufen oft außerhalb von AWS, daher lässt sich die Credential Chain nicht anhängen

  • Läuft auf GitHub oder GitLab
  • Nichts, was die Kette finden könnte

 

OIDC-Token (OpenID Connect)

  • Signiert und kurzlebig
  • Ein Identitätsnachweis, keine Anmeldedaten

Ein CI-Runner und seine Plattform außerhalb der AWS-Grenze; der Runner hat keine anhängbare Rolle, und die Plattform signiert ein OIDC-Token, das ein Repository und einen Workflow nennt

AWS-Sicherheit für Entwickler:innen nutzen

Eine Regel statt eines gespeicherten Schlüssels

Ein OIDC-Token, das ein Repository nennt, wird via AssumeRoleWithWebIdentity gegen temporäre Anmeldedaten getauscht, die in einer Stunde ablaufen, weil die Vertrauensrichtlinie der Rolle diesen Aussteller und dieses Repository bereits nennt

Token gegen Anmeldedaten tauschen

AWS-Sicherheit für Entwickler:innen nutzen

Eine Regel statt eines gespeicherten Schlüssels

Ein OIDC-Token, das ein Repository nennt, wird via AssumeRoleWithWebIdentity gegen temporäre Anmeldedaten getauscht, die in einer Stunde ablaufen, weil die Vertrauensrichtlinie der Rolle diesen Aussteller und dieses Repository bereits nennt

Token gegen Anmeldedaten tauschen

  • AssumeRoleWithWebIdentity: AssumeRole, mit externem Token als Nachweis
  • Vertrauensrichtlinie: vorab auf der Rolle definiert, nicht in der Pipeline gespeichert
  • Claim: eine Angabe im Token
  • Der Aussteller ist für alle Repositories der Plattform gleich, also auch das Repository pinnen

Repository-Secrets: jetzt leer

AWS-Sicherheit für Entwickler:innen nutzen

Jede Anfrage ist signiert

Signature Version 4, oder SigV4

  • Weist nach, welches Anmeldedatum die Anfrage gestellt hat
  • Weist nach, dass die Anfrage unterwegs nicht verändert wurde
  • Bei jedem Aufruf von CLI und SDK signiert

Signaturablauf: Aus Anfrage und Anmeldedaten entsteht eine Signatur im Authorization-Header; AWS berechnet sie neu und vergleicht, akzeptiert bei Übereinstimmung und gibt bei Abweichung SignatureDoesNotMatch zurück

AWS-Sicherheit für Entwickler:innen nutzen

Eine Signatur zum Weitergeben

Temporäre Anmeldedaten

  • Viele Aktionen, durch die Rolle begrenzt
  • Von deinem Code gehalten

Dein Code ruft vier verschiedene AWS-Services auf – S3, DynamoDB, SQS und KMS – mit temporären Anmeldedaten

AWS-Sicherheit für Entwickler:innen nutzen

Eine Signatur zum Weitergeben

Temporäre Anmeldedaten

  • Viele Aktionen, durch die Rolle begrenzt
  • Von deinem Code gehalten

Voraus-signierte URL

  • Ein Objekt, eine Aktion, und jede Person mit dem Link
  • Ablauf nach deiner Wahl, danach nichts mehr
  • Trägt deine Berechtigungen, nicht die der haltenden Person

Dein Code ruft vier verschiedene AWS-Services auf – S3, DynamoDB, SQS und KMS – mit temporären Anmeldedaten

Der Browser einer anderen Person erreicht genau ein Objekt über einen einzelnen Pfad, unterbrochen von einer Uhr mit dem von dir gesetzten Ablauf

AWS-Sicherheit für Entwickler:innen nutzen

Lass uns üben!

AWS-Sicherheit für Entwickler:innen nutzen

Preparing Video For Download...