SecurityはCoroid上のGitHubアプリを通じて動作します。このページでは、Securityに必要なアプリの権限と、Coroid Securityチェックの報告内容、GitHubでこのチェックを必須とする方法、およびGitHub自身のセキュリティアラートがSecurityに表示される仕組みについて説明します。
権限
Securityは、リポジトリに対する既存のアプリ権限を利用します。具体的にはコードやプルリクエストの読み取り権限、チェックの書き込み権限です。これらはオプションであり、それぞれで提供される機能は以下の通りです:
| 権限 | 追加される機能 | 権限がない場合 |
|---|---|---|
| マージキュー:読み取り専用で、マージグループイベントが利用可能 | Coroid Securityマージキューのコミットに対して | マージキューでは結果が得られませんCoroid Security結果 |
| Dependabotアラート:読み取り専用で、対応するイベントが利用可能 | Dependabotアラートをインポート | インポートされない |
| コードスキャンアラート:読み取り専用で、対応するイベントが利用可能 | GitHubのコードスキャンアラートをインポート | インポートされない |
| シークレットスキャンアラート:読み取り専用で、対応するイベントが利用可能 | GitHubのシークレットスキャンアラートをインポートしますが、シークレット値は含まれません | インポートされない |
アプリが新しい権限を要求する場合、GitHubは組織のオーナーにインストール時の承認を求めます。承認されるまで、Securityの概要画面には権限が不足しているリポジトリが表示され、GitHub上のインストールページへのリンクも示されます。
Coroidはまた、各リポジトリがパブリックかプライベートかを、GitHubのイベント情報やGitHubへの照会を通じて把握し、そこで公開可能な内容を判断します。詳細は開示。
Coroidのセキュリティチェック
Coroid Securityこのチェックは単一の名前を持つ1つのチェックであり、単独で実行される場合も品質管理内のプロジェクトデリバリーグラフの一部として実行される場合もあり、リポジトリで一度だけ必須とすることができます。このチェックは変更を検知する保護機能、すなわち脆弱な依存関係と漏洩したシークレットの有無を報告します。両者のうちより深刻な方が最終的な結果となります。コードスキャンの結果は品質管理のチェックを通じて、セキュリティレビューはCoroidのレビューチェックを通じて報告されます。
このチェックは、アプリを介して接続されたGitHubのリポジトリで実行されます:
- pull requestが開かれた、再開された、更新された、またはレビュー準備完了とマークされたとき
- マージキューコミットごとに、マージキューの権限が付与されている場合
- GitHub上で誰かがこのチェックを再実行したとき
イベントが発生するとすぐに実行中と表示されます。詳細を確認するためのリンクをクリックすると、Security内のプロジェクトページが開きます。
報告内容
| ステータス | 適用済み | 監視のみ |
|---|---|---|
| 変更の完全なカバー範囲で、閾値以上の問題が存在しない | 成功 | 成功 |
| 閾値以上の問題が検出された | 失敗 | 中立で、その理由が記載されています |
| スキャンが失敗した、または実行できなかった、変更が対象とするファイルのカバー範囲が不十分だった、構成情報を読み取れなかった | 失敗で、その理由と再実行方法が記載されています | 中立で、その理由が記載されています |
| 10分以内に結果が得られなかった | 失敗で、「タイムアウト」と表示されます | 中立 |
| プロジェクトに対するすべての保護機能が無効になっている | 中立 | 中立 |
このチェックが「スキップ」されることはありません。GitHubでは、スキップされた必須チェックを合格とみなすため、実行されなかった適用済みの保護機能も合格と判定されます。必須のチェックは常に上記のいずれかの結果となり、マージキューが無期限に待機することはありません。
このチェックは、変更によって新たに導入される部分のみを対象とし、ベースブランチに既に存在する問題は対象外です。報告テキストには非公開の問題は記載されず、検出された問題の数、閾値、および詳細はCoroidで確認できることが記載されます。
Coroidのセキュリティチェックを必須とする
保護機能を適用するとチェックが失敗します。リポジトリでこのチェックを必須とする場合に限り、GitHubはマージをブロックします:
- ブランチ保護リポジトリの設定→ブランチでデフォルトブランチのルールを編集し、「マージ前にステータスチェックを合格させる」を有効にしてマージ前にステータスチェックを合格させるを追加し、
Coroid Security。 - ルールセット設定→ルール→ルールセットで、デフォルトブランチのルールセットにステータスチェックを合格させるを追加し、
Coroid SecurityCoroidのGitHubアプリをソースとして選択します。 - マージキュー同じルールでこのチェックを必須とします。チェックがマージキューコミットで実行されるよう、アプリにマージキューの権限が付与されている必要があります。
適用したい保護策が有効化された時点で、これを必須に設定してください。観察のみを行うチェック項目でも、引き続き通過します。
GitHubセキュリティアラート
「GitHubセキュリティアラートセキュリティ→設定でこれを有効にし、上記の権限を付与すると、セキュリティ機能はDependabot、コードスキャン、シークレットスキャンのアラートを、Coroid自身が生成する検知結果と同じ形で観察データとしてインポートします。新しいアラートはGitHubから送信されるとすぐに届き、Coroidは1日1回各リポジトリのアラートを再度読み込みます。
- インポート済み、未確認Coroid自身のスキャンでまだ確認されていないアラートには、「GitHubからインポート済み、まだ未確認」と表示されます。このアラートは一覧に掲載され、カウント対象となりますが、Coroidのスキャンで確認されるまで通知もブロックも行われません。
- ソース間で情報が一致しないGitHubとCoroidで検知結果が異なる場合、その旨が記載され、各ソースの状態(存在する、消えた、却下された、読み取れなかった)が表示されます。
- 各ソースごとに閉じる条件が異なるGitHub上で、デフォルトブランチに脆弱なバージョンが存在しなくなるとDependabotアラートは解決されます。コードスキャンアラートは、デフォルトブランチの分析で該当する問題が報告されなくなると解決されます。一方、シークレットスキャンアラートは、GitHub上で誰かが対処するまで開いたままとなり、修正内容をマージしても閉じられません。
- 権限を失ったアプリが権限を失った場合や、GitHubで機能が無効化された場合、そのソースのみが報告していた検知結果には「その時点以降はステータス不明」と表示され、どのアラートも閉じられません。
概要画面では、リポジトリごと・ソースごとに、アラートが既読か、権限が欠落しているか、GitHubで機能が無効化されているか、またはリポジトリにアクセスできないかが表示されます。