Usando autorizadores do AWS Lambda - AWS HealthImaging

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando autorizadores do AWS Lambda

Diagrama mostrando o fluxo de trabalho do OIDC Lambda em. HealthImaging

O fluxo de autenticação consiste nas seguintes etapas:

  1. Solicitação HTTP com token de portador para endpoint DICOMweb

  2. AWS HealthImaging verifica a expiração do token

  3. Encaminhar solicitação para o autorizador Lambda

  4. O Lambda valida o token com o provedor de identidade (IdP)

  5. Lambda retorna a função IAM

  6. Avaliação da política e autenticação do usuário concluídas

Pré-requisitos

1. Configuração do Lambda Authorizer

  • Crie um autorizador que aceite AuthInput e devolva AuthResult

  • Valida BearerToken (assinatura, expiração, escopos, emissor e regras de negócios)

  • Retorna o ARN da função do IAM com as permissões de operação necessárias DICOMweb

  • Deve responder em ≤ 1 segundo (configurar a simultaneidade provisionada)

Implemente a extração de tokens:

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

2. Configuração do Datastore

  • Ative o recurso fornecendo lambdaAuthorizerArn no momento da criação

nota

Sua conta da AWS é cobrada pelas invocações e pela duração do Lambda. Para obter mais informações, consulte Definição de preço do AWS Lambda.

Detalhes do processo de autorização

Regras de validação de token

HealthImaging avalia as seguintes reivindicações de token:

  • exp— Deve ser posterior à hora atual em UTC

  • nbf— Deve ser antes da hora atual em UTC

  • iat— Deve ser antes da hora atual em UTC e NÃO antes de 12 horas antes (vida útil máxima do token)

Esquemas de eventos e respostas

O AHI invoca sua função com a seguinte entrada e espera a seguinte saída.

Entrada do autorizador

{ "datastoreId": "{datastore id}", "operation": "{Healthimaging API name e.g. GetDICOMInstance}", "bearerToken": "{access token}" }
Saída do autorizador

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

Processamento de solicitações

Tratamento inicial da solicitação:

  • Se não houver autorização: cabeçalho do portador → a solicitação prossegue para a autenticação SigV4

  • Se o token do portador estiver presente:

    • Resolve o armazenamento de dados LambdaAuthorizerArn

    • Invoca o autorizador usando sessões de acesso direto (FAS)

Processo de autorização Lambda:

  • Recebe AuthInput com DatastoreID, operação e BearerToken

  • A validação deve ser concluída em 1 segundo

  • Devoluções AuthResult com status de validação e ARN da função

Fluxo de implementação

Fluxo de autenticação no lado do cliente

  1. Autenticação do usuário: direcione o usuário para o endpoint de autorização do IdP

  2. Aquisição de token: código de autorização de troca por tokens de ID e acesso (JWT)

  3. Chamada de API: incluir token de acesso no cabeçalho HTTP Authorization Bearer

  4. Validação de token: processo de validação completo por um HealthImaging autorizador Lambda

Etapas de configuração

Implementação do Lambda Authorizer

  • Implementar AuthInput/AuthResult interface

  • Valide o token (assinatura, expiração, emissor, público, escopos)

  • Decisão de devolução e ARN da função do IAM

Configuração do IAM

  • Crie uma política com permissões mínimas de DICOMweb operação

  • Crie uma função com política de confiança para medical-imaging.region.amazonaws.com

  • Configurar permissões de execução do Lambda

  • Adicionar política de recursos com AllowHealthLakeInvocation declaração para o ARN do armazenamento de dados

O autorizador deve ter a seguinte declaração 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 a função do IAM retornada pelo auth lambda, ela deve ter a seguinte política de relação de confiança:

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

Configuração de concorrência

  • Configure a simultaneidade provisionada para ≤ 1 segundo de SLO

  • Implemente mitigações de partida a frio, se necessário

Modelo de autorização 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}` : "" }; }

Validação final por HealthImaging

Depois de receber AuthResult, HealthImaging:

  1. Verifica todas as declarações de token (nbf, exp, iat)

  2. Valida o formato ARN da função

  3. Assume o papel

  4. Assina a solicitação original com o SigV4 em nome do usuário

  5. Processa a DICOMweb solicitação

Exceções

Condição Resposta AHI
O Lambda Authorizer não existe ou é inválido 424 Configuração incorreta do autorizador
Autorizador encerrado devido a falha na execução 424 Falha no autorizador
Qualquer outro erro não mapeado do autorizador 424 Falha no autorizador
O autorizador retornou uma resposta inválida/mal formada 424 Configuração incorreta do autorizador
O autorizador foi executado por mais de 1s Tempo limite do autorizador 408
O token está expirado ou é inválido 403 Token inválido ou expirado
O AHI não pode federar a função IAM retornada devido à configuração incorreta do autorizador 424 Configuração incorreta do autorizador
O autorizador retornou uma função vazia 403 Acesso negado
A função retornada não pode ser chamada (configuração incorreta de assume-role/trust) 424 Configuração incorreta do autorizador
A taxa de solicitação excede os limites do DICOMweb gateway 4.29 Solicitações demais
Armazenamento de dados, função de retorno ou autorizador entre regiões Account/Cross 424 Autorizador: Acesso entre regiões Account/Cross