Closed9

git-secretsを試してみる㊙️

not75743not75743

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.

not75743not75743

リポジトリにルールを適用する

リポジトリに移動し、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
not75743not75743

ルールを見てみる

$ 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
not75743not75743

試してみる

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
not75743not75743

コミット前に確認する

commitせずとも確認できる

$ git add test.txt 
$ git secrets --scan
test.txt:2:aws_secret_access_key = ZJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
... 略 ...
not75743not75743

ルールを確認する

$ 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
not75743not75743

すべてのリポジトリに適用する

$ git secrets --register-aws --global

すべてのリポジトリにルールを追加する

$ git secrets --add --global 'block'

設定は~/.gitconfigに記載されている

このスクラップは2023/05/13にクローズされました