Gitリポジトリに誤ってAWSアクセスキーなどをコミットしないようにgit-secretsを導入
はじめに
サービスの事項環境として AWS を利用していた場合に特に気をつけなければ行けないのが、AWS のアクセスキーのような「API キー」の類をコミットしてしまうことです。
コードに記述しないように気をつけていたとしても、ひょんな事でコミットしてしまうことがあります。
このようなミスに気付けるように git-secrets を導入してみましょう。
検証環境
git-secrets とは
git-secrets は、「API キー」だけでなく、パスワードやその他のセンシティブ情報のコミットを防ぐためのツールです。
Git リポジトリに秘匿情報が含まれないように、次のものを監視します。
- コミット
- コミットメッセージ
--no-ff
マージ
上記のいずれかに秘匿情報が含まれていた場合には、 コミットが拒否されるようにできます。
git commit
のタイミングでチェックが実行されるということです 。
インストール
PATH
環境変数に設定されているいずれかのディレクトリ ( echo "$PATH" | sed 's/:/\n/g'
で確認できる ) に配置しておきましょう。
Mac OS 環境で Homebrew が使える場合はかんたんにインストールできます。
Linux 環境では make
を利用します。
それ以外の環境へのインストール方法もドキュメントに掲載してくれています。
使い方
※インストールしたばかりですが、ここから注意が必要です 。
※インストールしたばかりですが git-secrets
はリポジトリのコミットを監視してくれません 。
すでに git clone
済みのローカルリポジトリに対しては、次のコマンドを実行し git-secrets を有効にする必要があります。
git secrets --install
git secrets --install
を実行すると、 .git/hooks
ディレクトリ配下に 3 つのスクリプトが作成されます。
中身を見るとわかりますが、 git secrets
コマンドを実行しています。
git secrets --register-aws
git secrets --register-aws
を実行すると、 .git/config
に設定が追加されます。
secrets
セクションが追加された設定になります。
git-secrets
は patterns
として設定された正規表現にマッチしたものをセキュア情報として認識し、警告します。
git secrets --register-aws
は patterns
として AWS に関するアクセスキーやアカウント ID などを検出する正規表現を追加します。
ただし、 alloed
に設定された文字列は例外としてチェック対象外となります 。
動作確認
動作を確認してみます。
セキュアな情報を含んだファイルをコミットしてみます。
エラーが発生し、 git commit
が失敗しました。
チェック対象外のパターンを追加する
ケースは少ないです、どうしてもチェックの対象から除外したい文字列があった場合には、2 つの方法で実現できます。
1. .git/config
に allowed
を追加する
.git/config
に allowed
を追記します。
先程コミット失敗したファイルをコミットできるようになります。
正規表現が利用できるため、より簡潔に記述できます。
今度は git-secrets
を使って .git/config
に対象外パターンを追加してみます。
2. .gitallowed
に allowed
を追加する
チームメンバーで共有する場合は、 .gitallowed
というファイルを作成し Git リポジトリ上で管理すると良いでしょう。
過去のコミット履歴を検査する
git-secrets
導入前のコミットに対してもスキャンを実行したい場合、 git secrets --scan-history
コマンドを使うことができます。
git secrets --register-aws
を PC 内の全 Git リポジトリに適用
git secrets --register-aws
を各 Git リポジトリで実行するのは面倒です。
git secrets --register-aws
コマンドは .git/config
ファイルに [secrets]
セクションを追加します。.git/config
ではなく ~/.gitconfig
に設定できれば PC 内の全 Git リポジトリに対する patterns
設定を適用できます。
エディタで編集しても良いですが、 git secrets --register-aws --global
コマンドを実行することで ~/.gitconfig
に設定が追加されます。
git secrets --install
を git init
実行時に適用
ローカルの Git リポジトリ内で git secrets --install
コマンドを実行することで、 .git/hooks
にスクリプトが作成されました。
すでに存在しているローカル Git リポジトリに対しては面倒ですが git secrets --install
する必要があります。
けれども今後 git clone
または git init
した Git リポジトリに自動的に .git/hooks
が作成されるようにしておくことができます。
( おまけ ) git-secrets が正しく動作しない場合
僕の PC 環境では、以前は問題なく利用できていたのですが、 2023-01-31 現在正しく動作していませんでした。
今回のエントリをまとめているときに正しく動作していないことに気が付きました 。
git-secrets
実行スクリプトのコードを解析してみました。
内部で git grep
コマンドを実行していましたが、 -E
オプションを指定しています。-E
オプション付きで grep
コマンドを実行した場合、 正規表現内でスペース全般(タブ、空白、改行)を表す \s
が使えません。
かわりに [[:space::]]
という表現が使えます。
加えて、 \\-
の表現に問題があるようで、 \\
を除去し -
とします。
そこで git secrets --register-aws
で生成された .git/config
( --global
オプション付きの場合は ~/.gitconfig
) ファイルの内容を書き換えます。
ひとこと
以前は正常に動いていた気がしていたのですが、勘違いでしょうか?
ディスカッション
コメント一覧
まだ、コメントがありません