git-secrets で IAM アクセスキーの誤コミットを防止

なにそれ

awslabs/git-secrets: Prevents you from committing secrets and credentials into git repositories

  • AWS の認証情報を Git でコミットするとエラーで弾く Git のプラグイン
  • AWS が作ってる

やり方

参考: リポジトリ: awslabs/git-secrets の説明

以下は macOS の場合。

$ brew install git-secrets

既存のリポジトリに設定する方法。

$ cd /path/to/my/repo
$ git secrets --install
$ git secrets --register-aws

git init or git clone 時にデフォルトで有効にする設定。

$ git secrets --register-aws --global

$ git secrets --install ~/.git-templates/git-secrets
$ git config --global init.templateDir ~/.git-templates/git-secrets

試しにアクセスキーをコミット。

$ echo "AKIXXXXXXXXXXXXXXXXXXXX" > unsafe

弾かれた。

$ git add unsafe
$ git commit -m unsafe
unsafe:1:AKIXXXXXXXXXXXXXXXXXXXX

[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

過去の全コミットを調べる方法。

$ git secrets --scan-history

独自のパターンも定義できるぞ。

$ cat ~/.gitconfig 

[init]
    templatedir = ~/.git-templates/git-secrets


[secrets]
    providers = git secrets --aws-provider
    patterns = [A-Z0-9]{20}
    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}(\"|')?

    # 独自の禁止パターン
    patterns = internal\.example\.com

    # 独自の許可パターン
    allowed =  www\.example\.com