9
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「シークレットスキャン」とは?漏れた API キー、誰が止めてくれるのか? 業務システム 65 件と GitHub・GitLab を調べてみた

9
Posted at

シークレットスキャンの 4 つの問いと答えを並べた図。1 シークレットスキャンとは: GitHub などのサービスが、コードに書かれた鍵(API キーなど)を、自動で見つける仕組み。GitHub は、鍵を含むコードが公開リポジトリに送られる前に止める。公開されてしまった鍵は、その鍵を発行した提供元(Google や Slack など)に知らせる。こうして、鍵の漏れと悪用を防ぐ。2 すべてのシステムの鍵が保護されるか: いいえ。GitHub が見分けられるのは、提供元が鍵の形を GitHub に届けた鍵だけ。API がある業務システム 65 件のうち、GitHub の対応表に名前があるのは 12 件で、日本の民間 SaaS 41 件は対応表に名前が無い。3 自分で設定は要るか: 公開リポジトリでは、GitHub が無料で自動に鍵を探す。会社の非公開リポジトリでは、会社が有料の GitHub Secret Protection を契約し、有効にする必要がある。4 GitHub 以外では: GitLab が鍵を送る前に止めるのは、最上位の Ultimate プランだけ。調べた範囲では、日本の業務 SaaS の鍵を提供元に知らせるサービスは見つからなかった

API キーをうっかり GitHub に公開してしまったら、誰かが気づいて止めてくれるのでしょうか。GitHub には「シークレットスキャン」という仕組みがあります。ただ、その仕組みで自分の使っているシステムの鍵まで守られるのか、自分で何か設定する必要があるのかは、あまり知られていません。

この記事では、GitHub・GitLab などの公式文書と、IT連携マップで API があると確かめた業務システム 65 件を GitHub の対応表と照らした結果から、4 つの問いに答えます。冒頭の図は、4 つの問いと答えの一覧です。引用した原文と細かい数字は、調査ページ シークレットスキャンとは — 漏れた鍵は誰が止めるか に 1 行ずつ載せています。


1. まず、言葉をそろえる

言葉 意味
鍵 システムが「使ってよい相手か」を確かめるための、秘密の文字列。パスワード、API キー、アクセストークンなどがある。この記事では、これらをまとめて「鍵」と呼ぶ
API キー 鍵の一種。プログラムが別のシステムの API を呼ぶときに、自分が誰かを示すために送る文字列。API キーを持っている人は、鍵の持ち主と同じ操作ができる
GitHub プログラムの文章(コード)を保管・共有するサービス
リポジトリ GitHub の上の、開発ごとのコードの置き場所。持ち主がリポジトリを公開にすると、世界中の誰でもそのコードを読める
コミット・プッシュ 開発する人が手元でコードの変更を記録することをコミット、記録した変更を GitHub に送ることをプッシュと呼ぶ
提供元 鍵を発行した会社。freee、Google、AWS など
プッシュ保護 鍵を含むコードがプッシュされたときに、GitHub がそのコードを受け取らずに止める働き

2. シークレットスキャンは、どう動くのか

シークレットスキャンの仕組みを、手元の PC・GitHub・提供元・第三者の 4 者の間のやり取りとして上から時間の順に示したシーケンス図。前もって提供元が自社の鍵の形(文字の並び方の決まり)を GitHub に届ける。開発する人がコードに鍵を書いたままコミットし、GitHub にプッシュすると、GitHub は鍵の形と照らし合わせる。形が届いている鍵(例: Slack・Google・HubSpot)は、プッシュ保護が送る前に止めて知らせ、公開リポジトリで見つけたら提供元に知らせ、提供元が取り消すかを決める。形が届いていない鍵(例: freee・kintone・SmartHR)は、見分けられずにそのまま公開され、第三者が拾い(実験では数分)、提供元への知らせは届かず、自分で気づいて取り消すしかない

シークレットスキャンは、GitHub に置かれたコードの中から、API キーの「形」をした文字列を GitHub が探す仕組みです。形とは、鍵の文字の並び方の決まりのことです。鍵を発行した提供元が、自社の鍵の形を GitHub に届けます。

図の上半分は、形が届いている鍵(Slack・Google・HubSpot など)の場合です。GitHub は、プッシュのときに鍵を見つけると、そのコードが送られる前に止めます(プッシュ保護)。また GitHub は、公開されてしまった鍵を見つけると、その鍵の提供元に知らせます。

