Uso de autorizadores de AWS Lambda - AWS HealthImaging

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de autorizadores de AWS Lambda

Diagrama que muestra el flujo de trabajo Lambda de OIDC en. HealthImaging

El flujo de autenticación consta de los siguientes pasos:

  1. Solicitud HTTP con un token de portador al punto final DICOMweb

  2. AWS HealthImaging comprueba la caducidad del token

  3. Reenviar la solicitud al autorizador de Lambda

  4. Lambda valida el token con el proveedor de identidad (IdP)

  5. Lambda devuelve la función de IAM

  6. Se han completado la evaluación de la política y la autenticación del usuario

Requisitos previos

1. Configuración del autorizador Lambda

  • Cree un autorizador que acepte y devuelva AuthInput AuthResult

  • Valida BearerToken (firma, caducidad, alcances, emisor y reglas comerciales)

  • Devuelve el ARN del rol de IAM con DICOMweb los permisos de operación necesarios

  • Debe responder en ≤ 1 segundo (configurar la simultaneidad aprovisionada)

Implemente la extracción de tokens:

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

2. Configuración del almacén de datos

  • Habilite la función lambdaAuthorizerArn proporcionándola en el momento de la creación

nota

A su cuenta de AWS se le facturan las invocaciones a Lambda y su duración. Para obtener más información, consulte los precios de AWS Lambda.

Detalles del proceso de autorización

Reglas de validación de tokens

HealthImaging evalúa las siguientes afirmaciones sobre los tokens:

  • exp— Debe ser posterior a la hora actual en UTC

  • nbf— Debe ser anterior a la hora actual en UTC

  • iat— Debe ser anterior a la hora actual en UTC y NO antes de 12 horas antes (duración máxima del token)

Esquemas de eventos y respuestas

AHI invoca su función con la siguiente entrada y espera la siguiente salida.

Entrada del autorizador

{ "datastoreId": "{datastore id}", "operation": "{Healthimaging API name e.g. GetDICOMInstance}", "bearerToken": "{access token}" }
Salida del autorizador

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

Procesamiento de solicitudes

Gestión inicial de la solicitud:

  • Si no hay autorización: encabezado del portador → la solicitud pasa a la autenticación SigV4

  • Si el token Bearer está presente:

    • Resuelve los almacenes de datos LambdaAuthorizerArn

    • Invoca al autorizador mediante sesiones de acceso directo (FAS)

Proceso de autorización de Lambda:

  • Recibe AuthInput con DataStoreID, operation y bearerToken

  • Debe completar la validación en 1 segundo

  • Regresa AuthResult con el estado de validación y el ARN del rol

Flujo de implementación

Flujo de autenticación en el lado del cliente

  1. Autenticación del usuario: dirija al usuario al punto final de autorización del IdP

  2. Adquisición de tokens: intercambie el código de autorización por los tokens de identificación y acceso (JWT)

  3. Llamada a la API: incluya el token de acceso en el encabezado del portador de autorización HTTP

  4. Validación de token: proceso de validación completo realizado por un HealthImaging autorizador de Lambda

Pasos de configuración

Implementación de Lambda Authorizer

  • Implemente la interfaz AuthInput/AuthResult

  • Valide el token (firma, caducidad, emisor, audiencia, ámbitos)

  • Decisión de devolución y ARN del rol de IAM

Configuración de IAM

  • Cree una política con permisos de DICOMweb operación mínimos

  • Cree un rol con una política de confianza para medical-imaging.region.amazonaws.com

  • Configurar los permisos de ejecución de Lambda

  • Agregue una política de recursos con una AllowHealthLakeInvocation declaración para el ARN del almacén de datos

El autorizador debe tener la siguiente declaración de política de recursos:

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

Para el rol de IAM que devolvió la lambda de autenticación, debe tener la siguiente política de relación de confianza:

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

Configuración de simultaneidad

  • Configure la simultaneidad aprovisionada para un SLO de ≤ 1 segundo

  • Implemente mitigaciones de arranque en frío si es necesario

Plantilla Lambda Authorizer

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

Validación final realizada por HealthImaging

Después de recibir AuthResult, HealthImaging:

  1. Verifica todas las afirmaciones sobre los tokens (nbf, exp, iat)

  2. Valida el formato ARN del rol

  3. Asume el rol

  4. Firma la solicitud original con SiGv4 en nombre del usuario

  5. Procesa la solicitud DICOMweb

Excepciones

Condición Respuesta AHI
El autorizador Lambda no existe o no es válido 424 Authorizer está mal configurado
El autorizador se canceló debido a un error de ejecución 424 Falló el autorizador
¿Algún otro error de autorizador no mapeado Error en el autorizador 424
El autorizador devolvió una respuesta inválida o mal formada 424 Configuración errónea del autorizador
Authorizer ejecutó más de 1 segundo Tiempo de espera del autorizador 408
El token ha caducado o no es válido 403 El token no es válido o ha caducado
AHI no puede federar el rol de IAM devuelto debido a una mala configuración del autorizador 424 Configuración errónea del autorizador
El autorizador devolvió un rol vacío 403 Acceso denegado
El rol devuelto no es invocable (error de configuración de assume-role/trust) 424 Configuración errónea del autorizador
La tasa de solicitudes supera DICOMweb los límites de Gateway 429 Demasiadas solicitudes
Almacén de datos, rol de devolución o autorizador entre regiones Account/Cross 424 Autoriza el acceso entre regiones Account/Cross