GitHub の Security Scanning をアカウントレベルで有効化しておくと嬉しいかも、という話

記事タイトルとURLをコピーする

セキュリティな小ネタです。

AWS のアクセスキーなどをうっかりソースコードから漏洩しないように git-secrets のようなツールを設定されている方も多いと思います。

GitHub - awslabs/git-secrets: Prevents you from committing secrets and credentials into git repositories

GitHub でもこれに近い機能を提供しています。

docs.github.com

これ、アカウント単位のポリシーとして設定可能な項目であることを最近知りました。恥ずかしながらこの機能自体も私はきちんと利用していたわけではなかったので、共有したいと思います。

サマリ

シークレットと思しき情報の検知と、GitHub への push の抑制をすることができます。

Push protection は Access key と Secret access key が含まれた内容で push しようとすると GitHub からブロックされる、という機能のようです。

水際対策としては設定工数ほぼゼロで打てる手ですので、入れない手はないかなと思います。

対応しているシークレットの種類に関しては以下のドキュメントを参照ください。

docs.github.com

また、私が加入しているのは個人の Pro プランですが、対象レポジトリは Public のみとなります。

プライベートレポジトリも対象にしたい場合は Enterprise プランに入る必要があるようです。プランによる詳細な差異は上記ページの冒頭部か、あるいはプランの比較表のページをご確認ください。

https://github.co.jp/pricing.html

設定方法

設定画面の "Security" セクションにある "Code security and analysis" を開いてください。

下部に "Secret scanning" という項目があるので、これを有効化しましょう。

fig: GitHub Configuration

確認したこと

以下のようなことを行いました。

  1. 実験用のレポジトリを作成
  2. すべての権限を明示的 Deny した IAM User を作成し、アクセスキーを作成(念のため MFA も有効化)
  3. 実験用レポジトリに commit & push

手順3 で試した内容は次の通りです。

(1) ダミーの Access key を commit & push

以下の AWS ドキュメントに記載されたダミーのアクセスキーを commit, push します

Managing access keys for IAM users - AWS Identity and Access Management

Access keys consist of two parts: an access key ID (for example,AKIAIOSFODNN7EXAMPLE) and a secret access key (for example,wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY). You must use both the access key ID and secret access key together to authenticate your requests.

(2) 実在する IAM User の Access key を commit & push

手順2 で作成した IAM User のアクセスキーを commit, push します。

(3) 前手順で push した Access key に対応する Secret Access key を commit & push

手順2 で作成した IAM User のシークレットアクセスキーを commit, push します。

結果

(1) ダミーの Access key を commit & push

問題なく push まで到達。

(2) 実在する IAM User の Access key を commit & push

問題なく push まで到達。

ここは少し意外でした。てっきり単独で検知してくれるものかと思いましたが...。

(3) 前手順で push した Access key に対応する Secret access key を commit & push

Push がブロックされた。

fig: Blocked push

スクショのように、Access key / Secret access key の 2 つが検出され、ブロックしたというメッセージが出ます。

上記の画像ではマスクしていますが、検知対象となった Access key / Secret access key の ファイル名:行数 が表示されまています。これを見る限り Access key 自体も検出自体はされているようですが、実際に push がブロックされたのは Secret access key を push しようとしたタイミングでした。

このあたりは push のブロック機能の仕様なのか、あるいは検知精度の問題なのか、詳細は現時点で不明です。

個人的には Access key を push しようとしたタイミングで弾いてくれる挙動を期待していたのでその点が少々残念ではありますが、とはいえ秒で終わる作業に対して得られるリターンとしては十分にありがたい存在と思います。

まとめ

秒で終わる作業なので、git と GitHub に触れる機会がある方は全員やっておいて損のない設定だと思います。やりましょう。