DEV Community

Cover image for Secret Scannerを活用した漏洩APIキーの検出と対処法
Akira
Akira

Posted on Originally published at apidog.com

Secret Scannerを活用した漏洩APIキーの検出と対処法

Apidog Secret Scannerで機密情報の漏洩を調査・対応する

Secret Scannerは、サポートされているApidogアセット内のAPIキー、アクセストークン、認証情報、Webhook URLなど、機密情報の可能性がある値を検出します。検出結果には出現場所が表示されますが、完全な値は表示されません。

今すぐApidogを試す

この記事では、検出結果の確認から実際の漏洩への対応、解決理由の記録、カスタム検出パターンの追加、チームアナリティクスの確認までを説明します。

始める前に

Secret ScannerはEnterprise SaaSプランで利用できます。現在、Apidogオンプレミスでは利用できません。

権限によって実行できる操作が異なります。

役割 利用可能なアクション
組織オーナーまたは管理者 チーム全体の組織レベルのレポートを表示
チームオーナーまたは管理者 検出結果の確認、解決・再オープン、カスタムパターンの管理、アナリティクスの表示
チームメンバーまたはゲスト アクセス権を持つプロジェクトの検出結果を表示

テストには必ず架空の値を使用してください。実際の認証情報をリソースに貼り付ける必要はありません。

1. 組織レポートを確認する

組織オーナーと管理者は、組織レポートで未解決の検出結果があるチームを特定できます。

  1. 組織レベルのSecret Scannerレポートを開く。
  2. 未解決の検出結果と、公開された漏洩の数を確認する。
  3. 最終検出時刻とスキャンステータスを確認する。
  4. 影響を受けるチームを開くか、チームオーナーまたは管理者に連絡する。

チームレベルのリスク情報を含む組織のSecret Scannerレポート

組織レポートは、フォローアップが必要なチームの特定に役立ちます。

組織レポートはトリアージ用です。詳細な調査と解決は、影響を受けるチームのSecret Scannerページで行います。

2. 検出結果を開いてフィルターする

チーム内でSecret Scannerを開き、Secrets Detectedを選択します。

次のフィルターで一覧を絞り込みます。

  • ステータス
  • プロジェクト
  • パターン
  • リソースタイプ
  • キーワード

検出結果は、検出パターンと安全なフィンガープリントでグループ化されます。同じ値が複数の場所に存在する場合、1つの検出結果に複数の出現箇所が表示されます。

マスクされた値、ステータス、プロジェクト、および出現箇所情報を含むSecret Scannerの検出結果

値はマスクされています。プロジェクト、リソースタイプ、出現回数、ソースの場所を使って調査します。

まず、公開漏洩としてマークされた未解決の検出結果を確認します。次に、複数のリソースまたはプロジェクトに出現する検出結果を調査します。

3. すべての出現箇所を調査する

検出結果を開き、各出現箇所で次の情報を確認します。

  • 値を含むプロジェクトとリソース
  • リソースタイプとソースの場所
  • 公開ドキュメントに表示されているか
  • 最初と最後の検出時刻
  • 実際の認証情報か、誤検知か

マスクされたスニペットだけで判断しないでください。ソースリソースを確認し、必要に応じてリソース所有者に発行システムを確認してもらいます。認証情報そのものをチケットやチャットにコピーするのは避けてください。

4. 実際の漏洩に対応する

Secret Scannerは漏洩の可能性を報告するだけで、認証情報を変更しません。確認されたシークレットは、発行元のシステムで対応します。

次の順序で作業してください。

  1. 外部サービスで認証情報を失効、ローテーション、または無効化する。
  2. 利用可能な使用ログを確認し、予期しないアクティビティを調査する。
  3. Apidogに表示されているすべてのソース出現箇所から値を削除する。
  4. ワークフローで必要な場合は、生の値を適切な変数またはVault Secret参照に置き換える。
  5. 変更した各リソースを保存し、非同期スキャンを再実行させる。

認証情報が公開ドキュメントに表示されていた場合、不審な利用が確認できなくても、外部に公開されたものとして扱います。

Apidogから値を削除しても、すでにコピーされた値は無効になりません。実際の漏洩に対する主要な封じ込め策は、ローテーションまたは失効です。

