logo hsb.horse
← Voltar para o índice do blog

Blog

Implementação em TypeScript para chamar um API Gateway protegido por IAM

Passo a passo para enviar, a partir do ambiente local, uma requisição em TypeScript para um API Gateway com autenticação IAM usando SigV4 do AWS SDK para JavaScript.

Publicado:

Quando a autenticação IAM está ativada no API Gateway, a requisição precisa ser assinada.

Aqui está uma implementação em TypeScript para enviar requisições com IAM a partir do ambiente local.

Ambiente

  • Execução a partir do ambiente local
  • Funciona com Node.js (ou Bun)

Implementação

Use SignatureV4 do AWS SDK para JavaScript para adicionar a assinatura à requisição.

import { fromIni } from "@aws-sdk/credential-providers";
import { SignatureV4 } from "@aws-sdk/signature-v4";
import { Sha256 } from "@aws-crypto/sha256-js";
import { HttpRequest } from "@aws-sdk/protocol-http";
const credentials = fromIni({ profile: "profile-name" });
const serviceName = "execute-api";
const options = {
url: "https://{id}.execute-api.ap-northeast-1.amazonaws.com/",
headers: {} as Record<string, string>,
};
const url = new URL(options.url);
const host = url.hostname;
const path = url.pathname;
const req = new HttpRequest({
headers: {
Host: host,
},
hostname: host,
method: "GET",
path: path,
});
const signer = new SignatureV4({
credentials,
region: "ap-northeast-1",
service: serviceName,
sha256: Sha256,
});
const signed = await signer.sign(req);
const response = await fetch(options.url, {
headers: {
...signed.headers,
Host: host,
},
});

Pontos principais

  1. Carregue as credenciais de um perfil AWS com fromIni
  2. Monte o objeto de requisição com HttpRequest
  3. Assine a requisição com SignatureV4
  4. Envie a requisição com fetch incluindo os cabeçalhos assinados

Resumo

Com SignatureV4 do AWS SDK para JavaScript, fica fácil chamar um API Gateway protegido por IAM a partir do ambiente local.

Como as credenciais são carregadas do perfil AWS, não é necessário embuti-las no código.