セキュリティな小ネタです。
AWS のアクセスキーなどをうっかりソースコードから漏洩しないように git-secrets のようなツールを設定されている方も多いと思います。
GitHub でもこれに近い機能を提供しています。
これ、アカウント単位のポリシーとして設定可能な項目であることを最近知りました。恥ずかしながらこの機能自体も私はきちんと利用していたわけではなかったので、共有したいと思います。
サマリ
シークレットと思しき情報の検知と、GitHub への push の抑制をすることができます。
Push protection は Access key と Secret access key が含まれた内容で push しようとすると GitHub からブロックされる、という機能のようです。
水際対策としては設定工数ほぼゼロで打てる手ですので、入れない手はないかなと思います。
対応しているシークレットの種類に関しては以下のドキュメントを参照ください。
また、私が加入しているのは個人の Pro プランですが、対象レポジトリは Public のみとなります。
プライベートレポジトリも対象にしたい場合は Enterprise プランに入る必要があるようです。プランによる詳細な差異は上記ページの冒頭部か、あるいはプランの比較表のページをご確認ください。
https://github.co.jp/pricing.html
設定方法
設定画面の "Security" セクションにある "Code security and analysis" を開いてください。
下部に "Secret scanning" という項目があるので、これを有効化しましょう。
確認したこと
以下のようなことを行いました。
- 実験用のレポジトリを作成
- すべての権限を明示的 Deny した IAM User を作成し、アクセスキーを作成(念のため MFA も有効化)
- 実験用レポジトリに commit & push
手順3 で試した内容は次の通りです。
(1) ダミーの Access key を commit & push
以下の AWS ドキュメントに記載されたダミーのアクセスキーを commit, push します
Manage 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 がブロックされた。
スクショのように、Access key / Secret access key の 2 つが検出され、ブロックしたというメッセージが出ます。
上記の画像ではマスクしていますが、検知対象となった Access key / Secret access key の ファイル名:行数
が表示されまています。これを見る限り Access key 自体も検出自体はされているようですが、実際に push がブロックされたのは Secret access key を push しようとしたタイミングでした。
このあたりは push のブロック機能の仕様なのか、あるいは検知精度の問題なのか、詳細は現時点で不明です。
個人的には Access key を push しようとしたタイミングで弾いてくれる挙動を期待していたのでその点が少々残念ではありますが、とはいえ秒で終わる作業に対して得られるリターンとしては十分にありがたい存在と思います。
まとめ
秒で終わる作業なので、git と GitHub に触れる機会がある方は全員やっておいて損のない設定だと思います。やりましょう。