Den API-Gateway-Authorizer auswählen

AWS-Sicherheit für Entwickler:innen nutzen

Rahul Singh

Technical Product Manager

Geprüft, bevor dein Code läuft

Ein Aufrufer passiert den API-Gateway-Authorizer, bevor er deinen Code erreicht; ein abgelehnter Aufrufer erhält eine 401.

Pass: Die Anfrage erreicht deinen Code

Fail: 401 Unauthorized, dein Code läuft nicht

AWS-Sicherheit für Entwickler:innen nutzen

Wer prüft

Drei Authorizer zur Auswahl
  1. IAM-Auth (AWS_IAM): AWS prüft eine Signatur

Ein vertikaler Stapel auf einer Achse von „AWS prüft" oben bis „du prüfst" unten. Nur die erste Karte ist ausgefüllt: IAM-Auth, bei der AWS eine Signatur prüft.

AWS-Sicherheit für Entwickler:innen nutzen

Wer prüft

Drei Authorizer zur Auswahl
  1. IAM-Auth (AWS_IAM): AWS prüft eine Signatur
  2. Cognito-Authorizer (COGNITO_USER_POOLS): AWS verifiziert ein Token
    • Signatur, iss, aud, exp

Der gleiche vertikale Stapel mit zwei ausgefüllten Karten: IAM-Auth, bei der AWS eine Signatur prüft, und ein Cognito-Authorizer, bei dem AWS ein Token verifiziert.

AWS-Sicherheit für Entwickler:innen nutzen

Wer prüft

Drei Authorizer zur Auswahl
  1. IAM-Auth (AWS_IAM): AWS prüft eine Signatur
  2. Cognito-Authorizer (COGNITO_USER_POOLS): AWS verifiziert ein Token
    • Signatur, iss, aud, exp
  3. Lambda-Authorizer: deine Funktion gibt allow oder deny zurück
    • Für Tokens, die nicht Cognito sind

Drei Authorizer, gereiht von „AWS prüft" bis „du prüfst": IAM-Auth, wo AWS eine Signatur prüft; ein Cognito-Authorizer, wo AWS ein Token verifiziert; und ein Lambda-Authorizer, wo du die Prüfung schreibst.

AWS-Sicherheit für Entwickler:innen nutzen

Pass die Tür dem Aufrufer an

 

Der Aufrufer entscheidet

 

  • Interner Service: hat bereits AWS-Zugangsdaten

Die erste von drei Zuordnungen Aufrufer→Authorizer: ein interner Service zu IAM-Auth.

AWS-Sicherheit für Entwickler:innen nutzen

Pass die Tür dem Aufrufer an

 

Der Aufrufer entscheidet

 

  • Interner Service: hat bereits AWS-Zugangsdaten
  • App-Nutzer: trägt ein Cognito-Token

Zwei von drei Zuordnungen Aufrufer→Authorizer: ein interner Service zu IAM-Auth, und ein App-Nutzer zu einem Cognito-Authorizer.

AWS-Sicherheit für Entwickler:innen nutzen

Pass die Tür dem Aufrufer an

 

Der Aufrufer entscheidet

 

  • Interner Service: hat bereits AWS-Zugangsdaten
  • App-Nutzer: trägt ein Cognito-Token
  • Partner-App: bringt eigene Autorisierungslogik mit

Drei Aufrufer, jeweils dem benötigten Authorizer zugeordnet: ein interner Service zu IAM-Auth, ein App-Nutzer zu einem Cognito-Authorizer und eine Partner-App zu einem Lambda-Authorizer.

AWS-Sicherheit für Entwickler:innen nutzen

Achte auf den API-Typ

REST-API

  • Alle drei Authorizer plus Ressourcenrichtlinien
  • API-Keys, Throttling pro Client, Request-Validierung, WAF

Eine Vergleichskarte für eine REST-API, mit Häkchen bei IAM-Auth, Cognito-User-Pool-Authorizer, Lambda-Authorizer und Ressourcenrichtlinie. Die HTTP-API-Karte daneben ist noch leer.

AWS-Sicherheit für Entwickler:innen nutzen

Achte auf den API-Typ

REST-API

  • Alle drei Authorizer plus Ressourcenrichtlinien
  • API-Keys, Throttling pro Client, Request-Validierung, WAF

 

HTTP-API

  • JWT-Authorizer, beliebiger OIDC-Issuer
  • Keine Ressourcenrichtlinien; günstiger und schneller

Zwei Karten, die zeigen, welche Authorizer jeder API-Typ unterstützt: Eine REST-API ergänzt Ressourcenrichtlinien, während eine HTTP-API den Cognito-Authorizer durch einen JWT-Authorizer ersetzt und keine Ressourcenrichtlinien hat.

AWS-Sicherheit für Entwickler:innen nutzen

