Verwenden von AWS Lambda Lambda-Autorisierern - AWS HealthImaging

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von AWS Lambda Lambda-Autorisierern

Diagramm, das den OIDC Lambda-Workflow in zeigt. HealthImaging

Der Authentifizierungsablauf besteht aus den folgenden Schritten:

  1. HTTP-Anfrage mit Bearer-Token an den Endpunkt DICOMweb

  2. AWS HealthImaging überprüft den Ablauf des Tokens

  3. Anfrage an Lambda-Autorisierer weiterleiten

  4. Lambda validiert Token mit Identity Provider (IdP)

  5. Lambda gibt die IAM-Rolle zurück

  6. Die Bewertung der Richtlinie und die Benutzerauthentifizierung sind abgeschlossen

Voraussetzungen

1. Einrichtung des Lambda Authorizers

  • Erstellen Sie einen Autorisierer, der akzeptiert und zurücksendet AuthInput AuthResult

  • Validiert BearerToken (Signatur, Ablauf, Geltungsbereich, Emittent und Geschäftsregeln)

  • Gibt den IAM-Rollen-ARN mit den erforderlichen DICOMweb Betriebsberechtigungen zurück

  • Muss in ≤ 1 Sekunde antworten (bereitgestellte Parallelität konfigurieren)

Implementieren Sie die Token-Extraktion:

// in Node.js export const handler = async (event) => { try { const token = event.bearerToken; const operation = event.operation; } }

2. Datenspeicher-Konfiguration

  • Aktivieren Sie die Funktion, indem Sie sie bei der Erstellung angeben lambdaAuthorizerArn

Anmerkung

Ihrem AWS-Konto werden Lambda-Aufrufe und Dauer in Rechnung gestellt. Weitere Informationen finden Sie unter AWS Lambda – Preise.

Einzelheiten zum Autorisierungsprozess

Regeln für die Token-Validierung

HealthImaging bewertet die folgenden Token-Ansprüche:

  • exp— Muss nach der aktuellen Uhrzeit in UTC liegen

  • nbf— Muss vor der aktuellen Uhrzeit in UTC liegen

  • iat— Muss vor der aktuellen Uhrzeit in UTC liegen und NICHT früher als 12 Stunden davor (maximale Lebensdauer des Tokens)

Ereignis- und Antwortschemas

AHI ruft Ihre Funktion mit der folgenden Eingabe auf und erwartet die folgende Ausgabe.

Eingabe durch den Authorizer

{ "datastoreId": "{datastore id}", "operation": "{Healthimaging API name e.g. GetDICOMInstance}", "bearerToken": "{access token}" }
Authorizer-Ausgabe

{ "isTokenValid": {true or false}, "roleArn": "{role arn or empty string meaning to deny the request explicitly}" }

Bearbeitung der Anfrage

Bearbeitung der ersten Anfrage:

  • Falls keine Autorisierung: Bearer-Header → Anfrage wird zur SigV4-Authentifizierung weitergeleitet

  • Wenn das Bearer-Token vorhanden ist:

    • Löst Datenspeicher auf LambdaAuthorizerArn

    • Ruft den Authorizer mithilfe von Forward Access Sessions (FAS) auf

Lambda-Autorisierungsprozess:

  • Empfängt AuthInput mit DataStoreID, Operation und BearerToken

  • Die Validierung muss innerhalb von 1 Sekunde abgeschlossen sein

  • Rücksendungen AuthResult mit Validierungsstatus und Rollen-ARN

Ablauf der Implementierung

Clientseitiger Authentifizierungsablauf

  1. Benutzerauthentifizierung: Leitet den Benutzer zum Autorisierungsendpunkt des IdP weiter

  2. Token-Akquisition: Tauschen Sie den Autorisierungscode für ID- und Zugriffstoken (JWT) aus

  3. API-Aufruf: Fügen Sie das Zugriffstoken in den HTTP Authorization Bearer-Header ein

  4. Token-Validierung: Vollständiger Validierungsprozess durch HealthImaging einen Lambda-Autorisierer

Schritte zur Einrichtung

Implementierung von Lambda Authorizer

  • Schnittstelle implementieren AuthInput/AuthResult

  • Bestätigen Sie das Token (Signatur, Ablauf, Emittent, Zielgruppe, Geltungsbereich)

  • Rückgabeentscheidung und IAM-Rolle ARN