図の下半分は、形が届いていない鍵の場合です。GitHub はその文字列を鍵だと見分けられません。そのため、鍵はそのまま公開され、提供元にも知らせが届きません。

📎 仕組みの原文(GitHub Docs)は シークレットスキャンとは の「仕組み」 にあります。

3. 見つけたら、止めてくれるのか

GitHub に漏れた鍵を 31 日後に確かめた結果の円グラフ。74% はまだ使え、26% は使えなくなっていた(Truffle Security)

GitHub がするのは、提供元に「知らせる」ところまでです。鍵を取り消すかどうかは、鍵を発行した提供元が決めます。たとえば Anthropic(Claude の提供元)は、漏れた鍵を自動で無効にします。一方 AWS は、漏れた鍵に一部の操作を拒む設定を付けるだけで、鍵そのものは使える状態のまま残ります。

しかも、漏れた鍵はなかなか取り消されません。研究者がわざと AWS の鍵を GitHub に置いた実験では、第三者が 1〜5 分でその鍵を使いました。また Truffle Security の調査では、GitHub に漏れた鍵の 74% が、31 日後もまだ使える状態でした。

📎 提供元ごとの対応と実験の原文は シークレットスキャンとは の「止めるのは提供元」 にあります。

4. 使っているシステムの鍵なら、大丈夫か

API がある業務システム 65 件を GitHub の対応表と照らした円グラフ。対応表に名前があるのは 12 件(18.5%、Google・Microsoft・HubSpot など海外 7 社)。名前が無いのは、日本の民間 SaaS 41 件(63.1%、freee・マネーフォワード・SmartHR・kintone など)、行政 9 件(13.8%、e-Gov・e-Tax・eLTAX など)、海外の製品 3 件(4.6%、FileMaker・Jotform・Zoho CRM)

IT連携マップ編集部は、API があると確かめた業務システム 65 件を、GitHub が公開している対応表と照らしました。対応表に名前があったのは 12 件で、日本の民間 SaaS 41 件はどれも対応表に載っていませんでした。

使っているシステム 公開リポジトリに鍵が漏れたら
Google・Microsoft・HubSpot・Notion・Shopify・Slack GitHub が鍵を見つけて、提供元に知らせる
Salesforce GitHub は鍵を見つけるが、提供元には知らせない。知らせはリポジトリの持ち主にだけ届く
freee・マネーフォワード・SmartHR・kintone など日本の民間 SaaS GitHub は鍵だと見分けられず、提供元にも知らせが届かない

日本の業務 SaaS の鍵は、漏れても誰からも知らせが来ない前提で、自分たちで管理するのが安全です。

📎 65 件の一覧と、提供元ごとの扱いの違いは シークレットスキャンとは の「使っているシステムの鍵は、大丈夫か」 にあります。

5. 自分で設定は要るのか

リポジトリ 何もしなくても動くもの 自分で設定が要るもの
公開 GitHub が無料で鍵を探し、提供元に知らせる。利用者が鍵を含むコードをプッシュすると、GitHub が止める リポジトリ全体のプッシュ保護は、リポジトリの管理者が有効にする
会社(組織)の非公開 シークレットスキャンは動かない 会社が GitHub Team 以上を契約し、有料の GitHub Secret Protection を有効にする
個人の非公開 シークレットスキャンは動かない 企業が管理する Enterprise Managed Users のアカウントでだけ、シークレットスキャンを使える

会社のコードを非公開リポジトリに置いているなら、GitHub が鍵を探しているとは限りません。会社の契約と設定を一度確かめてください。対応表に無い鍵も、組織のリポジトリなら、組織が鍵の形を自分で書き足して、GitHub に探させることができます。ただし、その場合も知らせが届くのは社内だけです。鍵は、自分たちで取り消す必要があります。

📎 設定の要否の原文は シークレットスキャンとは の「自分で設定が要るか」 にあります。

6. GitHub 以外では、どうか

GitHub 以外のサービスで、鍵を探す・送る前に止める・提供元に知らせるができるかを比べた表。GitHub は公開なら無料で自動に探し、送る前に止め、対応表の提供元に知らせる。GitLab は全プランで探せるが CI の設定に足す、送る前に止めるのは最上位の Ultimate だけ、提供元に知らせるのは公開・Ultimate で AWS・Google Cloud など 4 種。Bitbucket Cloud は CI に部品を足して探し、止める・知らせるは見つからない。Azure DevOps は有料の追加機能で、知らせる代わりに鍵が使えるかを問い合わせるだけ。手元の道具(Gitleaks や TruffleHog)はコミットの前に止められるが、提供元には知らせない。どれも、日本の業務 SaaS の鍵を提供元に知らせる仕組みは見つからなかった

