Microsoft Azureコラム
Writer:手戸 蒼唯(てど あおい)
GitHub Advanced Securityとは?開発初期から始めるセキュリティ対策の機能と活用法を解説
GitHub Advanced Security(GHAS)は、ソフトウェア開発の安全性を向上させるための包括的なセキュリティツール群です。 コードスキャンやシークレットスキャン、依存関係の管理など、開発プロセスの早期段階から統合的なセキュリティ対策を実現します。GitHub Copilotとの連携による自動修正機能も備え、効率的なセキュリティ管理を可能にします。 本記事では、GHASの主要機能や導入手順、活用事例を詳しく解説し、実践的なセキュリティ対策の実現方法をご紹介します。安全な開発環境の構築にお役立てください。
ネクストステップにおすすめ

GitHub Advanced Securityとは
GitHub Advanced Security(GHAS)は、GitHubが提供するセキュリティ機能の包括的なツール群です。ソフトウェア開発の安全性を向上させるために設計されています。
このサービスを使うことで、開発中のコードに潜む脆弱性やセキュリティ上の問題を早期に発見し、修正することができます。GHASの利用には、GitHub Enterpriseライセンスが必要です。 申し込み方法も含めて本記事では詳細をご紹介していきます。
開発における位置づけ
かつて、セキュリティ対策はソフトウェア開発ライフサイクル(SDLC)の後半で行われる「後付け」の要素とされていました。このアプローチでは脆弱性の発見・修正が遅れ、コスト増加やプロジェクトの遅延を引き起こすことが多くありました。
しかし現在では、開発初期段階からセキュリティを統合する「シフトレフト」が重要視されており、GHASは、このシフトレフトを支援する強力なツールです。
プルリクエストごとの自動セキュリティチェックや、コード・依存ライブラリのスキャンにより、開発の早期段階から継続的にセキュリティ対策を実施できます。

GitHub Advanced Securityの特徴
GHASは、GitHubプラットフォームに統合されたセキュリティ機能を提供しているため、他のセキュリティツールとは異なる特徴があります。
1.GitHubとの統合性
通常のセキュリティツールをGitHubや他のプラットフォームで使う場合、統合するための設定やプラグインが必要で、ワークフローに組み込むまでに時間がかかる場合があります。
しかしGHASはGitHubに完全統合されているので、開発者のワークフローを中断することなくセキュリティ機能を活用することができます。
2.カスタマイズ機能
CodeQLというツールを使用して、特定のニーズや要件に応じた独自のルールやクエリを作成・実行することができます。
この機能により、一般的な脆弱性検出だけでなく、特定のプロジェクトや組織に特化したセキュリティチェックが可能になります。
例えば、「データベース接続時に適切な認証メカニズムが使われているか」を検出する独自クエリを設定するなど、プロジェクト固有のコーディング規約に違反するコードや特定の関数の不適切な使用を検出するルールを作成することができます。
一般的な静的解析ツールは、あらかじめ用意された「固定の脆弱性検出ルール」を使うことが多いため、この機能は開発チームのニーズに合わせてセキュリティ対策を強化するために非常に有効です。
3. パブリックリポジトリの無料提供
商用のセキュリティツールは、パブリックリポジトリでも有料になる場合が多いです。
一方、GHASのパブリックリポジトリであれば、コードスキャンやシークレットスキャン、依存関係スキャンなどの多くの機能が無料で利用可能です。
4. サプライチェーンセキュリティ
サプライチェーンセキュリティとは、ソフトウェア開発や運用において使用される外部のコンポーネントやライブラリ、ツールチェーンが安全であることを確保するためのセキュリティ対策を指します。
現代のソフトウェア開発では、オープンソースライブラリや外部ツールを利用することが一般的なので、サプライチェーンセキュリティの保護は重要です。
他のツールではサプライチェーンセキュリティ対策を行う場合別途専用ツールを導入する必要がある場合があります。
一方GHASではGitHubの依存関係スキャンやDependabotが統合されているため、ライブラリの更新や脆弱性管理が容易にできます。
5. リアルタイムでの修正支援
GHASでは、GitHub Copilot と連携することで、セキュリティスキャンで検出された問題に対して修正提案を自動生成し、修正作業のスピードを向上させることが可能です。
この機能は「Copilot Autofix」と呼ばれています。
他のツールを使用する場合、「問題の検出までは対応可能であるものの、修正提案を含む機能を備えていない」という場合が多いのです。そのため、この連携の効果は大きいものです。
GitHub Advanced Securityの主な機能
このセクションではGHASが提供する主な要機能についてご紹介します。それぞれの機能が開発プロセスの異なる段階でセキュリティ強化に役立ちます。
コードスキャン (Code Scanning)
コードスキャンは、コードに潜んでいるセキュリティ上の問題やミスを見つける機能です。
この機能を使用した場合、ユーザーがコードを変更すると(プルリクエストを作成すると)自動的にスキャンが実行され、問題があればすぐに警告と修正案が提示されます。

