Wenn IAM-Authentifizierung auf API Gateway aktiviert ist, müssen Anfragen signiert werden.
Hier ist eine TypeScript-Implementierung, um solche Anfragen aus einer lokalen Umgebung zu senden.
Umgebung
- Ausführung aus einer lokalen Umgebung
- Läuft mit Node.js (oder Bun)
Implementierung
Verwenden Sie SignatureV4 aus dem AWS SDK für JavaScript, um die Anfrage zu signieren.
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, },});Wichtige Punkte
- Mit
fromInidie Zugangsdaten aus einem AWS-Profil laden - Mit
HttpRequestdas Anfrageobjekt erzeugen - Mit
SignatureV4die Anfrage signieren - Mit
fetchdie Anfrage inklusive signierter Header senden
Zusammenfassung
Mit SignatureV4 aus dem AWS SDK für JavaScript lassen sich Anfragen an ein IAM-geschütztes API Gateway aus einer lokalen Umgebung unkompliziert senden.
Da die Zugangsdaten aus dem AWS-Profil gelesen werden, müssen sie nicht im Code hinterlegt werden.
hsb.horse