hene

hene.dev

(Last updated on )

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

参考

関連記事