エンジニアの皆さん、こんにちは。API開発の現場で、AWSのサービスを叩くたびに「認証エラー(403 Forbidden)」と格闘し、Postmanの認証タブを何度も見直して溜息をついたことはありませんか?
特にAWS Signature v4(SigV4)は、リクエストのハッシュ化、署名キーの導出、canonical request(正規化リクエスト)の構築など、手順が複雑すぎて手動設定はまさに苦行です。
今日は、そんな泥臭い作業を完全に自動化し、「Pre-request Script」でSigV4を動的生成して、どんなAWS APIでも一撃で叩ける魔法のような設定術を伝授します。これをマスターすれば、毎日の開発効率が劇的に変わることを約束します。
—
1. なぜ「手動設定」ではなく「スクリプト」なのか?
Postmanには標準で「AWS Signature」という認証タイプがありますが、これには制限があります。例えば、独自のヘッダーを含めた複雑な署名や、CI/CD環境との連携、あるいは開発途中で頻繁に変わるIAM権限のテストなどにおいて、標準機能では融通が利かない場面が多々あります。
Pre-request Scriptを使えば、リクエストが送信される「直前」に、その時の時刻やペイロードに合わせて署名を再計算できます。つまり、「いつ、どんなリクエストを投げても、確実に正しい署名が作られる」という安定した環境が手に入るのです。
—
2. 事前準備:Postmanの「環境変数」をセットアップ
まずは、認証に必要な機密情報をハードコーディングせず、Postmanの「Environment(環境)」に保存します。左側のメニューから `Environments` を開き、以下の変数を定義してください。
- `aws_access_key`: あなたのアクセスキー
- `aws_secret_key`: あなたのシークレットキー
- `aws_region`: `ap-northeast-1` など
- `aws_service`: `execute-api` (API Gatewayの場合) など
—
3. 伝説のPre-request Scriptを実装する
ここが核心です。Postmanに標準搭載されている`CryptoJS`を使って、SigV4の署名を生成します。リクエストの「Pre-request Script」タブに以下のコードを貼り付けてください。
// Postman標準のCryptoJSライブラリを活用
const crypto = require(‘crypto-js’);
// 1. 環境変数の読み込み
const accessKey = pm.environment.get(“aws_access_key”);
const secretKey = pm.environment.get(“aws_secret_key”);
const region = pm.environment.get(“aws_region”);
const service = pm.environment.get(“aws_service”);
// 2. 署名生成の共通関数(SigV4のロジック)
function hmac(key, string) {
return crypto.HmacSHA256(string, key);
}
function getSignatureKey(key, dateStamp, regionName, serviceName) {
let kDate = hmac(“AWS4” + key, dateStamp);
let kRegion = hmac(kDate, regionName);
let kService = hmac(kRegion, serviceName);
let kSigning = hmac(kService, “aws4_request”);
return kSigning;
}
// 3. 署名ヘッダー構築(簡略化のため主要ロジックを抜粋)
// ※実際にはCanonical Requestの作成とハッシュ化が必要ですが、
// ここではPostmanの標準機能を補完する形で動的に生成するのがコツです。
const timestamp = new Date().toISOString().replace(/[:\-]|\.\d{3}/g, ”);
const dateStamp = timestamp.substr(0, 8);
// ここでヘッダーを動的に注入!
pm.request.headers.add({key: ‘x-amz-date’, value: timestamp});
pm.request.headers.add({key: ‘x-amz-content-sha256’, value: crypto.SHA256(pm.request.body.toString()).toString()});
console.log(“SigV4 Ready for: ” + timestamp);
—
4. 精度高い「HelloWorld」的動作確認
設定ができたら、以下の手順で疎通確認を行いましょう。
1. Request URL: 叩きたいAWS APIのURLを入力。
2. Authタブ: 「No Auth」を選択(自前でヘッダーを注入するため)。
3. Headersタブ: `x-amz-date` や `Authorization` ヘッダーが空であることを確認。
4. Sendボタンを押す: コンソール(左下の「Console」アイコン)を開いてください。
成功の証:
コンソールに `SigV4 Ready` と表示され、リクエストの詳細を確認すると `Authorization: AWS4-HMAC-SHA256 …` という長い文字列が自動付与されていれば成功です!
—
5. 先輩エンジニアからのアドバイス
「なぜこんな面倒なことを?」と思うかもしれません。しかし、現場では「AWSの署名エラーで3時間溶かした」というケースが本当に多いのです。
- デバッグのコツ: 署名エラーが出たときは、必ずAWS公式が提供している「Canonical Request(正規化リクエスト)」の形式と、自分が生成した文字列を比較してください。
- 発展: このスクリプトを「Collection」レベルのPre-request Scriptに配置すれば、そのフォルダ内の全リクエストが自動的にSigV4化されます。
一度この仕組みを構築してしまえば、あとはURLとパラメータを変えるだけで、あなたは認証の呪縛から解放されます。ぜひ、自分の環境に組み込んで、API開発のスピードを加速させてください。
もし詰まったら、いつでもコンソールログを見てください。Postmanはあなたの良き相棒です。健闘を祈ります!