tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【git】git-secrets: 誤ってsecret, credential, ID/Passwordなどの秘匿情報をcommitしてしまうのを防ぐメモ

はじめに

gitやgithubでこんなときありますよね。

  • ID/Passwordなどの秘匿情報をリポジトに置きたい
  • がcommitはしたくない

通常は.gitignoreに指定しておけば良い。
しかし、一時的にファイル名を変えて使いたい時(たとえば一時的にID/Passファイルをコピーして使うなど)に.gitignoreをすり抜けてcommitしてしまうことがあります。

その状態で、もしcommit & pushしてしまうとgithub上にはログとして残ってしまうので面倒...!

そんなことを未然に防止するgit-secretのメモです。

(ちなみにこの記事はMac環境で試しています)

アジェンダ

1. git-secretsとは

git-secretsというものを使います。

公式は以下です。
https://github.com/awslabs/git-secrets

descriptionの通りですが以下が説明です。

git-secretsは、commits, commit messagesをスキャンして、gitリポジトリにシークレットが追加されないようにします。 commits, commit messagesが禁止されている正規表現パターンと一致する場合、コミットは拒否されます。

2. git-secretsのインストール

Mac環境であればbrewでインストールできます。楽ちん。

$ brew install git-secrets

3. git-secrets管理化にする

これも簡単で、対象のリポジトリでgit secrets --installとするだけです。

# 対象のリポジトリでinitかcloneをする
$ git clone / git init 

# 対象のリポジトリをgit secrets管理化にする
$ git secrets --install
✓ Installed commit-msg hook to .git/hooks/commit-msg
✓ Installed pre-commit hook to .git/hooks/pre-commit
✓ Installed prepare-commit-msg hook to .git/hooks/prepare-commit-msg

4. git-secretsにcommitさせたくない文字列を登録する

正規表現の形でマッチさせることができます。
複数登録できるので、マッチさせたい文字列ごとに登録します。

git secrets --add "BASIC_AUTH_ID\:\s*\".+\""

ちなみに、登録した検出パターンの確認は--listオプションで。

$ git secrets --list
secrets.patterns BASIC_AUTH_ID\:\s*".+

5. commit時にgit-secretsによりエラーになる確認

適当なファイルを作ってadd / commitしてみます。
commit時にエラーになることが確認できます。

今回は、BASIC認証のID/Passwordのファイルを置く必要があると想定します。
basic.yamlというファイルを作成し、add / commitします。

# basic.yamlを作成
$ vim basic.yaml
----vim追記----
BASIC_AUTH_ID: "hogehoge"
BASIC_AUTH_PW: "fugafuga"
--------------

# add / commit
$ git add basic.yaml
$ git commit -m 'sample commit'
basic.yaml:1:BASIC_AUTH_ID: "hogehoge"

[ERROR] Matched one or more prohibited patterns

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- List your configured allowed patterns in .gitallowed at repository's root directory
- Use --no-verify if this is a one-time false positive

無事、エラーになることが確認できました。

6. git-secretsに登録した文字列を削除する

公式には削除するオプションはなさげでした。
そのため手動で削除します。

まず、どこに登録されるのか。
それは[your repo]/.git/configに登録されます。

つまり、config内から直接消せばOKです。

# .git/configを確認してみる
$ tail -n 2 .git/config
[secrets]
    patterns = BASIC_AUTH_ID\\:\\s*\".+\"

# vimなりで直接消す
$ vim .git/config

# ↑で消したてい
# 再度確認してみる
git secrets --list

参考

おわりに

team開発で設定する場合はshなんかにしておきたいですね!