以前 GitHub Advance Security (略して GHAS) について概要をまとめました。
今回は GHAS の機能のひとつである Secret scanning にフォーカスしたメモです。
- Secret Scanning の概要
- Secret Scanning を有効にするには
- Secret scanning のアラートの確認方法
- Secret scanning alerts の閲覧権限と通知の設定
- 参考
Secret Scanning の概要
概要としてさらっとおさえておきたいポイント点はこれくらいでしょうか。
- コードを GitHub の repo に push した際にシークレットが含まれていないかをスキャンし、シークレットを検知したらアラートを出してくれる
- Secret Scanning を無効から有効にしたタイミングでもスキャンが実行される。
- 全てのブランチの全 Git 履歴が対象。
- GitHub 及び GitHub パートナーが提供しているシークレットのパターンをスキャンしてくれる。
- public の repo では誰でも無償で利用が可能。
- GitHub Advanced Security の機能のひとつで、Organization の private / internal の repo で利用するには契約が必要。
- 個人アカウントの private repo では利用できない。
- 契約して有料で使うと、無償で利用できる機能に追加して カスタムパターンを定義できるようになる。
Secret Scanning を有効にするには
public repo の場合
デフォルトで有効になっており、無効にすることができません。
個人アカウントの repo ではメニューにも存在しません。
Organization の repository だと Settings → Security & analysis にメニューがありますが、Secret scanning を無効化するボタンが無効化された状態になっています。
private / internal
前述してますが GitHub Advanced Security の機能の一部なので GitHub と契約しないと使えない機能です。
契約して利用可能な状態だと、repository の Settings → Security & analysis で有効化できます。GitHub Advanced Security の Enable を押すことで、さらに Secret scanning を Enable にすることができます。
また、Organization の Settings では、 private repo で自動的に有効にするって制御もあります。
余談ですが、カスタムパターンの定義は、ドキュメントでは Organization or enterprise account ごとに 100、private repo ごとに 20 定義できると書いてますが、GitHub のメニューでは Organization or enterprise accountで 500、repo で 100 できるって書かれているようにみえます。
Secret scanning のアラートの確認方法
GitHub Enterprise Cloud でアラートの確認方法や、権限設定・通知設定を見ていきます。
アラートをとばしてみる
試しに Azure の storage の接続文字列を書いたコードを置いてみると、私の場合1分くらい?気づいた時にはこんなメールが飛んできました。
アラートのメールは、デフォルトで Organization の owner 、repository の Admin にメールが飛びます。また、ユーザーを追加することも可能ですが、それについては、次の「Secret scanning alerts 画面での確認」で触れます。
アラートが飛ぶのと合わせて Secret scanning alerts 画面で詳細が確認できます。
Secret scanning alert を見る
Secret scanning alert 画面を見るには権限が無いみれないですが...権限に関することが長くなったので後の方で書いてます。
repository の Security タブ → Secret scanning alert からアラートの詳細を確認できます。ファイルを更新した瞬間くらいで表示されました。
テーブルに表示されたアラートをクリックすると、どのファイルのどこに secret が検知されたかや推奨のアクションが表示されます。これは issue みたいな扱いで Open か close かって状態を持っているので、必要な対応をして右上の Close as から理由を選択して close する流れになります。
Secret scanning alerts の閲覧権限と通知の設定
閲覧権限の設定
repository の Security タブ にある Dependabot と Secret scanning alerts はデフォルトでは、Organization の Owner または repo の Owner しか閲覧できません。
閲覧できるようにするには、主に2つの方法があります。
- ユーザーまたは Team を Access to alerts から追加する
- Security manager role に割り当てる
それぞれの設定方法をみていきましょう。
ユーザーまたは Team を Access to alerts から追加する
主に開発者向けの設定方法で、ユーザーや Team に特定の repo の Access to alerts 権限を付与するときに使うイメージです。
設定方法は、Organization の Settings → Security & analysis の下の方にある Access to alerts からユーザーまたは team を追加することで閲覧権限を付与できます。
Security manager role に割り当てる
Organization のすべての repo を見るセキュリティ担当者向けの設定ってイメージです。
Team に Security manager という専用の role を与える機能で Secret scanning alerts も見れるようになります。現時点では Organization のすべての repo に read 権限が付与され Secret scanning alerts も見えるようになります。ほかにも権限が付きますが、public beta 中 = いつどう変わるかの可能性もあるので付与される権限については以下のドキュメントを確認しましょう。
設定方法は、Organization の Settings → Security & Analysis を開くと下の方に Security managers セクションがあります。ここから Team を追加し、あとは Team にメンバーを追加してあげれば OK です。
余談として、この機能を見た瞬間は Billing manger みたく license seat を消費しないメンバーかなーと思ったら普通に license seat を消費するアカウントでした。まぁ (現時点の仕様だと) repo 全部みえる権限を付与されるから license seat を消費するかって感じではありましたが。
通知の設定
前述のように設定しておけば GitHub から通知を出すユーザーが設定されますが、通知を受け取れるようになっているかはユーザーごとの設定次第になります。
通意外とハマりポイントな気もする通知を受け取る設定も書いておきます。
2つのポイントがあります。
- ユーザーの Notification 設定
- Repo での Watching (Notification) の設定
ユーザーの Notification 設定
GitHub の右上にある自分のアバターアイコンをクリック → Settings をクリックします。
左側の Notifications をクリックすると各種のアラートの通知設定ができますので、ここで通知の設定をしておきます。Secret scanning の通知は、Watching の一部なので、Watching の通知を Email や Web and Mobile にチェックを入れておくことで通知を受け取れるように設定します。
Repo での Watching (Notification) の設定
Watching 自体は repo 毎の設定で Watching するしないの設定もあります。通知がこないときは repo の右上にある Notification から All activity にしておくとか、もしくは今年に機能追加された Custom で Security alerts を選択した状態にしておきます。