Utilizzo degli autorizzatori AWS Lambda - AWS HealthImaging

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo degli autorizzatori AWS Lambda

Diagramma che mostra il flusso di lavoro OIDC Lambda in. HealthImaging

Il flusso di autenticazione prevede i seguenti passaggi:

  1. Richiesta HTTP con token Bearer verso l'endpoint DICOMweb

  2. AWS HealthImaging verifica la scadenza dei token

  3. Inoltra la richiesta all'autorizzatore Lambda

  4. Lambda convalida il token con Identity Provider (IdP)

  5. Lambda restituisce il ruolo IAM

  6. La valutazione delle politiche e l'autenticazione degli utenti sono state completate

Prerequisiti

1. Configurazione dell'autorizzatore Lambda

  • Crea un autorizzatore che accetti e restituisca AuthInput AuthResult

  • Convalide BearerToken (firma, scadenza, ambiti, emittente e regole aziendali)

  • Restituisce l'ARN del ruolo IAM con le autorizzazioni operative richieste DICOMweb

  • Deve rispondere in ≤ 1 secondo (configurare la concorrenza fornita)

Implementa l'estrazione dei token:

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

2. Configurazione del datastore

  • Abilita la funzionalità lambdaAuthorizerArn fornendola al momento della creazione

Nota

Al tuo account AWS vengono fatturate le chiamate Lambda e la loro durata. Per ulteriori informazioni, consulta Prezzi di AWS Lambda.

Dettagli del processo di autorizzazione

Regole di convalida dei token

HealthImaging valuta le seguenti attestazioni relative ai token:

  • exp— Deve essere successiva all'ora corrente in UTC

  • nbf— Deve essere antecedente all'ora corrente in UTC

  • iat— Deve essere antecedente all'ora corrente in UTC e NON prima di 12 ore prima (durata massima del token)

Schemi di eventi e risposte

AHI richiama la funzione con il seguente input e si aspetta il seguente output.

Input dell'autorizzatore

{ "datastoreId": "{datastore id}", "operation": "{Healthimaging API name e.g. GetDICOMInstance}", "bearerToken": "{access token}" }
Output dell'autorizzatore

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

Elaborazione della richiesta

Gestione iniziale della richiesta:

  • Se nessuna autorizzazione: Bearer header → la richiesta procede all'autenticazione SigV4

  • Se è presente il token Bearer:

    • Risolve i datastore LambdaAuthorizerArn

    • Richiama l'autorizzazione utilizzando Forward Access Sessions (FAS)

Processo di autorizzazione Lambda:

  • Riceve AuthInput con DataStoreID, operation e BearerToken

  • Deve completare la convalida entro 1 secondo

  • Restituisce AuthResult con lo stato di convalida e l'ARN del ruolo

Flusso di implementazione

Flusso di autenticazione lato client

  1. Autenticazione utente: indirizza l'utente all'endpoint di autorizzazione dell'IdP

  2. Acquisizione di token: codice di autorizzazione di scambio per ID e token di accesso (JWT)

  3. Chiamata API: includi il token di accesso nell'intestazione HTTP Authorization Bearer

  4. Validazione del token: processo di convalida completo da parte di un autorizzatore HealthImaging Lambda

Fasi di configurazione

Implementazione di Lambda Authorizer

  • Interfaccia di implementazione AuthInput/AuthResult

  • Token di convalida (firma, scadenza, emittente, destinatario, ambiti)

  • Decisione di restituzione e IAM Role ARN

Configurazione IAM

  • Crea una politica con autorizzazioni DICOMweb operative minime

  • Crea un ruolo con una politica di fiducia per medical-imaging.region.amazonaws.com

  • Configurare le autorizzazioni di esecuzione Lambda

  • Aggiungi una politica delle risorse con AllowHealthLakeInvocation una dichiarazione per l'ARN del datastore

L'autorizzatore dovrebbe avere la seguente dichiarazione sulla politica delle risorse:

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

Per il ruolo IAM restituito da auth lambda, deve avere la seguente politica di relazione di fiducia:

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

Configurazione della concorrenza

  • Imposta la concorrenza assegnata per uno SLO di ≤ 1 secondo

  • Implementa misure di mitigazione con avvio a freddo, se necessario

Modello di autorizzazione Lambda

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}` : "" }; }

Validazione finale tramite HealthImaging

Dopo aver ricevuto AuthResult,: HealthImaging

  1. Verifica tutte le affermazioni relative ai token (nbf, exp, iat)

  2. Convalida il formato Role ARN

  3. Assume il ruolo

  4. Firma la richiesta originale con SigV4 per conto dell'utente

  5. Elabora la richiesta DICOMweb

Eccezioni

Condizione Risposta AHI
Lambda Authorizer non esiste o non è valido 424 Authorizer: configurazione errata
Autorizzatore terminato a causa di un errore di esecuzione Autorizzazione 424 non riuscita
Qualsiasi altro errore di autorizzazione non mappato Autorizzazione 424 non riuscita
L'autorizzatore ha restituito una risposta non valida/mal formata 424 Errore di configurazione dell'autorizzatore
Authorizer ha funzionato per più di 1 secondo 408 Authorizer Timeout
Il token è scaduto o comunque non valido 403 Token non valido o scaduto
AHI non può federare il ruolo IAM restituito a causa di un'errata configurazione dell'autorizzatore 424 Errore di configurazione dell'autorizzatore
L'autorizzatore ha restituito un ruolo vuoto 403 Accesso negato
Il ruolo restituito non è richiamabile (assume-role/trust misconfig) 424 Autorizzatore errato
La frequenza delle richieste supera i limiti del gateway DICOMweb 429 Troppe richieste
Datastore, Return Role o Authorizer Cross Region Account/Cross 424 Autorizzatore di accesso interregionale Account/Cross