DEV Community

Cover image for APIドキュメントのセキュリティ: Gitで仕様は安全か?
Akira
Akira

Posted on • Originally published at apidog.com

APIドキュメントのセキュリティ: Gitで仕様は安全か?

APIドキュメントのセキュリティは、API本体ほど監査されません。認証、レート制限、セキュリティテストは整備していても、OpenAPI仕様、Swagger UI、認証フローを説明するMarkdownは、古いGitリポジトリや静的ホストに置かれたままになりがちです。2026年5月20日、GitHubは、悪意あるVS Code拡張機能を経由して約3,800の内部コードリポジトリからデータが盗まれたことを確認しました。このインシデントをきっかけに、自分のAPIドキュメントについて確認すべきです。もし誰かが公開APIドキュメントを密かに変更できた場合、あなたやAPI利用者はそれに気づけるでしょうか。

今すぐApidogを試す

TL;DR

セキュアなAPIドキュメントには、少なくとも次の4つが必要です。

  • アクセス制御: 誰が読めるかを制御できる
  • バージョン管理: APIバージョンごとのドキュメントを維持できる
  • 整合性: 公開ドキュメントが正しいAPI定義と一致している
  • 監査証跡: 誰が、いつ、何を変更したか追跡できる

GitベースのDocs-as-codeは有効です。レビュー、履歴、CIを活用できます。ただし、リポジトリが公開されている、ドキュメントがライブAPIから乖離している、または改ざんされたサンプルが検出されずに利用者へ届く場合、それはリスクになります。

Apidogのようなマネージドドキュメントレイヤーを使うと、パスワード保護、IP許可リスト、メール許可リスト、カスタムドメイン、バージョン管理、API設計と同期された仕様をドキュメント公開フローに組み込めます。

GitHubの侵害がAPIドキュメント監査のきっかけになる理由

GitHubのインシデントでは、脅威グループTeamPCPがGitHubの内部リポジトリを流出させ、そのデータセットをアンダーグラウンドフォーラムで販売していると報じられています。BleepingComputerの報道によると、侵入経路は公式マーケットプレイスから提供された悪意あるVS Code拡張機能でした。GitHubは、内部リポジトリ以外の顧客データへの影響を示す証拠は見つかっていないと述べています。

この話から学ぶべきことは、「GitHubを使うな」ではありません。確認すべきなのは次の点です。

  • APIドキュメントはどこで管理されているか
  • 誰が書き込み権限を持つか
  • 公開済みドキュメントを誰が読めるか
  • 公開された内容がレビュー済みソースと一致するか
  • API仕様がライブAPIと同期しているか

APIドキュメントは単なる説明ではありません。利用者はエンドポイントURL、リクエスト形式、認証ヘッダー、サンプルコードをそのまま実装にコピーします。攻撃者がそれらを変更できれば、マーケティングページを改ざんしているのではなく、他人が本番環境で実行するコードの指示を書き換えていることになります。

同じ観点は、Vercel侵害から得られたAPIセキュリティの教訓でも扱っています。また、関連するテーマとして、GitHubの侵害が自己ホスト型APIツールに与える意味VS Code拡張機能のAPIキーセキュリティも参照してください。

APIドキュメントが侵害された場合に起こること

APIドキュメントは次の場所に存在します。

  • Gitリポジトリ
  • CI/CDパイプライン
  • 静的ホスト
  • ドキュメント生成ツール
  • OpenAPI仕様ファイル
  • 公開済みHTMLページ

このどれかが侵害されると、実装者に直接影響します。

1. 改ざんされたエンドポイントが本番コードに入る

攻撃者がドキュメントリポジトリまたはホストに書き込める場合、次のような変更が可能です。

  • https://api.payments.acme.com/v2/charge を攻撃者のドメインに変更する
  • OAuthトークン交換URLを別のURLに書き換える
  • サンプルのBearerトークンやAPIキーの扱いを変更する
  • SDK生成元のOpenAPI servers URLを書き換える

例:

paths:
  /v2/payment-intents:
    post:
      summary: Create a payment intent
      servers:
        - url: https://api.acme-pay.com
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentIntentRequest'
      responses:
        '201':
          description: Payment intent created
Enter fullscreen mode Exit fullscreen mode

ここで攻撃者が servers.url を変更した場合、OpenAPI仕様からクライアントを再生成する利用者は、意図せず攻撃者のドメインへリクエストを送る可能性があります。

差分は小さくても、影響は大きくなります。

