GitHub Advanced Security を有効にする
既知の脆弱性からコード ベースを保護することやシークレットの漏洩を防止することは、リポジトリ設定でオプションをいくつかクリックするだけの簡単な操作で実行できます。このガイドを終了した時点で、お客様は自身のサンプル リポジトリで GitHub Advanced Security (GHAS) を実行させており、それを独自のリポジトリ上で有効化する準備ができています。
学習をスムーズに進められるよう、TELUS が GitHub Advanced Security の使用から得たインサイトを同社にいくつか紹介してもらいます。
このガイドの学習内容
リポジトリ レベルで GitHub Advanced Security を有効にする方法 (コード スキャン、CodeQL、依存関係レビュー、シークレット スキャンを含む)
GHAS は開発生産性を妨げることなく、どのようにしてコードを保護するのか
1. テスト リポジトリを設定する。
まだ GitHub Advanced Security を有効にしていない場合は、これを有効にして Juice Shop リポジトリを組織にフォークします。
リポジトリ名の下にある [GitHub Actions] をクリックします。[GitHub Actions] タブが表示されない場合は、[...] ドロップダウン メニューを選択し、[GitHub Actions] をクリックします。
[ワークフローについて理解したので、ワークフローを有効にします] というボタンをクリックします。
2. GitHub Advanced Security を有効にする。
Juice Shop リポジトリの GitHub.com ページで、リポジトリ名の下にある [設定] をクリックします。[設定] タブが見つからない場合は、[…] ドロップダウン メニューを選択し、[設定] をクリックします。
サイドバーの [セキュリティ] セクションで、[コードのセキュリティと分析] をクリックします。
[GitHub Advanced Security] までページを下にスクロールし、[有効にする] をクリックします。[無効] と表示される場合は、GHAS がリポジトリに対してすでに有効になっていることを意味します。
2. シークレットスキャンを有効にする。
ページを下にスクロールし、シークレット スキャンに対して [有効にする] をクリックします。[無効] と表示される場合は、シークレット スキャンがリポジトリに対してすでに有効になっていることを意味します。
[プッシュ保護] というラベルの付いた新しいサブセクションが [シークレット スキャン] の下に表示されます。[有効にする] をクリックします。
Dependabot、CodeQL、シークレット スキャン、いずれも優れた機能ですが、組織全体でそれらをデフォルトで有効にする方法はありません。私もそのように考えていました。しかし、当社では計画に 1 日もかけずに、TELUS 全体でプッシュ保護によるシークレット スキャンを有効にすることができました。CodeQL と Dependabot も全社的に有効にしています。
これらのツールを会社全体に採用できた理由は簡単です。開発者がコードをコミットするのが妨げられることがなく、教育やトレーニングも必要ないためです。これらのサービスをオンにすると、バックグラウンドで自動的に実行されます。開発者にサービスをオンにするよう社内で啓蒙活動を行ったり、使用方法を説明したりする必要はありません。脆弱性やシークレットのないコードをプッシュする場合は、何も変わりません。
問題が検出された場合でも、GitHub が次に何をすべきかを説明してくれます。安全でない可能性のある作業を実行しようとすると、警告は表示されますがブロックはされません。サンプル コードの一部として無効なトークンをコミットする必要がある場合は、コミットできます。有効なキーを非公開のリポジトリにコミットし、後で削除しなければならない理由がある場合は、そのような操作を行うことができます。
ブロックされないと言っても、説明責任がないという意味ではありません。例えば、[後で修正する] オプションを指定してシークレットをコミットした場合、GitHub は Organization のオーナーやセキュリティ マネージャー、リポジトリ管理者に警告を発します。これにより、重要なセキュリティ上の意思決定を監視する目が増え、問題が実際に修正されるようになります。
これらの機能をオフにするのも、オンにするのと同じくらい簡単です。組織全体でプッシュ保護を有効にし、問題が発生した場合は、オフにすればよいだけです。
3. CodeQL を有効にする。
注意: このリポジトリはフォークであるため、CodeQL を有効にする前に GitHub Actions を有効にする必要があります。Juice Shop リポジトリの GitHub.com ページで、リポジトリ名の下にある [GitHub Actions] をクリックします。[GitHub Actions] タブが見つからない場合は、[…] ドロップダウン メニューを選択し、[GitHub Actions] をクリックします。[ワークフローについて理解したので、ワークフローを有効にします] をクリックします。
これは、シークレット スキャンを有効にするプロセスとほとんど同じです。
Juice Shop リポジトリの GitHub.com ページで、リポジトリ名の下にある [設定] をクリックします。[設定] タブが見つからない場合は、[…] ドロップダウン メニューを選択し、[設定] をクリックします。
サイドバーの [セキュリティ] セクションで、[コードのセキュリティと分析] をクリックします。
[コード スキャン] セクションで、[設定] を選択します。[デフォルト] または [詳細設定] の選択肢が表示されます。[デフォルト] を選択します。[詳細設定] については今後のガイドで取り上げます。
次に、実行される言語やクエリなど、デフォルト設定で自動的に作成される構成を要約した [CodeQL のデフォルト構成] ダイアログが表示されます。ここでは設定をそのままにしておきます。デフォルトのクエリ スイートは、最適で最も正確なクエリを含むように厳選されており、コードを安全に保ちながら、ほとんど偽陽性が発生しません。これらの設定のカスタマイズについては、今後のガイドで説明します。
[CodeQL を有効にする] をクリックします。
これでリポジトリの静的分析が有効になります。この最初のスキャンは実行に時間がかかるため、結果は次のガイドで調べます。ここでは次のステップに進みましょう。
4. サプライ チェーン セキュリティ機能を有効にする。
依存関係のレビューはデフォルトで有効になっており、オフにすることはできませんが、Dependabot と依存関係グラフが有効になっていることを確認しましょう。Juice Shop リポジトリの GitHub.com ページで、リポジトリ名の下にある [設定] をクリックします。[設定] タブが見つからない場合は、[…] ドロップダウン メニューを選択し、[設定] をクリックします。
サイドバーの [セキュリティ] セクションで、[コードのセキュリティと分析] をクリックします。
[コードのセキュリティと分析] で、[依存関係グラフ] と [Dependabot アラート] の横にある [有効にする] をクリックします。ここではデフォルトをそのまま使用しましょう。
中級モジュールで依存関係レビューの構成を行います。
次の項目: GitHub Advanced Security スキャン結果をレビューする
これで完了です。わずか数クリックで GitHub Advanced Security がポジトリを保護するようになりました。
次に、CodeQL スキャンの結果を確認し、シークレット スキャンとサプライ チェーン セキュリティの両方をテストします。