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

Il flusso di autenticazione prevede i seguenti passaggi:
Richiesta HTTP con token Bearer verso l'endpoint DICOMweb
AWS HealthImaging verifica la scadenza dei token
Inoltra la richiesta all'autorizzatore Lambda
Lambda convalida il token con Identity Provider (IdP)
Lambda restituisce il ruolo IAM
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 UTCnbf
— Deve essere antecedente all'ora corrente in UTCiat
— 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
Autenticazione utente: indirizza l'utente all'endpoint di autorizzazione dell'IdP
Acquisizione di token: codice di autorizzazione di scambio per ID e token di accesso (JWT)
Chiamata API: includi il token di accesso nell'intestazione HTTP Authorization Bearer
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.comConfigurare 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
Verifica tutte le affermazioni relative ai token (nbf, exp, iat)
Convalida il formato Role ARN
Assume il ruolo
Firma la richiesta originale con SigV4 per conto dell'utente
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 |