- url: https://api.acme-pay.com
+ url: https://api-acme-pay.example-attacker.com
Enter fullscreen mode Exit fullscreen mode

レビューで「ただのドキュメント変更」として流すと、この種の変更は見逃されます。

2. 内部エンドポイントが流出する

ドキュメントリポジトリには、次のような情報が混ざりがちです。

  • 管理者向けAPI
  • デバッグ用エンドポイント
  • パートナー専用API
  • 未公開の新機能
  • 内部パラメータ
  • 本番環境の実URL
  • テスト用トークンやサンプル資格情報

公開リポジトリ、設定ミスした静的ホスト、または侵害されたプライベートリポジトリにこれらが含まれていると、攻撃者にAPIの地図を渡すことになります。

この観点で棚卸しする場合は、2026年APIセキュリティテストチェックリストのように、エンドポイント、認証、権限、データ露出をまとめて確認してください。

3. 公開GitHub Pagesにはアクセス制御がない

GitHub Pagesは便利な静的ホストです。ただし、アクセス制御はありません。

公開APIなら問題ありません。しかし、次のようなドキュメントには不十分です。

  • 有料顧客向けAPI
  • パートナー限定API
  • 社内API
  • ベータ機能
  • 契約者だけに見せる仕様

「URLを知っている人だけがアクセスできる」はアクセス制御ではありません。URLは次の経路で漏れます。

  • ブラウザ履歴
  • リファラーヘッダー
  • プロキシログ
  • 共有ブックマーク
  • チャットログ
  • スクリーンショット
  • サポートチケット

アクセス制御が必要なドキュメントをGitHub Pagesだけで配信する場合、別途ゲートを設計する必要があります。

4. 古いドキュメントと改ざんの区別がつかなくなる

攻撃者がいなくても、APIドキュメントは簡単に古くなります。

よくある原因:

  • API変更後にOpenAPI仕様を更新していない
  • 手動編集したMarkdownが実装と乖離している
  • v1/v2の仕様が混ざっている
  • 廃止済みエンドポイントが残っている
  • サンプルレスポンスが現在のスキーマと違う

問題は、ドキュメントが古いのか、改ざんされたのかを判断できなくなることです。

確認すべき問い:

  • このエンドポイントURLはいつ変更されたか
  • 誰が変更したか
  • 変更はレビューされたか
  • ライブAPIと仕様は一致しているか
  • 公開済みHTMLはレビュー済みソースから生成されたか

これに答えられない場合、ドキュメントは検証不能です。

GitでのDocs-as-codeが有効な場合

Docs-as-codeは有効な運用です。OpenAPI仕様とMarkdownをGitで管理し、CIでSwagger UIやRedocをビルドし、静的ホストへデプロイする構成にはメリットがあります。

メリット:

  • Pull Requestでレビューできる
  • Git履歴が残る
  • コードとドキュメントを同じフローで管理できる
  • CIでlintやスキーマ検証を実行できる
  • 変更差分を明確に確認できる

この方式が適している条件は次のとおりです。

  • APIが完全に公開されている
  • ドキュメントに隠すべき情報がない
  • リポジトリにブランチ保護がある
  • 変更には必須レビューがある
  • 書き込み権限を持つ人数が最小限
  • CIのデプロイ資格情報が最小権限
  • 外部GitHub ActionsやCIステップを固定バージョンで使っている
  • OpenAPI仕様がライブAPIから生成、またはライブAPIに対して検証されている
  • ドキュメント更新の責任者が明確

この条件を満たすなら、Gitベースのドキュメントは透明性が高く、レビュー可能な仕組みです。

GitでのDocs-as-codeが負債になる場合

同じ構成でも、次の状態ならリスクが高くなります。

  • パートナー限定ドキュメントを実質公開URLで配信している
  • 「リンクを知られなければ安全」と考えている
  • 書き込み権限を持つユーザーやCIトークンが多い
  • ドキュメント変更が十分にレビューされない
  • OpenAPI仕様を手動で編集している
  • ライブAPIとの同期確認がない
  • 内部APIと公開APIが同じ仕様ファイルに混在している
  • 公開済みサイトがどのコミットから生成されたか追跡できない
  • デプロイ後の改ざん検知がない

Gitは変更履歴を提供しますが、リポジトリ自体が流出した場合の機密性は提供しません。また、静的ホストに公開された内容がレビュー済みソースと一致しているかは、別途検証が必要です。

自己ホスト型ドキュメントの選択肢を比較したい場合は、自己ホスト型APIドキュメント比較を参照してください。

