Help us understand the problem. What is going on with this article?

クラウド破産しないように 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 を使えばいいようですね! 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした