Saída de um autorizador do Lambda para o API Gateway - Amazon API Gateway

Saída de um autorizador do Lambda para o API Gateway

A saída da função de autorizador do Lambda é um objeto em forma de dicionário, que deve incluir o identificador principal (principalId) e um documento de política (policyDocument) que contém uma lista de instruções da política. A saída também pode incluir um mapa context contendo pares de chave/valor. Se a API usar um plano de uso (o apiKeySource é definido como AUTHORIZER), a função de autorizador do Lambda deve retornar uma das chaves de API do plano de uso como o valor de propriedade usageIdentifierKey.

Veja a seguir um exemplo dessa saída.

{   "principalId": "yyyyyyyy", // The principal user identification associated with the token sent by the client. "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow|Deny", "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]" } ] }, "context": { "stringKey": "value", "numberKey": "1", "booleanKey": "true" }, "usageIdentifierKey": "{api-key}" }

Aqui, uma declaração de política especifica se o serviço de execução do API Gateway deve ter permissão ou não (Effect) para invocar (Action) o método de API especificado (Resource). Você pode usar um caractere curinga (*) para especificar um tipo de recurso (método). Para obter informações sobre como configurar políticas válidas para chamar uma API, consulte Referência de instrução de políticas do IAM para executar a API no API Gateway.

Para o ARN de um método habilitado para autorização, por exemplo, arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]], o tamanho máximo é de 1600 bytes. Os valores de parâmetros de caminho, cujo tamanho é determinado em tempo de execução, podem fazer com que o comprimento do ARN exceda o limite. Quando isso acontecer, o cliente da API receberá uma resposta 414 Request URI too long.

Além disso, o Nome de recurso da Amazon (ARN) do recurso, como mostrado na saída da declaração de política pelo autorizador, atualmente está limitado a 512 caracteres. Por esse motivo, você não deve usar o URI com um token de JWT de um tamanho significativo em um URI de solicitação. Em vez disso, você pode passar o token de JWT com segurança em um cabeçalho de solicitação.

Você pode acessar o valor principalId em um modelo de mapeamento usando a variável $context.authorizer.principalId. Isso é útil quando você deseja passar o valor para o backend. Para ter mais informações, consulte Variáveis $context para modelos de dados, autorizadores, modelos de mapeamento e registro de acesso em logs do CloudWatch.

Você pode acessar o valor stringKey, numberKey ou booleanKey (por exemplo, "value", "1" ou "true") do mapa context em um modelo de mapeamento chamando $context.authorizer.stringKey, $context.authorizer.numberKey ou $context.authorizer.booleanKey, respectivamente. Todos os valores retornados são transformados em string. Observe que não é possível definir um objeto JSON ou matriz como um valor válido de qualquer chave no mapa context.

Você pode usar o mapa context para retornar credenciais em cache do autorizador para o back-end usando um modelo de mapeamento de solicitação de integração. Isso permite que o backend forneça uma experiência de usuário aprimorada usando as credenciais em cache para reduzir a necessidade de acessar as chaves secretas e abrir o tokens de autorização para cada solicitação.

Para a integração de proxy do Lambda, o API Gateway passa o objeto context de um autorizador do Lambda diretamente para a função back-end do Lambda como parte da entrada event. Você pode recuperar os pares de chave-valor context na função do Lambda chamando $event.requestContext.authorizer.key.

{api-key} significa uma chave de API no plano de uso do estágio da API. Para ter mais informações, consulte Usar planos e chaves de API para APIs REST no APIs Gateway .

Veja a seguir a saída de exemplo do autorizador do Lambda de exemplo. A saída de exemplo contém uma declaração de política para bloquear chamadas (Deny) para o método GET no estágio dev de uma API (ymy8tbxw7b) de uma conta da AWS (123456789012).

{ "principalId": "user", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Deny", "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/" } ] } }