【特徴】
- CodeQLによる高度な解析
CodeQLは、コードスキャンの中核をなす技術でGitHubが提供する強力なコード解析ツールです。コードをデータベース化し、SQLに似たクエリ言語を使用することで、脆弱性やセキュリティリスクを効率的に検出することができます。
フォルトで提供されるクエリを使うだけでなく、プロジェクトや組織に特化した独自のセキュリティルールを設定することも可能です。 - リアルタイムでのフィードバック
プルリクエストやコミット時に自動的にコードスキャンが実行され、開発者にリアルタイムでフィードバックを提供します。開発プロセス中に問題を特定し、運用環境に持ち込まれる前に修正できます。 - ローカル環境でのスキャン
CodeQL CLIを使用することで、GitHubを利用せずローカル環境でコードスキャンを実行することも可能です。
シークレットスキャン (Secret Scanning)
シークレットスキャンは、リポジトリ内に誤って含まれてしまったAPIキーやトークンなどの機密情報を検出して警告を出す機能です。
また、プッシュ保護という機能を有効にすると、リポジトリにプッシュされる前の段階で機密情報が検出され、コードのプッシュが止められ、警告が表示されます。
この機能は、GitHubのオプション設定で有効化することができます。

[マイクロソフト]
)
依存関係スキャン (Dependency Review)
依存関係スキャンは、コードに新しい外部ライブラリ(依存関係)を追加する際に、そのライブラリが安全かどうかを確認することができる機能です。

【スキャン結果例】
スキャンの結果は、上記イメージのようにプルリクエストのレビュー画面でリスト形式で表示されます。既知の脆弱性があればその重要性(high severityやlow severityなど)が明示されます。
この例では、lodashというライブラリに「Prototype Pollution」という脆弱性があり、修正されたバージョン(4.17.12)が提示されています。
【メリット】
この機能を活用することで、新規に導入された依存関係が脆弱性を含んでいる場合、即座に検出し対応することができます。
また、外部ライブラリを介した攻撃(サプライチェーン攻撃)の防止においても重要な役割を果たします。
Dependabotによる自動更新
Dependabotは、プロジェクトで使用している外部ライブラリや依存関係を自動的に管理し、セキュリティ脆弱性が発見された場合に修正版への更新を提案するツールのことです。
【依存関係スキャンとの違い】
依存関係スキャンと似ているように思われますが、依存関係スキャンでは依存関係が新たに追加・変更される際のリスク確認機能であるのに対し、Dependabotでは依存関係全体を常に監視している点が異なります。

【機能詳細】
- 脆弱性の自動検出
使用している依存関係に脆弱性が見つかると、GitHubセキュリティアラートを発行し、修正版への更新を推奨します。
※GitHubセキュリティアラートは、リポジトリ内の依存関係やコードに潜む既知の脆弱性を検出し、開発者に通知する仕組みのことです。 - 自動更新プルリクエスト
脆弱性が修正されたバージョンがリリースされると、Dependabotが自動的にプルリクエストを作成し、安全なバージョンへの更新を提案します。 - 依存関係の最新化
セキュリティ修正以外でも、依存関係を最新バージョンにアップデートするプルリクエストを定期的に生成できます。 - 簡単な利用方法
GitHubリポジトリでDependabotを有効化するだけで利用でき、依存関係を安全かつ最新の状態に保つことができます。
GitHub Copilotとの連携
GitHub Copilotは、AIを活用したコード補完ツールのことです。GHASと連携することで、セキュリティアラートへの対応をより効率的に行うことができます。
【コードスキャンとの違い】
上記のコードスキャンとの違いは以下のとおりです。
- コードスキャン
修正の指針を提示するツールであり、修正作業そのものはユーザーが手動で行う必要があります。 - Copilotとの連携
問題の指摘に加えて、修正すべきコードそのものをAIが生成するため、ユーザーは提案されたコードをそのまま適用することが可能です。
【仕組み】
- CodeQLによる検出
コードスキャンと同様に、CodeQLを活用して脆弱性や問題点を検出します。 - 修正案の自動生成
GitHub CopilotがAIを活用し、検出された問題を解決するためのコードを自動生成・提案します。 - 修正案の採用
開発者は提案されたコードを確認し、必要に応じて採用して脆弱性を修正します。
【関連記事】
GitHub Advanced Securityの導入手順
ここでは、GHASの導入方法と各種機能の設定方法についてご紹介します。
※GHASを申し込むには、GitHub Enterpriseライセンスが必要となります。
GitHub Enterpriseについては以下の記事を参考にしてください。
GitHub Enterpriseとは?組織開発のための高度なセキュリティ機能と導入手順を解説
また、東京エレクトロンデバイスでは企業のGitHub活用をサポートしています。お気軽にご相談ください。
GitHub Advanced Securityプランへの申し込み
まず、GHASの申し込みをします。この作業はGitHub Enterpriseアカウントの管理者が行う必要があります。なお有料プランを申し込む前に、無料試用版を利用してGHASの機能を評価することもできます。
以下は、申込みの手順です。
- GHASの有料プラン申込画面へアクセスし、GHASの有料プランの「Contact sales」を選択します。

- 必要な入力をし、最後に「Contact Sales」をクリックします。


