Featured image of post GitHubリポジトリのセキュリティ設定を見直したときのメモ

GitHubリポジトリのセキュリティ設定を見直したときのメモ

これはなに Link to this heading

下記リンク先に従って、GitHubのセキュリティ設定を見直したときにやったことや調べたことのメモ。 公式から「すべてのGitHubメンテナーが有効にする必要がある」と言われたら見直すよね。

ちなみに設定は6つで、30分以内に更新できるらしい。ホントかよ。

結論 Link to this heading

パブリックリポジトリの場合、GitHubリポジトリの"Security and quality"にある設定をすべて有効化すると、リポジトリのセキュリティが向上する。

ただし、個人のプライベートリポジトリの場合は下記設定のみ有効である。

  • Dependabot alerts
  • Secret scanning alerts

1. SECURITY.mdファイルを追加する Link to this heading

これはパブリックリポジトリでのみ有用である。

SECURITY.mdファイルは、プロジェクトの脆弱性をどのように報告するかユーザーに伝えることを目的としたファイルである。公式ドキュメントによれば、「プロジェクトのバージョンと脆弱性の報告方法に関する情報を追加する」ものとのことだ。参考リンク先ではsystemdの例が紹介されている。

脆弱性の情報は公開Issueに書かれると、悪意のあるユーザーに悪用される可能性がある。そのため、公開Issueとは別の経路の報告先を用意する必要がある。この報告先の明示がリポジトリのセキュリティを高めることに繋がるらしい。

SECURITY.mdファイルは下記のいずれかに配置する1

  • .githubディレクトリ
  • リポジトリ直下
  • docsディレクトリ

この設定は、各リポジトリの"Security and quality"の設定における"Security policy"に該当する。下図のようにDisabledになっている場合は、SECURITY.mdが存在していないことを表す。

Security policyがDisabledになっている例

上記画像で"Set up a security policy"をクリックすると、GitHub上でリポジトリ直下にSECURITY.mdを作成できる。

個人の意見だが、個人開発では、下記の内容が書かれていれば最低限問題ないと思われる。

  1. セキュリティ修正対象のバージョン
  2. 脆弱性の報告先
  3. 報告時に含めてほしい情報
  4. 公開Issueに書かないでほしいこと
  5. 返答にかかる時間の目安

ちなみに、脆弱性の報告先は、GitHubのPVR(Private vulnerability reporting)を使うと便利である。これについては次の項で説明する。

たとえば、拙作のPythonパッケージであるtickoでは、下記のようなSECURITY.mdを作成した。

下記の例は次項で説明するPVRを有効にしている前提で作成している。
# Security Policy

## Supported Versions

Security updates are provided for the latest major version of ticko.

| Version | Supported          |
| ------- | ------------------ |
| 2.x     | :white_check_mark: |
| 1.x     | :x:                |

Users are encouraged to upgrade to the latest release available on PyPI.

## Reporting a Vulnerability

If you discover a security vulnerability in ticko, please do not report it
through a public GitHub issue.

Instead, please report it privately using GitHub's private vulnerability
reporting feature.

When submitting a report, please include as much of the following information
as possible:

- A description of the vulnerability
- The affected version(s) of ticko
- Steps to reproduce the issue
- A minimal proof of concept, if applicable
- The potential security impact
- Any suggested mitigation or fix, if available

You can expect an initial response within 14 days.

Please allow reasonable time for the issue to be investigated and fixed before
publicly disclosing the vulnerability.

## Scope

Security reports should describe issues that have a meaningful security impact
on applications using ticko.

General bugs, timing inaccuracies, performance issues, feature requests, and
other problems without a security impact should be reported through the public
GitHub issue tracker instead.

SECURITY.mdの内容自体は、リポジトリのリンクをLLMに投げれば作成してくれるので、そんなに時間はかからない。他の有用なプロジェクトの記述を真似してもよいだろう。

2. PVR (Private Vulnerability Reporting)を有効にする Link to this heading

これはパブリックリポジトリでのみ有用である。

PVR(Private Vulnerability Reporting)とは、GitHubのリポジトリに対して機密に脆弱性を報告するための、GitHubの機能である。GitHubで公開しているなら、脆弱性の報告は公開IssueではなくPVRを使うべきとされる。

PVRを使う場合はリポジトリの設定から有効にする必要がある。これは一瞬で設定できる。

有効化のしかたは、まず各リポジトリの"Security and quality"の設定を開き、“Private vulnerability reporting"の項を確認する。下図のようにDisabledになっている場合は、PVRが無効であることを表す。

Private vulnerability reportingがDisabledになっている例

“Enable vulnerability reporting"をクリックすると、下図のような設定画面が表示される。

PVRの設定画面

この"Enable"をクリックすると有効になる。

ちなみに1と2を設定すると、リポジトリの"Security and quality"に、1で作成したSECURITY.mdの内容と"Report a vulnerability"ボタンが表示される。

1と2を設定後のSecurity and qualityの表示

3. Secret scanning alertsを有効化する Link to this heading

これはパブリックリポジトリ、あるいは組織所有のプライベート/内部リポジトリで有効な設定である。

Secret scanning alertsとは、GitHub上のリモートリポジトリへプッシュした際に走るシークレットスキャンである。キーやトークンといったシークレットにすべき値がリポジトリに漏れ込んでいないかをスキャンしてくれる。シークレットが漏れることを防ぐ防波堤のようなものである。

参考リンク先によると、AI支援によるコミットにより、通常の約2倍の割合でシークレットが漏洩しているらしい。怖…。

