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
- Carregue as credenciais de um perfil AWS com
fromIni - Monte o objeto de requisição com
HttpRequest - Assine a requisição com
SignatureV4 - Envie a requisição com
fetchincluindo 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.
hsb.horse