コードスキャンの設定
ここからはコードスキャンの設定を有効にする方法をご紹介します。
- GitHubで設定したいリポジトリのトップページに移動し、上部メニューから「Security」を選択します。

- 「Security overview」ページ内の「Code scanning alerts」セクションで、「Set up code scanning」をクリックします。

- 表示される「CodeQL analysis」オプションで、「Set up」をクリックし、次に「Default」を選択します。

- 「CodeQL default configuration」ページで、「Enable CodeQL」をクリックして設定を完了します。

この手順により、リポジトリに対してCodeQLによるコードスキャンが有効化されます。
5. 有効化後の動作イメージ
- プルリクエストの作成時に新しいコードをリポジトリにプッシュすると、CodeQLが自動でコードを解析します。
- アラートが表示される場合
問題が検出されると「Code scanning alerts」にアラートが表示されます。以下の内容が含まれます:
1. 問題が発生している具体的なコード箇所(例:main.pyの42行目)。
2. 問題の詳細な説明と修正案。 - アラートがない場合
「All checks passed」と表示され、コードが安全であることを確認できます。
シークレットスキャンの設定
シークレットスキャンの設定を有効にする方法は以下のとおりです。
- GitHubの設定対象の設定対象のリポジトリのトップページに移動し、上部メニューから「Security」を選択します。
「Security overview」ページ内の「Secret scanning alerts」セクションで、「Enable in settings」をクリックします。

- 表示される「Secret scanning」設定ページで、「Enable」をクリックしてシークレットスキャンを有効化します。

この手順により、リポジトリ内でのシークレットスキャンが有効化されます。
3. 有効化後の動作イメージ
- コードにシークレットが含まれていた場合
1. 開発者が誤ってAPIキーをコードにハードコーディングしてコミットしたとします。
2. シークレットスキャンがこれを検出し、「Secret scanning alerts」にアラートを生成します。 - アラートの内容
1. 検出されたシークレットの種類(例:Azureキー)。
2. 問題が発生しているコード箇所(例:config.pyの12行目)。
3. 修正案として「シークレットを無効化し、環境変数で管理することを推奨」が表示されます。 - 対応方法
1. アラート内容を確認し、該当のシークレットを削除または無効化します。
2. 修正済みと判断した場合は、アラートを「解決済み」にマークすることも可能です。
GitHub Advanced Securityの料金
プラン詳細は以下のとおりです。
※GitHub Advanced Securityの利用には、GitHub Enterprise CloudまたはGitHub Enterprise Serverのライセンスが必要です。
【料金】
アクティブコントリビューター あたり$49 USD/月
(アクティブコントリビューターとは、一定期間内にリポジトリに対してコードのプッシュ・プルリクエストの作成・イシューの作成などを行ったユーザーのことを指します。)
【対象リポジトリ】
パブリックリポジトリ、プライベートリポジトリどちらの利用も可能
【利用可能な機能】
- コードスキャンとシークレットスキャンは、パブリックおよびプライベートリポジトリで利用することができます。
- 管理機能により、セキュリティのインサイト取得や複数リポジトリでの一括管理が可能です。
※本記事に記載されている情報や料金は、2024年12月時点のものです。変動する可能性があるため、最新の情報については、GitHubの公式ページで確認してください。
GitHub Advanced Securityの活用場面
GHASは、開発プロセス全体のセキュリティを強化するために、多くの場面で活用することができます。ここでは、その具体的な利用シーンをご紹介します。
ソフトウェア開発チームのセキュリティ強化
例えば、IT企業でWebアプリケーションを開発しているチームでは、開発者がコードをプッシュするたびにコードスキャンを実行し、脆弱性を早期に検出することができます。
またシークレットスキャンを利用すれば、誤って公開されたAPIキーやデータベースの認証情報を発見し、事故を未然に防ぐことも可能です。
エンタープライズ環境でのセキュリティ管理
大規模なIT企業で、数十から数百のプライベートリポジトリを管理している場合、GHASを使うことで、全リポジトリを一括でスキャンし、どのリポジトリにリスクがあるのかを可視化できます。
サプライチェーン攻撃の防止
Eコマースプラットフォームを運営する企業では、多くの外部ライブラリを利用することが一般的です。
依存関係スキャンやDependabotを活用すれば、古いバージョンに存在する脆弱性が自動で通知され、修正版への更新プルリクエストが生成されます。
そのため安全性を確保しつつ、サプライチェーン攻撃を未然に防ぐことができます。
まとめ
本記事では、GitHub Advanced Security(GHAS)が提供する主要な機能や利点、導入手順や活用場面について解説しました。
GHASはGitHubが提供する強力なセキュリティツール群で、コードの安全性を高めるために設計されています。コードスキャンやシークレットスキャンをはじめ、サプライチェーンセキュリティやCopilot Autofixといった高度な機能を通じて、開発者がセキュリティ脆弱性を早期に発見し、迅速に修正することをサポートします。開発プロセスに統合されているので、開発効率を損なうことなくセキュリティを強化することができるでしょう。
ぜひセキュリティ強化を検討している場合は、GHASを導入し、その効果を実感してみてください。