AWS のクレデンシャルを GitHub に載せてしまう事故
相変わらず続いてますが、以下秘密情報の公開を防ぐ方法。
( AWS の Glacier とか GCP の BigQuery とか
課金の仕組み系も気をつけないとですね・・)
git-secrets
AWS が公開しているツール。パスワードなどの秘密情報を
誤って git リポジトリに commit する
ことを防いでくれます。
https://github.com/awslabs/git-secrets
設定手順
1. インストール
ツールを置いておくためのフォルダを作り、
あとはそこにソースを落としてきて make install
するだけ。
$ cd /path/to/tools/directory
$ git clone https://github.com/awslabs/git-secrets.git
$ cd git-secrets/
$ make install
ちなみに Mac で brew を使っている方は
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系の秘密情報 については
グローバルオプションをつけて、
プロジェクトごとの設定を不要にしましょう。
$ git secrets --register-aws --global
以下のパターンが設定されます1。
$ 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 シンボリックリンクが必要なことも。
ここで参照しているフォルダに git-secret
実行ファイルをコピー、
またはシンボリックリンクをはりましょう。
使ってみる
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 してあるソースコードをチェックしたい時は
$ git secrets --scan -r /path/to/directory
などで確認できます。
-
ハンズオンでサンプルのクレデンシャルを載せたいときなどは
AKIAIOSFODNN7EXAMPLE
を使えばいいようですね! ↩