有効化のしかたは、まず各リポジトリの"Security and quality"の設定を開き、“Secret scanning alerts"の項を確認する。下図のようにEnabledになっていれば機能は有効である。

Secret scanning alertsが有効である例

この機能が有効になっていると、シークレットの漏洩が検知されたとき、アラートが発せられるらしい2

ちなみに、実際に漏洩が検知されたときの対応の仕方は、下記公式情報が参考になりそう。

4. Dependabotを有効化する Link to this heading

これはパブリック/プライベートにかかわらず有用な設定である。

Dependabotは、リポジトリが依存している外部ライブラリやパッケージに既知の脆弱性があることを警告するツールである。 たとえばpackage.jsonに記された依存関係を確認し、セキュリティ問題がある場合は警告が出る。デフォルトではメールで通知される。

執筆時点では、Dependabotには関連する5つの機能がある。

機能名説明
Dependency graph依存関係をGitHubが把握するための機能
Dependabot alerts依存ライブラリに既知の脆弱性が見つかったとき警告する機能
Dependabot security updates脆弱性を直すバージョンへの更新PRを自動作成する機能
Grouped security updates複数のセキュリティ更新をまとめて1つのPRにする機能
Dependabot version updates依存パッケージを定期的に最新版へ更新するPRを作成する機能

これらのうち、Dependabot version updatesだけは、脆弱性があるかどうかにかからわず最新版への更新PRを作成する。

これらのうち、個人的にはとくにDependabot alertsが最低限必要だと思っている。Dependabot alertsを使うにはDependency graphも必要であるため、これら2つを有効化することにした。

設定は、まず設定したいリポジトリの"Security and quality"の設定を開く。下図のように"Enable Dependabot alerts"のボタンが表示されている場合は有効になっていないので、このボタンをクリックする。

Dependabot alertsは有効化されていない

すると、下図のようなAdvanced Securityの設定画面に遷移するので、Dependabot alertsの項のEnableボタンをクリックする。

このEnableボタンをクリックしてDependabot alertsを有効化する

このとき、Dependency graphが有効化されていない場合は下図のような警告が出る。問題ないのでEnableを押す。

Dependabot alertsにはDependency graphが必須という警告が出る

下図のようにDisableボタンになっていれば有効化されている。

Dependabot alertsが有効化されている

ちなみに、上図のDependabot malware alertsも有用そうなので、個人的に有効化した。

5. Code scanningを有効化する Link to this heading

これはパブリックリポジトリ、あるいは組織所有のリポジトリで有効化できる。

Code scanningは、リポジトリ内のコードを静的分析し、セキュリティの脆弱性とコーディングエラーを見つけてくれる機能である。SQLインジェクションとかにフラグを付けてくれる。

CodeQLを用いたコードスキャンでは、安全ではないGitHub Actionsワークフローも検出できる。CodeQLは現在ワンクリックで使えるデフォルト設定としてGitHubに用意されている。ありがたい。

デフォルトのセットアップならすぐに設定は終わる。まず、設定したいリポジトリの"Security and quality"にある"Code scanning alerts"を確認する。 下図のように"Set up code scanning"のボタンが表示されている場合は、まだ有効化されていない。

まだCode scanningは有効化されていない

“Set up code scanning"のボタンをクリックすると、Advanced Securityの設定画面に遷移する。設定はカスタマイズできるが、一番簡単なのはCodeQLをデフォルト設定で使うことになる。有効になっていない場合は下図のようになっているはずなので、Set upからDefaultを選ぶ。

CodeQLをセットアップする

すると、自動でリポジトリが解析されて、デフォルトの設定が生成される。この部分で間違っている場合は編集もできる。

拙作のPythonパッケージであるtickoの場合の自動解析結果。tickoはPythonパッケージであるのと、PyPI公開をGitHub Actionsで行っているため、解析結果は正しい。

設定が正しければ"Enable CodeQL"ボタンをクリックする。設定には数分時間がかかるので待つ。 きちんと有効化されスキャンされると、設定の部分に表示される。

Code scanningが有効化され、スキャンが走ったとわかる

スキャンの結果は、GitHubのActionsタブから確認できる。

GitHub Actionsタブでのスキャン結果

6. デフォルトブランチを保護する Link to this heading

大抵のデフォルトブランチはmainだと思うが、このmainブランチに直接コミットされないように保護できる。例えば、少なくとも1人の承認を得て、マージする前にプルリクエストを要求するように設定できる。 個人的に1人開発のプライベートリポジトリだと面倒なだけだが、パブリックリポジトリなら直接プッシュされないというだけで恩恵は大きいと思っている。また、Dependabotのアラートやコードスキャンの結果を強制して、それによりマージを阻止することも可能になる。

これは個人的に過去に設定してしまっていたため、詳細は下記を参照してほしい。

おわりに Link to this heading

いろいろ調べながら設定したので時間がかかったが、結局のところ時間がかかるのはSECURITY.mdの作成とデフォルトブランチの保護くらいで、ほかは設定画面でEnableにするだけのものばかりだった。たしかに30分以内に更新できるな。


  1. この中でどこに配置しても問題ない。ちなみに、公式の情報によると、.githubディレクトリ->リポジトリ直下->docsディレクトリの順に優先されるらしい。 ↩︎

  2. 「らしい」というのは実際にその自体が起きたことはないのでわからないという意。まあ起きないに越したことはない。 ↩︎

Licensed under CC BY-NC-SA 4.0
最終更新 2026/09/23
Hugo で構築されています。
テーマ StackJimmy によって設計されています。