IAM-Konfiguration

  • Erstellen Sie eine Richtlinie mit minimalen DICOMweb Betriebsberechtigungen

  • Erstellen Sie eine Rolle mit Vertrauensrichtlinie für medical-imaging.region.amazonaws.com

  • Lambda-Ausführungsberechtigungen konfigurieren

  • Fügen Sie eine Ressourcenrichtlinie mit AllowHealthLakeInvocation Anweisung für den Datenspeicher-ARN hinzu

Der Autorisierer sollte über die folgende Erklärung zur Ressourcenrichtlinie verfügen:

{ "Sid": "health-imaging", "Effect": "Allow", "Principal": { "Service": "medical-imaging.region.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:region:123456789012:function:LambdaAuthorizerName" }

Für die IAM-Rolle, die das Auth-Lambda zurückgegeben hat, muss sie über die folgende Vertrauensstellungsrichtlinie verfügen:

{ "Effect": "Allow", "Principal": { "Service": "medical-imaging.region.amazonaws.com" }, "Action": "sts:AssumeRole" }

Konfiguration der Parallelität

  • Richten Sie die bereitgestellte Parallelität für SLO mit ≤ 1 Sekunde ein

  • Implementieren Sie bei Bedarf Maßnahmen zur Vermeidung von Kaltstarts

Lambda Authorizer-Vorlage

import jwt from 'jsonwebtoken'; import jwksClient from 'jwks-rsa'; const CACHE_TTL = 10 * 60 * 1000; const client = jwksClient({ jwksUri: '{Jwks Url}', cache: true, cacheMaxEntries: 5, cacheMaxAge: 600000, rateLimit: true, jwksRequestsPerMinute: 10 }); export const handler = async (event) => { try { console.log(event); const token = event.bearerToken; const decoded = jwt.decode(token, { complete: true }); if (!decoded || !decoded.header.kid) { console.log('Invalid token structure'); return generatePolicy(null, false); } const key = await client.getSigningKey(decoded.header.kid); const signingKey = key.getPublicKey(); const payload = jwt.verify(token, signingKey, { issuer: '{issuer to be verified}', algorithms: ['RS256'], // Additional verification parameters as needed }); return generatePolicy(payload.sub, true); } catch (error) { console.error('Authorization error:', error); return generatePolicy(null, false); } }; function generatePolicy(user, isValid) { return { isTokenValid: isValid, roleArn: user ? `arn:aws:iam::123456789012:role/${user}` : "" }; }

Endgültige Validierung von HealthImaging

Nach dem Empfang AuthResult HealthImaging:

  1. Überprüft alle Token-Ansprüche (nbf, exp, iat)

  2. Überprüft das ARN-Format der Rolle

  3. Nimmt die Rolle an

  4. Signiert die ursprüngliche Anfrage im Namen des Benutzers mit SigV4

  5. Verarbeitet die Anfrage DICOMweb

Ausnahmen

Bedingung AHI-Antwort
Lambda Authorizer existiert nicht oder ist ungültig 424: Fehlkonfiguration des Authorizers
Der Authorizer wurde aufgrund eines Ausführungsfehlers beendet 424 Authorizer ist fehlgeschlagen
Irgendein anderer Authorizer-Fehler, der nicht zugeordnet wurde 424 Authorizer ist fehlgeschlagen
Der Autorisierer hat eine ungültige/falsch formulierte Antwort zurückgegeben 424 Fehlkonfiguration des Authorizers
Der Authorizer lief mehr als 1 Sekunde 408 Authorizer-Timeout
Das Token ist abgelaufen oder anderweitig ungültig 403 Ungültiges oder abgelaufenes Token
AHI kann die zurückgegebene IAM-Rolle aufgrund einer Fehlkonfiguration des Autorisierers nicht zusammenführen 4.2.4 Fehlkonfiguration des Autorisierers
Der Authorizer hat eine leere Rolle zurückgegeben 403 Zugriff verweigert
Die zurückgegebene Rolle ist nicht aufrufbar (Assume-Rolle/Trust-Fehlkonfiguration) 424 Fehlkonfiguration des Autorisierers
Die Anforderungsrate überschreitet die Gateway-Grenzen DICOMweb 429 Zu viele Anfragen
Regionsübergreifender Datenspeicher, Rückgabefunktion oder Autorisierer Account/Cross 4.2.4 Regionsübergreifender Zugriff durch den Autorisierer Account/Cross