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

  • 380
    Like
  • 6
    Comment
More than 1 year has 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 を使えばいいようですね!