git-secrets を導入して、AWS アクセスキーを含んだコミットを行えないようにする
git-secrets を導入して、AWS アクセスキーを含んだコミットを行えないようにする
git-secrets について
AWSの知識地図 〜現場必修の基礎から構築・セキュリティまで
で紹介されていて知りました。
ソースコードに AWS のアクセスキーなどが混入していたときに、コミットを防ぐのはやっておきたいなと思ったため導入してみました。
設定
下記記事を参考にほぼ同じ設定を行いました。
git-secrets の install
Homebrew を使って git-secrets をインストール。
$ brew install git-secrets
global に AWS アクセスキーのパターンを登録
全リポジトリで有効にしたかったため、global に登録。
$ git secrets --register-aws --global
OK
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
登録されたパターンの確認。
$ git secrets --list
secrets.providers git secrets --aws-provider
secrets.patterns (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
secrets.patterns ("|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)("|')?\s*(:|=>|=)\s*("|')?[A-Za-z0-9/\+=]{40}("|')?
secrets.patterns ("|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?("|')?\s*(:|=>|=)\s*("|')?[0-9]{4}\-?[0-9]{4}\-?[0-9]{4}("|')?
secrets.allowed AKIAIOSFODNN7EXAMPLE
secrets.allowed wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
git init 実行時に git-secrets も有効にする
dotfiles で設定を管理するようにしました。
$ git secrets --install ~/dotfiles/git-templates/git-secrets
これにより、下記 3 つのファイルが作成されます。
git-templates/git-secrets/hooks/commit-msg
#!/usr/bin/env bash
git secrets --commit_msg_hook -- "$@"
git-templates/git-secrets/hooks/pre-commit
#!/usr/bin/env bash
git secrets --pre_commit_hook -- "$@"
git-templates/git-secrets/hooks/prepare-commit-msg
#!/usr/bin/env bash
git secrets --prepare_commit_msg_hook -- "$@"
git init 時に git-secrets を有効にするために、git config で init.templatedir を設定する。
$ git config --global init.templatedir '~/dotfiles/git-templates/git-secrets/'
git/config が書き換えられる。
[init]
  templatedir = ~/dotfiles/git-templates/git-secrets/
動作確認
検知
AWS アクセスキー を含むファイルを作成し、検知されるか確認します。
$ echo "AKIAIOSFODNNTESTTEST" > test.txt
scan で検知できる。
$ git secrets --scan test.txt
test.txt:1:AKIAIOSFODNNTESTTEST
[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
commit もできない。
$ git commit -m 'test'
test.txt:1:AKIAIOSFODNNTESTTEST
[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
特定のパターンを検知しないように設定
AKIAIOSFODNNTESTTEST を検知しないようにしてみます。
$ git secrets --add --global --allowed 'AKIAIOSFODNNTESTTEST'
git/config が書き換えられる。
[secrets]
  略
  allowed = AKIAIOSFODNNTESTTEST
AKIAIOSFODNNTESTTEST が登録されているか確認。
$ git secrets --list
略
secrets.allowed AKIAIOSFODNNTESTTEST
エラーが発生しなくなる。
$ git secrets --scan test.txt
$ git commit -m 'test'
他設定
hogehoge を検知するように設定。
$ git secrets --add 'hogehoge'
README.md だけ、検知しないように設定。
$ git secrets --add --allowed README.md
まとめ
これでアクセスキーなどを誤って公開してしまいそうになっても、
git-secrets が検知してくれるので、
安心してソースコードを管理できるようになりました。
Gitleaks も設定しているので、後でまとめようと思います。