Der Authorizer merkt sich das

Gecacht, um Zeit zu sparen

  • Erster Aufruf: Der Authorizer läuft
  • Spätere Aufrufe: Antwort aus dem Cache lesen

Der erste Aufruf führt den Authorizer aus und schreibt ein Allow mit Time-to-Live in den Cache; ein späterer Aufruf liest dieses Allow aus dem Cache, ohne den Authorizer erneut auszuführen.

AWS-Sicherheit für Entwickler:innen nutzen

Der Authorizer merkt sich das

Gecacht, um Zeit zu sparen

  • Erster Aufruf: Der Authorizer läuft
  • Spätere Aufrufe: Antwort aus dem Cache lesen

 

Cache-TTL

  • authorizerResultTtlInSeconds: 300 s Standard, 3600 s Maximum
  • Null deaktiviert Caching

Der erste Aufruf führt den Authorizer aus und schreibt ein Allow mit Time-to-Live in den Cache; ein späterer Aufruf liest dieses Allow aus dem Cache, ohne den Authorizer erneut auszuführen.

AWS-Sicherheit für Entwickler:innen nutzen

Ein gecachtes Allow kann länger leben als die Berechtigung

Eine zweispurige Zeitleiste. Auf der Berechtigungsspur wechselt der Status am Widerrufspunkt von gültig zu widerrufen, während die darunterliegende Cache-Allow-Spur noch darüber hinaus „allow" zeigt; das Fenster nach dem Widerruf ist schattiert.

Im Moment des Widerrufs

  • Berechtigung: sofort widerrufen
  • Gecachtes Allow: gewährt weiter
AWS-Sicherheit für Entwickler:innen nutzen

Ein gecachtes Allow kann länger leben als die Berechtigung

Die gleiche zweispurige Zeitleiste mit schattiertem Fenster zwischen Widerruf und TTL-Ablauf, markiert als weiterhin erlaubt: Die Berechtigung ist widerrufen, aber das gecachte Allow gewährt weiter Zugriff.

Das Zwischenfenster

  • Berechtigung weg, Cache nicht informiert
  • Zugriff bleibt bis zum TTL-Ablauf
AWS-Sicherheit für Entwickler:innen nutzen

Ein gecachtes Allow kann länger leben als die Berechtigung

Die gleiche zweispurige Zeitleiste mit einem Pfeil über das schattierte Fenster: Eine kürzere TTL verschiebt den Ablauf nach vorn und verkürzt die Spanne, in der ein widerrufenes Recht noch Zugriff gewährt.

Steuere dieses Fenster

  • Kurze TTL, wenn Widerruf schnell greifen muss
  • TTL 0 auf den sensibelsten Routen
AWS-Sicherheit für Entwickler:innen nutzen

Ein Aufrufer umgeht die Vordertür

Ein Drittanbieter in deinem Account

  • Nimmt eine von dir erstellte Rolle an
  • Du gibst die Rollen-ARN weiter

Ein Monitoring-Anbieter sitzt zwischen zwei Kundenboxen oben und deiner Rolle unten. Deine Box gibt ihre Rollen-ARN an den Anbieter, der deine Rolle annimmt. Die zweite Kundenbox ist ausgegraut und noch nicht Teil der Geschichte.

AWS-Sicherheit für Entwickler:innen nutzen

Ein Aufrufer umgeht die Vordertür

Ein Drittanbieter in deinem Account

  • Nimmt eine von dir erstellte Rolle an
  • Du gibst die Rollen-ARN weiter

Die Rollen-ARN ist kein Geheimnis

Das „confused deputy"-Problem

Die zweite Kundenbox ist jetzt aktiv (rot) und gibt deine Rollen-ARN weiter, als wäre es ihre eigene. Zwei Pfeile führen nun vom Monitoring-Anbieter zu deiner Rolle – ein Aufruf pro Kunde; nichts unterscheidet sie.

AWS-Sicherheit für Entwickler:innen nutzen

Ein Aufrufer umgeht die Vordertür

Ein Drittanbieter in deinem Account

  • Nimmt eine von dir erstellte Rolle an
  • Du gibst die Rollen-ARN weiter

Die Rollen-ARN ist kein Geheimnis

Das „confused deputy"-Problem

Die Lösung: sts:ExternalId

  • Der Anbieter generiert eine pro Kunde
  • Deine Trust-Policy verlangt die Übereinstimmung

Deine Rolle fordert nun, dass die External ID gleich 12345 ist. Der Aufruf mit 12345 erreicht die Rolle; der Aufruf mit 99999 wird durch ein rotes Kreuz vorab gestoppt.

AWS-Sicherheit für Entwickler:innen nutzen

Lass uns üben!

AWS-Sicherheit für Entwickler:innen nutzen

Preparing Video For Download...