LoginSignup
640
607

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-24

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 を使えばいいようですね! 

640
607
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
640
607