Tips: NVD API Key の取得手順

Tips: NVD API Key の取得手順 Tips
この記事は約5分で読めます。

これが役に立つ背景

NVD(National Vulnerability Database)は NIST(米国立標準技術研究所)が運営する CVE 脆弱性情報の公式データベースです。CVE 番号から「説明・CVSS スコア・影響を受けるバージョン・修正バージョン・参照 URL」までを構造化された JSON で取得できる REST API が公開されています。

未認証でも API は使えますが、rate limit が 5 リクエスト/30 秒と厳しく、検出された CVE を一括で照会したり、CI/CD パイプラインに組み込む用途では詰まります。無料の API key を取得するだけで、上限が 50 リクエスト/30 秒(10 倍)に緩和されます。

役立つシーン:

  • 情シス・セキュリティ担当: 自社環境で検出された脆弱性一覧を NVD に問い合わせ、CVSS スコア順にソートして優先度判断に使う
  • SBOM 運用: ソフトウェア部品表を NVD と自動突合し、影響を受けるパッケージのパッチ計画を立てる
  • ブログ・記事執筆: 引用した CVE が実在するか、CVSS スコアが正確かを自動検証(当ブログでも記事レビュー工程で活用しています)
  • AI エージェント連携: LLM 駆動のセキュリティアシスタントが、二次メディアではなく一次データから脆弱性情報を取得

手順

所要時間は約 5 分です。

1. 申請フォームを開く: NVD API Key 申請ページ にアクセスします。

2. 必要事項を入力して Submit: 個人利用であれば Organization Type は「Personal Use / Not Listed」で問題ありません。Terms of Use を末尾までスクロールして同意チェックを入れます。

NVD API Key 申請フォーム
NVD API Key 申請フォーム。Organization Type は個人なら「Personal Use / Not Listed」。

3. 確認メールを受信: 数分以内に nvd-noreply@nist.gov から「Request for NVD API Key」というメールが届きます。本文には認証用の URL と UUID(一回限りの認証コード)が含まれています。

NVD から届く確認メール(差出人は <code>nvd-noreply@nist.gov</code>)” class=”wp-image-535″/><figcaption>NVD から届く確認メール(差出人は <code>nvd-noreply@nist.gov</code>)。</figcaption></figure>
<p><strong>4. 認証ページで Email + UUID を入力</strong>: メール内の URL(<code>https://nvd.nist.gov/developers/confirm-api-key</code>)を開き、申請時のメールアドレスと UUID を入力して Confirm をクリックします。</p>
<figure class=認証ページ
認証ページ。メールアドレスと UUID を入力して Confirm。

5. キー生成中の画面で待機: 30〜60 秒ほどで生成・検証が完了します。この画面はキー生成完了まで閉じないでください。

キー生成中
キー生成中。30〜60 秒で完了するまで画面を閉じない。

6. API Key を取得: 「Validation complete.」と表示されると、その下に発行された API Key(UUID 形式の文字列)が表示されます。これをコピーして安全に保管します。

発行完了画面
発行完了画面。API Key の文字列をコピーして安全に保管する(画像はマスク済)。

サンプル

取得した API key を .env に保存してから利用するのがおすすめです。

NVD_API_KEY=028ef843-XXXX-XXXX-XXXX-XXXXXXXXXXXX

curl で 1 件取得:

curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-33626" \
  -H "apiKey: $NVD_API_KEY" \
  | jq '.vulnerabilities[0].cve.descriptions[0].value'

Python で取得:

import os
import requests
from dotenv import load_dotenv

load_dotenv()

r = requests.get(
    "https://services.nvd.nist.gov/rest/json/cves/2.0",
    params={"cveId": "CVE-2026-33626"},
    headers={"apiKey": os.environ["NVD_API_KEY"]},
    timeout=30,
)
cve = r.json()["vulnerabilities"][0]["cve"]
print(cve["id"], cve["descriptions"][0]["value"][:200])

応答 JSON には CVSS スコア、影響を受ける CPE(製品識別子)、修正バージョン、参照 URL などが構造化された形で含まれます。具体的なフィールドは CVE API ドキュメント を参照してください。

注意事項

  • API key は秘密情報: GitHub などの公開リポジトリにコミットしないでください。.env に保存し、.gitignore で除外するのが基本です
  • 新キー発行で旧キーは無効化: キーを紛失した場合は再申請できますが、新キー発行と同時に古いキーは deactivate されます。CI/CD 等に埋め込んでいる場合は同時に差し替えが必要です
  • アクティベーション期限: 申請から 7 日以内に認証を完了しないと無効化され、再申請が必要になります
  • rate limit を超えた場合: 50 リクエスト/30 秒を超えると HTTP 429 や 403 が返ります。一括処理する場合は time.sleep(0.6) 程度を挟むか、ジッター付きの retry を実装します
  • 商用利用: NVD のデータを自社製品やサービスに再配布する場合は Terms of Use を確認してください。研究・社内運用目的での利用は基本的に問題ありません

関連/参考リンク

コメント

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