【入門編】PostmanでAWS Secrets ManagerやHashiCorp Vaultと連携し、機密情報を安全に動的ロードする高度な設定術 – データベース・API管理活用バイブル

APIキーを「隠す」技術:Postmanでシークレットを動的ロードする極意

API開発をしていると、誰もが一度は通る道があります。それは「認証情報をどこに置くか問題」です。

環境変数に直書きしてGitにプッシュしてしまい、冷や汗をかいた経験はありませんか?あるいは、PCを買い替えるたびに何十ものシークレットを再設定していませんか?

今日は、そんな泥臭い運用から卒業し、AWS Secrets ManagerやHashiCorp Vaultから、APIリクエストの直前にシークレットを自動取得して注入する「大人のAPI管理術」を伝授します。これをマスターすれば、あなたの開発環境は鉄壁の要塞に生まれ変わります。

—

なぜ「ハードコード」は悪なのか?

結論から言えば、Postman内にシークレットを保存するのは「暗号化されていないメモ帳」にパスワードを書くのと同じです。

  • 共有の危険: チームメンバーとコレクションを共有した際、意図せず機密情報まで渡してしまう。
  • 有効期限の問題: ローテーション(定期更新)のたびに各エンジニアが手動でPostmanの設定を書き換えるのは非効率。

「外部の専門ツール(Vault/AWS SM)に管理させ、Postmanは必要な時だけ鍵を借りる」。これがプロのアーキテクチャです。

—

ステップ1:Postmanの「Pre-request Script」という魔法

Postmanには、リクエストを送る直前にコードを実行できる「Pre-request Script」という機能があります。ここに「シークレットを取得して変数にセットする」処理を記述します。

AWS Secrets Managerを例にした実装

まず、AWS SDK (JavaScript) を利用してシークレットを取得する流れを作ります。

// PostmanのPre-request Script欄に記述します
const sdk = require(‘aws-sdk’); // PostmanはNode.js環境をシミュレートできます

// 1. AWSの認証情報を設定(※IAMロールや一時的な認証情報を使用するのがベスト)
const secretsManager = new sdk.SecretsManager({
region: ‘ap-northeast-1’,
accessKeyId: pm.environment.get(“AWS_ACCESS_KEY”), // AWSの一時クレデンシャル
secretAccessKey: pm.environment.get(“AWS_SECRET_KEY”)
});

// 2. シークレットを取得
secretsManager.getSecretValue({ SecretId: ‘prod/api/my-service-key’ }, (err, data) => {
if (err) {
console.error(“シークレット取得失敗:”, err);
} else {
const secret = JSON.parse(data.SecretString);
// 3. 取得した値をPostmanの変数に格納(これでリクエスト内で利用可能)
pm.environment.set(“API_KEY”, secret.apiKey);
console.log(“シークレットを動的にロードしました!”);
}
});

—

ステップ2:APIリクエストで「借りた鍵」を使う

取得したシークレットは、`pm.environment.set` によってPostmanの環境変数に一時的にセットされました。あとは、ヘッダーに埋め込むだけです。

1. APIリクエストの「Headers」タブを開く。
2. `Authorization` キーの値に `{{API_KEY}}` と入力する。

これだけで、リクエストを送信するたびに、最新のシークレットが外部からフェッチされ、認証が完了します。あなたのPCのローカルストレージには、機密情報は一切残りません。

—

ステップ3:HashiCorp Vaultの場合(アーキテクトの推奨)

もしVaultを使っているなら、API経由でトークンを取得するシンプルな `pm.sendRequest` を使うのが最もスマートです。

// Vaultからシークレットを叩く例
pm.sendRequest({
url: ‘https://vault.example.com/v1/secret/data/my-app’,
method: ‘GET’,
header: {
‘X-Vault-Token’: pm.environment.get(“VAULT_TOKEN”)
}
}, function (err, res) {
const data = res.json().data.data;
pm.environment.set(“DYNAMIC_TOKEN”, data.token);
});

—

現場で震えるほど役立つ「運用の極意」

この仕組みを導入する際、以下の3点を意識してください。

  • スコープの最小化: 取得したシークレットは、可能であれば「Global変数」ではなく「Collection変数」にセットしてください。意図しない他のコレクションへの影響を防ぎます。
  • 永続化させない: `pm.environment.set` は便利ですが、Postmanを閉じても変数が残ります。機密情報はスクリプトの最後でクリアする処理を入れると、よりセキュアです。
  • IAMポリシーの絞り込み: AWSを使用する場合、Postman用に発行するIAMユーザーには `secretsmanager:GetSecretValue` 以外の権限を与えないこと。これが「最小権限の原則」です。

—

まとめ:あなたはもう、鍵の管理に追われない

最初は少し難しく感じるかもしれませんが、この仕組みを一度構築してしまえば、環境切り替えも、シークレットのローテーションも、すべて自動化されます。

「ツールに振り回されるエンジニア」から「ツールを支配するエンジニア」へ。
この小さな一歩が、あなたの開発スピードとセキュリティレベルを劇的に向上させるはずです。

もし途中で詰まったら、遠慮なく聞いてくださいね。現場の壁を突破するための知恵は、まだまだたくさんありますから。頑張ってください!

タイトルとURLをコピーしました