はじめに
GitHubなどのリモートリポジトリにAWSのアクセスキーやシークレットキーが誤って含まれてしまうと、AWSアカウントの不正アクセスや情報漏洩につながります。
その対策として git-secrets があります。
git-secrets 自体は有名ですが、インストールと動作確認の記事が多く、push時の自動チェックまで行う記事は少ないため備忘と設定方法の解説のために残します。
この記事では、git-secrets を使って push時にAWSキーを検出し、漏洩を防ぐまでの手順を解説します。
git-secrets のインストール
まずは git-secrets をローカル環境にインストールします。
ほかの記事やAWS公式のドキュメントでも解説があるので導入済みの方は読み飛ばして問題ありません。
環境はWindowsのためWindows用のコマンドで書いています。
git clone https://github.com/awslabs/git-secrets.git
cd git-secrets
./install.ps1
最後のps1の実行は、Unix環境であればmake install,macOSであればbrew install git-secretsです。
インストール後は、git secrets コマンドが使えるようになります。
レポジトリでのgit-secretsの設定
cd <git レポジトリのパス>
git secrets --register-aws
OKが戻ってくれば、レポジトリへのアクセスキーのチェック設定ができました。
任意でカスタムルールが設定できますが、デフォルトの設定で進めます。
このままgit secrets --scanなどでチェックが行えますが、手動でのチェックとなるため、このチェックを自動で行うようにしたいです。
タイミングとしてはgitのpushするタイミングでアクセスキーのチェックを行い、もしアクセスキーがあればpush操作を失敗させるようにします。
フック設定の追加
git-secretsをpush前にチェックするには、pre-pushフックを設定します。
フックの設定は特定の操作時にカスタムスクリプトを叩くことができます。
フックファイル作成
.git/hooks/pre-push に以下の内容を記述します。
pre-pushは拡張子をつけないようにすることとWindows環境であれば文字コードがLFであることを注意します。
#!/bin/sh
git secrets --scan || exit 1
実行権限を付与
chmod 755 .git/hooks/pre-push
フック処理はカスタムスクリプトを実行し、エラーが発生した場合、pushを行いません。
そのため、コマンドが実行できなかった場合などのために|| exit 1を加えています。
git secrets --scan-historyなどで過去のコミットも確認可能です。
設定としては以上です。
最後に動作確認です。
テスト
aws_access_key_id = AKIA1234567890EXAMPLEなどの文字列を含むファイルを作成し、pushを実行します。
[ERROR] Matched one or more prohibited patterns
[省略]
error: failed to push some refs to 'https://github.com/xxx'
上記のようにpush時にhookしたスクリプトからアクセスキーを検知し、pushが失敗するようになっています。
最後に
アクセスキーの流出はインパクトが大きいため、プロジェクトの早い段階で設定しておき、また、自動でアクセスキーのpushを防いでいくことが重要です。
AIエージェントなどで意図せずアクセスキーをgitに上げてしまうケースも考えられるため、事故防止の意味でもおすすめです。