セキュアなAPIドキュメントのチェックリスト

「セキュアなAPIドキュメント」を実装レベルに分解すると、次の4つです。

1. アクセス制御

確認すること:

  • 誰がドキュメントを読めるか説明できるか
  • 退職者や契約終了したパートナーのアクセスをすぐ取り消せるか
  • 公開、顧客限定、社内限定を分離しているか
  • URLの不明瞭さに依存していないか

実装例:

  • パスワード保護
  • IP許可リスト
  • メール許可リスト
  • SSO
  • カスタム認証
  • VPN経由のアクセス制限

2. バージョン管理

確認すること:

  • v1利用者がv1ドキュメントを見られるか
  • v2公開後も古いドキュメントが消えないか
  • 特定の日付のドキュメント内容を再現できるか
  • 破壊的変更が明示されているか

実装例:

/docs/v1
/docs/v2
/docs/beta
Enter fullscreen mode Exit fullscreen mode

または、ドキュメントツール側で複数バージョンを並行公開します。

3. 整合性

確認すること:

  • 公開ドキュメントは信頼できるAPI定義から生成されているか
  • OpenAPI仕様はライブAPIと一致しているか
  • 手動編集されたMarkdownが仕様と矛盾していないか
  • 公開後にファイルが直接書き換えられていないか

CIで最低限入れたい検証:

# 例: OpenAPI仕様のlint
name: Validate OpenAPI

on:
  pull_request:
    paths:
      - "openapi.yaml"

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lint OpenAPI
        run: npx @redocly/cli lint openapi.yaml
Enter fullscreen mode Exit fullscreen mode

加えて、servers.url や認証URLの変更はレビューで目視確認すべきです。

4. 監査証跡

確認すること:

  • 誰が変更したか分かるか
  • いつ公開されたか分かるか
  • どのバージョンが公開中か分かるか
  • 過去90日間の変更ログを出せるか
  • デプロイ済みサイトとソースの対応を追跡できるか

Git履歴だけでなく、公開ステップの履歴も必要です。

ApidogでセキュアなAPIドキュメントを公開する

Apidogは、API設計、デバッグ、テスト、モック、ドキュメント作成をまとめて扱うAPIプラットフォームです。ドキュメントはAPI設計から生成されるため、手動Markdownだけで運用するよりも仕様との乖離を抑えやすくなります。

試す場合は、Apidogをダウンロードし、API定義を含むプロジェクトを開きます。

手順1: API設計からドキュメントを生成する

Apidogでは、エンドポイント、スキーマ、認証設定をプロジェクト内で管理します。その定義からドキュメントを自動生成できます。

基本フロー:

  1. Apidogでプロジェクトを開く
  2. APIエンドポイント、リクエスト、レスポンス、認証を定義する
  3. ドキュメントプレビューで内容を確認する
  4. 公開設定を選ぶ
  5. ドキュメントを公開する

公開されたドキュメントには、インタラクティブな「試す」コンソールやコードサンプルを含められます。

手順2: アクセス制御を設定する

Apidogでは、公開時に表示範囲を選択できます。

利用できる主な方法:

  • 公開: リンクを知っている人が閲覧できる。完全公開API向け。
  • パスワード保護: パスワードを知っている人だけが閲覧できる。
  • IP許可リスト: オフィス、VPN、特定ネットワークからのみアクセスを許可する。
  • メール許可リスト: 許可したメールアドレスまたはドメインのユーザーだけがアクセスできる。
  • カスタムログイン: 独自認証システムと接続し、JWTなどでアクセスを制御する。

例:

公開API        -> 公開
顧客向けAPI    -> メール許可リスト
社内API        -> IP許可リスト + VPN
一時共有       -> パスワード保護
独自認証が必要 -> カスタムログイン
Enter fullscreen mode Exit fullscreen mode

詳細はAPIドキュメントアクセス制御ガイドを参照してください。

手順3: カスタムドメインを設定する

公開ドキュメントは独自ドメインで提供できます。たとえば次のようなURLです。

https://developer.yourcompany.com
https://docs.yourcompany.com
Enter fullscreen mode Exit fullscreen mode

Apidogは、DNS CNAMEまたはリバースプロキシ経由のカスタムドメインをサポートしています。

カスタムドメイン自体はアクセス制御ではありませんが、ドキュメントの所在を明確にし、利用者が公式ドキュメントを識別しやすくなります。

手順4: OpenAPI仕様を同期する

