Closed9
git-secretsを試してみる㊙️
githubへの個人情報や機密情報のpushを事前に防止するため、
git-secretsを試す
git-secrets
とは?
Gitコミット、コミットメッセージをスキャンし、設定した禁止正規表現パターンに該当すれば、
そのコミットを防いでくれるツールだそう。
git-secrets scans commits, commit messages, and --no-ff merges to prevent adding secrets into your git repositories. If a commit, commit message, or any commit in a --no-ff merge history matches one of your configured prohibited regular expression patterns, then the commit is rejected.
インストール(Linux)
git clone
してmake install
すればよい
$ git-secrets
usage: git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<files>...]
... 略 ...
リポジトリにルールを適用する
リポジトリに移動し、git secrets --install
コマンドを実行すると、git hooks
(特定のアクションが発生した際に実行するスクリプト)がインストールされる
$ 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
git secrets --register-aws
を実行することで、AWS用のフィルタを設定可能
$ git secrets --register-aws
OK
ルールを見てみる
$ cat .git/config
... 略 ...
[secrets]
providers = git secrets --aws-provider
patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?
patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?
allowed = AKIAIOSFODNN7EXAMPLE
allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
試してみる
AWSドキュメントに記載のあるアクセスキーのサンプルを使用する(一部変更済み)
$ cat test.txt
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
プッシュ
$ git add test.txt
$ git commit -m "test commit"
test.txt:2:aws_secret_access_key = ZJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[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
無事弾かれた
addを元に戻す場合はこう
$ git restore --staged test.txt
コミット前に確認する
commit
せずとも確認できる
$ git add test.txt
$ git secrets --scan
test.txt:2:aws_secret_access_key = ZJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
... 略 ...
ルールを確認する
$ git config --list | grep secrets
secrets.providers=git secrets --aws-provider
secrets.patterns=(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
... 略 ...
ルールを追加する
Saturday
という語句を引っ掛けます
$ git secrets --add 'Saturday'
追加ルールでコミット防止
Saturday
でも検知することを確認します
$ cat test.txt
aws_access_key_id = ZKIAIOSFODNN7EXAMPLE
aws_secret_access_key = ZJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
youbi = "Saturday"
$ git add test.txt
$ git secrets --scan
test.txt:2:aws_secret_access_key = ZJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
test.txt:3:youbi = "Saturday"
[ERROR] Matched one or more prohibited patterns
すべてのリポジトリに適用する
$ git secrets --register-aws --global
すべてのリポジトリにルールを追加する
$ git secrets --add --global 'block'
設定は~/.gitconfig
に記載されている
このスクラップは2023/05/13にクローズされました