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
も設定しているので、後でまとめようと思います。