自由帳

とりとめのない学習メモです。主に Web サービスのシステム基盤や運用に関することを書いています

macOS へ git-secrets をインストールする

AWS のクレデンシャル情報を誤って git に commit されるのを防ぐために、git-secrets を使う。

github.com

インストール

% brew install git-secrets

設定(各リポジトリ毎)

テンプレートのインストールを行う。

$ cd /path/to/repos

$ 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

AWS IAM の Access Key / Secrets Access Key の文字列パターンをチェックするオプションを実行する。

% git secrets --register-aws
OK

/path/to/repos/.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 = $AccessKey
    allowed = $SecretAccessKey

設定(グローバル)

~/.git-templates/git-secrets にテンプレートのインストールを行う。

% git secrets --install ~/.git-templates/git-secrets
✓ Installed commit-msg hook to /Users/dshimizu/.git-templates/git-secrets/hooks/commit-msg
✓ Installed pre-commit hook to /Users/dshimizu/.git-templates/git-secrets/hooks/pre-commit
✓ Installed prepare-commit-msg hook to /Users/dshimizu/.git-templates/git-secrets/hooks/prepare-commit-msg

AWS IAM の Access Key / Secrets Access Key の文字列パターンをチェックするオプションを実行する。

% git secrets --register-aws --global
OK

git init 実行時に git-secrets も有効にしたい場合は、以下を実行すれば global config に反映される。

% git config --global init.templateDir ~/.git-templates/git-secrets

~/.gitconfig に以下がセットされる。

[init]
    templateDir = /Users/dshimizu/.git-templates/git-secrets

[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 = $AccessKey
    allowed = $SecretAccessKey

参考