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
- Charger les identifiants depuis un profil AWS avec
fromIni - Construire l’objet requête avec
HttpRequest - Signer la requête avec
SignatureV4 - Envoyer la requête avec
fetchen 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.
hsb.horse