GitHub Advanced Securityの主要な3つの機能を試してみた
こんにちは、豊島です。
はじめに
GitHub Advanced Securityの3つの主要な機能(Dependabot、コードスキャン、シークレットスキャン)を試してみました。
GitHub Advanced Securityの主要な3つの機能について
- そもそもGitHub Advanced Security(以下GHAS)とは
GitHub Advanced Security (GHAS) は、開発者を支援するアプリケーションセキュリティソリューションです。 Advanced Securityはワークフローに直接組み込まれているため、開発を遅らせることなく、脆弱性と資格情報の漏洩を防ぐことができます。 GitHub Advanced Security は、専属のセキュリティコンサルタントに、世界中のセキュリティ専門家の分析情報を使って、すべてのコード行を確認してもらうようなものです。
各ソリューションを表にまとめてみました
| 機能 | 概要 | チェックタイミング | パブリックリポジトリ | プライベートリポジトリ |
|---|---|---|---|---|
| Dependabot | - プロジェクトで利用されているライブラリとフレームワークの更新を定期的にチェック - 既知の脆弱性を含む依存関係の更新のプルリクエストを自動で作成可能 - 脆弱性がない場合でも依存関係を最新の状態に保つプルリクエストを自動で作成可能 |
- 定期的(頻度は設定可能) - 新しい脆弱性が報告されたとき - 依存関係に新しいバージョンがリリースされたとき |
無料 | 無料 |
| コードスキャン | - プルリクエストのワークフロー内でソースコードを分析 - セキュリティの脆弱性やコーディングエラーをチェック |
- プルリクエスト作成時 - プッシュ時(設定による) - 定期的なスケジュール(設定による) |
無料 | 有料(従量制[1])[2] |
| シークレットスキャン | - ソースコード内のAPIキーやトークンなどの機密情報の不慮の露出を特定(規定ではGitHubパートナーが提供する設定が適用されており、カスタムパターンの設定が可能) - コミット時にコードをスキャンし、シークレットが存在する場合はプッシュをブロックする |
- コミット時(プッシュ前) - プッシュ時 - 既存のリポジトリに対して定期的に |
無料 | 有料[3] |
それぞれの設定を確認
リポジトリの画像を例に設定しています
Securityタブから
- Dependabot alerts
- Code scanning alerts
- Secret scanning alerts
がEnableになっていることを確認します(デフォルトではSecret scanning alertsのみEnableになっています)

設定後

Dependabotを試してみる
すでにDependabotのアラートが3つあがっているため、#1から確認していきます

Create Dependabot security updateからプルリクエストを作成していきます
右側にSeverity(重大度の評価とスコア)といったメタデータが表示されています
詳細を知りたい方はDependabot アラートのメタデータについてを参照ください

作成できたようなので、Review security updateから確認します

問題がなければマージしましょう(マージ後にアラートが消えていました)

続けて#2も同様に実施します

Create中に失敗しました。どうやら他のパッケージとの依存関係が原因のようです
しかし内容をよく見るとnextのバージョンが14.2.10であればOKなため、package.jsonのバージョンを変えてマニュアルでインストールしてみたところアラートが消えました

今回はパブリックリポジトリを対象に適用しましたが、GitHub Enterprise Cloud (GHEC)と組み合わせることでプライベートリポジトリにも適用することができます
(おまけ) Dependency graphからSBOMを出力してみる
Dependency graph(依存関係グラフ)からSBOMが出力できたので、おまけとして手順を残します
Settingsタブ Code securityからDependency graphがEnabledになっていることを確認してください。(画像ではInsightsタブがアクティブになっていますが、Settingsから確認できます)

InsightsタブDependency graphにあるExport SBOMから出力可能です

Dependency graph(依存関係グラフ)が利用可能なリポジトリ
- パブリックリポジトリ (既定ではオン)
- プライベートリポジトリ
- フォーク
依存関係グラフについて
コードスキャンを試してみる
演習用のリポジトリで試していきます
まずはそれぞれの設定がEnableになっていることを確認していきます
SettingsタブのSecurity Code securityから

ToolsのCodeQL analysisをDefaultで設定していきます

今回はデフォルトのまま設定していきます

ActionsのCodeQL Setupが完了になっていることを確認します

SecurityタブのCode Scanningに2件あがってきています

(ここから演習順序から外れます)
alertの詳細を見るとRecommendationやExampleから修正の手助けができるようになっています
今回は上部にあるCopilot Autofixを試してみたのですが、変更内容のサジェスト、プルリクエストを自動で作成してくれる機能です

プルリクエスト作成時にもCodeQLが実行され、変更内容を含めた評価が実行されています

マージ後に、alertは消えています

シークレットスキャンを試してみる
演習用のリポジトリで試していきます
まずはそれぞれの設定がEnableになっていることを確認していきます
SettingsタブのSecurity Code securityから

Secret scanningとPush protectionがEnableであることを確認します

SecurityのSecret Scanningから検出済みのSecret情報を確認することができます。

Validityでシークレットが有効かどうかをチェックすることができます。流出してしまったシークレットが"active","inactive","Unknown"かをチェックし、対応の優先順位付けに役立ちます。

Secret typeでシークレットの種別をフィルターすることができます

アラートの内容からはSecret typeごとに具体的な対応方法が記載されています(今回はAWSに対応した内容)

プッシュ保護が有効化されているため、コンソール上からコミットしようとしたところポップアップが出ました。

具体的な箇所、意図したものであるかどうかの確認が出ています。これらを選択することでAllow Secretからプッシュ可能でした。
エディタから同様にプッシュしたところ、エラーが発生しました。
エラー時のログ
具体的なpathまで記載されています
> git push origin main:main
remote: error: GH013: Repository rule violations found for refs/heads/main.
remote:
remote: - GITHUB PUSH PROTECTION
remote: —————————————————————————————————————————
remote: Resolve the following violations before pushing again
remote:
remote: - Push cannot contain secrets
remote:
remote:
remote: (?) Learn how to resolve a blocked push
remote: https://docs.github.com/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-command-line#resolving-a-blocked-push
remote:
remote:
remote: —— GitHub Personal Access Token ——————————————————————
remote: locations:
remote: - commit: 5af768990df6b081e2c598286ba7d99d0629806a
remote: path: credentials.yml:6
remote:
remote: (?) To push, remove secret from commit(s) or follow this URL to allow the secret.
remote: https://github.com//skills-introduction-to-secret-scanning/security/secret-scanning/unblock-secret/2pNZmKbaYbFAvnuv2OsX3IUlHwq
remote:
remote:
remote:
To https://github.com//skills-introduction-to-secret-scanning.git
! [remote rejected] main -> main (push declined due to repository rule violations)
error: failed to push some refs to 'https://github.com//skills-introduction-to-secret-scanning.git'
最後に
GitHub Advanced Securityの主要な3つの機能Dependabot、コードスキャン、シークレットスキャンを試してみました。
どなたかの参考になれば幸いです。
GitHub Actionsを利用するため。GitHub Actionsを無効にして実行することも可能ですが、
GitHub Actions ほど優れたパフォーマンス、可視性、または Dependabot 更新ジョブの制御は提供されません。と記載がありました GitHub ActionsランナーのDependabotについて ↩︎GitHub Enterprise Cloudを利用かつGitHub Advanced Securityのライセンスを持つOrganizationによって所有されていることコード スキャンについて ↩︎
GitHub Enterprise Cloudを利用かつGitHub Advanced Securityオプションが必要 シークレットスキャンについて ↩︎