GitLab にも同じ仕組みがあります。ただし、GitLab が鍵を送る前に止めるのは、最上位の Ultimate プランだけです。GitLab が提供元に知らせるのも、公開または Ultimate のプロジェクトで、AWS・Google Cloud など 4 種の鍵だけです。Bitbucket のクラウド版では、利用者が CI に部品を足して鍵を探します。Azure DevOps では、鍵を探す機能は有料の追加機能です。

Gitleaks や TruffleHog は、手元の PC で鍵を探す道具です。これらの道具はコミットする前に鍵を止められますが、提供元には知らせません。調べた範囲では、日本の業務 SaaS の鍵を提供元に知らせるサービスは見つかりませんでした。

📎 各社の公式文書の原文は シークレットスキャンとは の「GitHub 以外では」 にあります。

7. 漏れる前に、漏れたときに

鍵を使う会社は、次の 5 つをしておきます。

  1. 使っているシステムの鍵が、GitHub の対応表に載っているかを確かめる
  2. 会社の非公開リポジトリで、シークレットスキャンとプッシュ保護が有効になっているかを確かめる
  3. 鍵を取り消す画面と、鍵を取り消すと止まる連携を、漏れる前に書き出しておく
  4. 鍵が漏れたら、まず鍵を取り消して作り直す。コードの過去の記録から鍵を消すのは、その後でよい
  5. 権限を絞った鍵や、期限のある鍵を選べる製品では、そちらを使う

鍵の期限と取り消し方は API トークンはいつ切れ、どう取り消すか、鍵がどこから漏れるかは API キーはどこから漏れるのか、AI エージェントに鍵を渡すときの注意は AI エージェントに鍵を渡しても大丈夫か にまとめています。鍵の置き場所は .env の名前を変えれば安全か — 合鍵の置き場所 にまとめています。

一次出典

出典 内容
GitHub Docs: About secret scanning 公開リポジトリは無料で自動・非公開は Secret Protection が要る
GitHub Docs: About push protection プッシュ保護の種類と、初めの状態
GitHub Docs: Secret scanning partner program 提供元が鍵の形を届ける仕組み
GitHub Docs: Supported secret scanning patterns 対応表
GitHub Docs: About GitHub Advanced Security Secret Protection の購入条件
GitLab Docs: Secret detection GitLab の 3 つの仕組み
GitLab Docs: Automatic response to leaked secrets 提供元に知らせる条件
Microsoft Learn: Azure DevOps の Secret scanning 有料の追加機能
Atlassian: git-secrets-scan pipe Bitbucket Cloud で探す方法
Anthropic: API key best practices 漏れた鍵を自動で無効にする
AWS: AWSCompromisedKeyQuarantineV3 一部の操作を拒む設定
Unit 42: 漏れた IAM キーの悪用 5 分以内に使われた実験
Truffle Security: 漏れた鍵の多くは取り消されない 31 日後も 74% が使えた

引用した原文と出典は、すべて調査ページで 1 行ずつ公開しています。確かめたい方は シークレットスキャンとは — 漏れた鍵は誰が止めるか をご覧ください。

読者アンケート実施中
このテーマをもっと深掘りしてほしい方は、記事に「いいね」をお願いします。「いいね」の多いテーマから順に追加調査し、結果は新着記事でお知らせします(フォローしていただくと通知が届きます)。

【転載OK】本記事の転載について

本記事の文章・図表は、すべて転載 OK です。図は加工しないままお使いください。転載の際は、出典として、この記事の完全版 『シークレットスキャンとは』(renkeimap.jp)へのリンクをお願いします。事前の連絡は不要です。

※ 筆者は日立系ITベンダー・介護ソフトベンダー・大学病院IT部門を経て独立し、現在は中小企業のIT・DX支援をしながら、業務システムの「つながり」を一次資料で調べています。 文中の「編集部」は、筆者が所属する IT連携マップ編集部 のことです。誤りを見つけられましたら 訂正窓口(無料・アカウント不要)へお願いします。訂正履歴も公開しています。

9
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?