logo hsb.horse
← Retour au blog

Blog

Envoyer une requête TypeScript vers un API Gateway protégé par IAM

Implémentation TypeScript pour appeler depuis un environnement local un API Gateway protégé par IAM en utilisant SigV4 du SDK AWS pour JavaScript.

Publié:

Quand l’authentification IAM est activée sur API Gateway, les requêtes doivent être signées.

Voici une implémentation TypeScript pour envoyer des requêtes IAM depuis un environnement local.

Environnement

  • Exécution depuis un environnement local
  • Fonctionne avec Node.js (ou Bun)

Implémentation

Utiliser SignatureV4 du SDK AWS pour JavaScript afin d’ajouter une signature à la requête.

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,
},
});

Points clés

  1. Charger les identifiants depuis un profil AWS avec fromIni
  2. Construire l’objet requête avec HttpRequest
  3. Signer la requête avec SignatureV4
  4. Envoyer la requête avec fetch en incluant les en-têtes signés

Résumé

Avec SignatureV4 du SDK AWS pour JavaScript, il est simple d’appeler un API Gateway protégé par IAM depuis un environnement local.

Comme les identifiants viennent du profil AWS, il n’est pas nécessaire de les embarquer en dur dans le code.