5. 解決理由を記録する

対応後、検出結果に解決理由を設定します。

解決理由 使用する状況
失効済み 実際のシークレットであり、Apidog以外で失効、ローテーション、または無効化した
誤検知 検出された値がシークレットではない
修正しない 実際のシークレットだが、チームがリスクを受け入れて変更しない

検出結果を解決済みにしても、Apidog上のステータスが変わるだけです。元の値が失効、ローテーション、無効化、削除、置換されるわけではありません。

追加対応が必要になった場合は、検出結果を再オープンしてください。

6. クリーンアップを確認する

Secret Scannerはリアルタイムではなく、非同期で実行されます。サポート対象のリソースが追加されたとき、または変更後に保存を選択したときにスキャンがトリガーされます。

修復後は、次の項目を確認します。

  • 既知のすべてのソース出現箇所を変更した
  • 影響を受けるリソースを保存した
  • 非同期スキャンが完了する時間を確保した
  • 検出結果と最終検出時刻を確認した
  • 発行サービスで古い認証情報が使えなくなったことを別途確認した

スキャナーのステータスは、認証情報の有効性テストではありません。失効状態は外部サービスで確認してください。

7. カスタム検出パターンを追加する

チームオーナーとチーム管理者は、組織固有のシークレット形式に対応するカスタムパターンを作成できます。

  1. Secret Scanner > Patternsを開く。
  2. カスタムパターンの作成を選択する。
  3. わかりやすい名前を入力する。
  4. 正規表現と有効なキーワードを追加する。
  5. 架空の値でテストする。
  6. パターンを有効にして保存する。

現在の制限は次のとおりです。

  • チームごとに最大5つのカスタムパターン
  • パターン名は最大128文字
  • UIで指定する正規表現は最大256文字
  • キーワードは最大10個
  • 各キーワードは最大64文字

組み込みパターンは読み取り専用です。内部の正規表現は表示されず、編集、削除、有効化、無効化はできません。

8. チームアナリティクスを確認する

チームオーナーと管理者は、Analyticsを開いて検出結果の集中箇所を確認できます。

検出結果と漏洩傾向を示すSecret Scannerアナリティクス

アナリティクスを使って、追加レビューが必要なプロジェクト、パターン、アセットタイプを特定します。

アナリティクスは優先順位付けに役立ちますが、各検出結果はソースレベルで調査してください。

サポートされるアセットタイプ

Secret Scannerは、現在次のサポート対象アセットをスキャンします。

  • APIおよびAPIリクエスト
  • APIケース
  • プロジェクトモジュールおよびプロジェクトモジュール変数
  • レスポンス例
  • Markdownドキュメントおよびデータスキーマ
  • 環境変数、グローバル変数、チーム変数
  • 共通スクリプトおよび共通パラメータ

出現箇所で表示できるソースの詳細は、リソースタイプと閲覧者の権限によって異なります。

トラブルシューティング

問題 確認すべきこと
最近の変更が結果に反映されない スキャンは非同期です。リソースが保存されていることを確認し、後で再確認します。
チームメンバーが検出結果を見られない 関連プロジェクトへのアクセス権を確認します。
パターンやアナリティクスを管理できない チームオーナーまたはチーム管理者の権限が必要です。
解決済みの検出結果に機能するシークレットが残っている 解決ステータスは認証情報を変更しません。発行サービスで失効またはローテーションします。
外部リポジトリがスキャンされない Secret Scannerは外部のGitHubまたはGitLabリポジトリをスキャンしません。リポジトリプロバイダーのスキャン機能も使用します。

重要な制限事項

Secret Scannerは、次のことを保証する機能ではありません。

  • ユーザーによるシークレット入力の防止
  • ドキュメント公開のブロック
  • 外部リポジトリのスキャン
  • すべてのシークレット形式の検出
  • ソース値の自動削除
  • 変数やVault参照への自動置換

最小権限での発行、安全な保管、ローテーション、失効、利用状況の監視を含む認証情報管理プロセスの一部として利用してください。

関連するAPIガバナンスチュートリアル

エンタープライズAPIワークスペースの管理に役立つ補完的な制御については、次のチュートリアルを参照してください。

関連する公式ドキュメント

Top comments (0)