自動化されたセキュリティ
ここでは、GitHub リポジトリ管理者がリポジトリのセキュリティ チェックの自動化に利用できるいくつかの方法について説明します。
セキュリティが脆弱な古い依存関係を検出して修正する
最近では、ほとんどすべてのプロジェクトが外部パッケージに依存しています。 これらのコンポーネントによって生産性が大きく向上する可能性がありますが、他のセキュリティ リスクが発生する場合があります。 これらのパッケージとその脆弱性の状態を常に把握するのは、特に、各依存関係に追跡と保守が困難になり得る独自の依存関係があることを考えると、時間がかかる可能性があります。 幸い、GitHub では、このワークロードを減らす機能が提供されています。
リポジトリの依存関係グラフ
各リポジトリが持つ既定の機能の 1 つに、依存関係グラフがあります。 GitHub では、package.json
や requirements.txt
などの一般的なパッケージ マニフェストがスキャンされます。 これらのグラフを使用すると、プロジェクト所有者は、プロジェクトが依存するすべての依存関係を再帰的に追跡できます。
サポートされている依存関係マニフェストの一覧については、「依存関係グラフについて」を参照してください。
Dependabot アラート
依存関係の視覚化グラフを使用していても、プロジェクトが持つすべての依存関係に関する最新のセキュリティ上の考慮事項を常に掌握することは非常に困難な場合があります。 このオーバーヘッドを減らすために、GitHub では自動的に依存関係グラフを監視する Dependabot アラートが提供されています。 その後、ターゲット バージョンが、既知の脆弱性一覧にあるバージョンと相互参照されます。 リスクが検出されると、プロジェクトに対してアラートが示されます。 分析のための入力は、GitHub Security Advisories から提供されます。
Dependabot による自動依存関係の更新
依存関係アラートが示されると、プロジェクトの共同作成者は問題のあるパッケージ参照を推奨されるバージョンに繰り上げ、確認のために pull request を作成することになります。 この作業を自動化する方法があったらすばらしいと思いませんか? そこで朗報です。 Dependabot は、まさにそれを行います。 依存関係アラートをスキャンし、pull request を作成して、共同作成者が更新を確認して要求をマージできるようにします。
Dependabot の柔軟性の詳細については、「Dependabot セキュリティ アップデートの構成」を参照してください。
自動コード スキャン
Dependabot によって依存関係アラートに関してリポジトリがスキャンされる方法と同じように、コード スキャンを使用して、GitHub リポジトリ内のコードのセキュリティの脆弱性やエラーを分析し、検出することができます。 コード スキャンには、いくつかの利点があります。 これを使用すると、既存の問題や潜在的なセキュリティの脆弱性に対する修正プログラムの検索、トリアージ、優先順位付けを行うことができます。 また、開発者が新しいセキュリティの問題をコードに組み込んでしまうことを防ぐのにも役立ちます。
コード スキャンのもう 1 つの利点は、CodeQL を使用できることです。 CodeQL を使用すると、コードをデータとしてクエリを実行でき、カスタム クエリを作成したり、オープンソース コミュニティによって管理されるクエリを使用したりできます。 コード スキャンを使用すると、リポジトリ内のコードのスキャン方法を自由にカスタマイズして管理できます。
GitHub リポジトリのセキュリティ タブで、コード スキャンのアラートとワークフローを有効にすることができます。
コード スキャンと CodeQL の詳細について確認してください。
シークレット スキャン
GitHub リポジトリ内のもう 1 つの自動スキャン機能は、シークレット スキャンです。 以前のセキュリティ スキャン機能と同様に、シークレット スキャンを使用するとリポジトリ内でコミットされた既知のシークレットまたは資格情報を検索できます。 このスキャンは、不正な動作の使用の阻止、および機密データの整合性の保護のために行われます。 既定では、シークレット スキャンはパブリック リポジトリ上で行われ、リポジトリ管理者または組織の所有者はシークレット スキャンをプライベート リポジトリ上で有効にすることができます。
シークレット スキャンによって資格情報が検出されると、シークレットを発行したサービス プロバイダーに GitHub から通知されます。 サービス プロバイダーが資格情報を検証します。 次に、シークレットを取り消すか、新しいシークレットを発行するか、直接連絡するかを決定します。 このアクションは、ユーザーまたはサービス プロバイダーに関連付けられているリスクによって異なります。
パブリックおよびプライベート リポジトリのシークレット スキャンの詳細について確認してください。