ドキュメントの乖離を防ぐには、API設計を信頼できる情報源にする必要があります。

Apidogでは次の形式を扱えます。

  • OpenAPI 3.0
  • OpenAPI 3.1
  • Swagger 2.0

外部仕様をインポートし、スケジュールされたインポートで最新状態を保つ運用もできます。

現在、GitリポジトリでOpenAPI仕様を手動管理している場合は、次を確認してください。

  • 仕様の更新責任者は誰か
  • ライブAPIとの検証はあるか
  • 変更レビューは必須か
  • 公開ドキュメントは最新仕様から生成されているか

SwaggerHubから移行する場合は、SwaggerHub APIドキュメントをApidogに移行するガイドを参照してください。

手順5: ドキュメントをバージョン管理する

Apidogは複数バージョンのドキュメント公開をサポートしています。

例:

v1: 既存顧客向け
v2: 新規利用者向け
beta: パートナー検証向け
Enter fullscreen mode Exit fullscreen mode

v2を公開した後も、v1利用者はv1ドキュメントを参照できます。これにより、古いAPI利用者が誤って新しい仕様を実装するリスクを減らせます。

ドキュメントホスティングオプションの比較

特性 公開GitHub Pages(Swagger UI / Redoc) 自身のサーバーでの自己ホスト型ドキュメント マネージド型ドキュメント(Apidog)
アクセス制御 なし;URLの不明瞭さのみ 構築・維持するものによる 組み込み:パスワード、IP、メール、カスタムログイン
バージョン管理 手動;個別のビルドまたはブランチ 手動 組み込み;バージョンは並行して公開
整合性 Gitレビュー + 履歴(強制されている場合) パイプラインによる 管理されたAPI設計からドキュメントを生成
監査証跡 リポジトリのGit履歴、デプロイ用ではない ロギングによる 設計および公開ドキュメントの変更履歴
メンテナンスコスト セットアップは低いが、パイプラインの維持には継続的な費用 高い;スタック全体を所有 低い;プラットフォームがホスティングとゲートを処理
最適な用途 完全に公開されたAPI、規律のあるパイプライン 厳格な自己ホスティング要件を持つチーム 運用オーバーヘッドなしでアクセス制御が必要なチーム

公開APIで、CI/CDとレビューが厳格に運用されているなら、GitHub Pagesは十分な選択肢です。厳しい分離要件やデータ所在地要件があるなら、自己ホスト型も選択肢になります。

より詳しい比較は、自己ホスト型APIドキュメント比較Scalar vs SwaggerHub vs Apidog比較を参照してください。

重要なのは、昔作ったドキュメント公開フローをそのまま放置しないことです。

今すぐ実施する監査手順

まず、ドキュメントの公開場所を棚卸しします。

- GitHub Pages
- S3 / CloudFront
- Netlify / Vercel
- 社内Wiki
- Swagger UI
- Redoc
- Apidog
- 顧客向けポータル
- README内のAPI説明
Enter fullscreen mode Exit fullscreen mode

次に、それぞれについて確認します。

1. 誰が読めるか
2. 誰が書き込めるか
3. 変更レビューはあるか
4. 公開済み内容はどのソースから生成されたか
5. OpenAPI仕様はライブAPIと一致しているか
6. 内部エンドポイントが混ざっていないか
7. 過去のバージョンを参照できるか
8. アクセス権をすぐ取り消せるか
Enter fullscreen mode Exit fullscreen mode

最後に、ギャップを埋めます。

  • アクセス制御がない → パスワード、IP制限、メール許可リスト、SSOを追加
  • 仕様が古い → API設計とドキュメント生成元を統一
  • バージョンがない → v1/v2を分離して公開
  • レビューが弱い → URL、認証、サンプルコードの変更を必須レビュー対象にする
  • 公開先が不明 → カスタムドメインと所有者を明確化

結論

GitHubの侵害は、Docs-as-codeをやめる理由ではありません。見直すべきなのは、APIドキュメントがどこにあり、誰が変更でき、誰が読めるかです。

API利用者は、あなたのドキュメントを信頼してコードを書きます。だからこそ、API本体と同じようにドキュメントにもアクセス制御、バージョン管理、整合性、監査証跡が必要です。

次のアクションはシンプルです。

  1. APIドキュメントの公開場所をすべてリストアップする
  2. 4つの特性で評価する
  3. 最大のギャップから修正する
  4. アクセス制御が不足している場合は、Apidogでパスワード保護またはメール許可リスト付きのドキュメント公開を試す

Top comments (0)