Edited at

クラウド破産しないように git-secrets を使う

More than 3 years have passed since last update.

AWS のクレデンシャルを GitHub に載せてしまう事故

相変わらず続いてますが、以下秘密情報の公開を防ぐ方法。

( AWS の Glacier とか GCP の BigQuery とか

 課金の仕組み系も気をつけないとですね・・)


git-secrets

AWS が公開しているツール。パスワードなどの秘密情報を

誤って git リポジトリに commit する

ことを防いでくれます。

https://github.com/awslabs/git-secrets


設定手順


1. インストール

ツールを置いておくためのフォルダを作り、

あとはそこにソースを落としてきて make install するだけ。


install

$ cd /path/to/tools/directory

$ git clone https://github.com/awslabs/git-secrets.git
$ cd git-secrets/
$ make install

ちなみに Mac で brew を使っている方は


brew-install

brew update && brew install git-secrets


で OKです。

教えてくださった mmizutani さん、ありがとうございました。

Homebrew に登録してくださった id:kani_b さん神。


2. 既存プロジェクトにフックを設定

このツールを有効にしたいプロジェクトごとに以下のコマンド

$ cd /path/to/your/repository

$ 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

または、パスを引数で渡して --install しましょう。

$ git secrets --install /path/to/your/repository


3. 拒否条件を設定

あとは --add で拒否(または false-positives を防ぐ許可)パターンを設定できます。

AWS については --register-aws とだけ打てば OK。

条件はプロジェクトごとにでもグローバルにでも設定できますが

せっかくなので AWS系の秘密情報 については

グローバルオプションをつけて、

プロジェクトごとの設定を不要にしましょう。


register-aws

$ git secrets --register-aws --global


以下のパターンが設定されます1


secrets-list

$ git secrets --list

secrets.providers git secrets --aws-provider
secrets.patterns [A-Z0-9]{20}
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


設定 Tips


新規プロジェクトで有効にする

git init 実行時に git-secrets も有効にしたい場合は

あらかじめ

$ git secrets --install ~/.git-templates/git-secrets

$ git config --global init.templatedir '~/.git-templates/git-secrets'

としておけば OK です。

すでに init.templatedir を設定している方はうまいこと編集してください・・


SourceTree などを使っているなら

git をコマンドライン以外で使っている場合、

そのツールが参照している git フォルダにも

git-secrets 実行ファイルのコピー or シンボリックリンクが必要なことも。

例えば SourceTree

sourcetree.png

ここで参照しているフォルダに git-secret 実行ファイルをコピー、

またはシンボリックリンクをはりましょう。


使ってみる


commit

ためしにコマンドラインから git commit してみます。


git-commit

$ git commit -m "test git-secret"

README.md:1:AWSAccessKeyId=AKIAIOSFODNN1EXAMPLE
README.md:2:AWSSecretKey=wJalrXUtnFEMI/K1MDENG/bPxRfiCYEXAMPLEKEY

[ERROR] Matched one or more prohibited patterns

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- Use --no-verify if this is a one-time false positive


弾かれたー


scan

すでに commit してあるソースコードをチェックしたい時は


secret-scan

$ git secrets --scan -r /path/to/directory


などで確認できます。

 





  1. ハンズオンでサンプルのクレデンシャルを載せたいときなどは AKIAIOSFODNN7EXAMPLE を使えばいいようですね!