AWSの学習を始めたので、`git-secrets'で安全な運用ができるように
学習しました。忘れないようにまとめておきます。
git-secrets
とは
Prevents you from committing passwords and other sensitive information to a git repository.
パスワードやその他センシティブな情報をコミットから貴方を守ります。
コミット時や任意のタイミングで、コミット内容やmessageに機密情報が含まれないかをチェックすることができます。
情報漏洩が何かと問題に上がる昨今、こういったツールで管理することは大切ですね。
インストール
$brew install git-secrets
コマンド概要(Synopsis)
git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<files>...]
git secrets --scan-history
git secrets --install [-f|--force] [<target-directory>]
git secrets --list [--global]
git secrets --add [-a|--allowed] [-l|--literal] [--global] <pattern>
git secrets --add-provider [--global] <command> [arguments...]
git secrets --register-aws [--global]
git secrets --aws-provider [<credentials-file>]
AWSのための初期設定
AWSに適した設定を行ってくれる専用のコマンドがあるので、これを入力します。
$ git secrets --register-aws --global
実際にどのような検査パターンになっているのでしょうか?
現在の検査パターンを知るには、 git secret --list
コマンドで確認できます。
$ git secrets --list
secrets.providers git secrets --aws-provider
secrets.patterns (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
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
secrets.patterns
で検査されたものは弾かれ、secrets.allowed
で指定されたものは特別に許可する、というものになっています。
詳しい設定内容はこちら
・AWS Access Key IDと思われるもの (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16} ・AWS Secret Access Key の割り当てと思われるもの。 任意の引用符で囲まれた ":" または "=" ・AWS account ID の割り当てと思われるもの。任意の引用符で囲まれた ":" または "=" wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) ・ ~/.aws/credentials で指定されたもの が弾かれて、 ・サンプルとして割り当てられたAWS keyのパターンの許可(AKIAIOSFODNN7EXAMPLE そして が許可される設定となります。--global
をつけることで、ユーザーの共通設定となります。
$ git secrets --install ~/.git-templates/git-secrets
リポジトリ用のgit hooksを~/.git-templates/git-secrets
にインストールします。
$ git config --global init.templatedir '~/.git-templates/git-secrets'
インストールしたテンプレートをconfigで設定します。
これでAWSに関しては基本的なところはコミットしても弾かれるようになります。🎉
その他コマンド
scan
指定したファイル/フォルダを検査してくれます。
commitはしないけどチェックしたい、といった場合に有効ですね。
$ git secrets --scan test.txt // ファイルの検査
$ git secrets --scan testDir // ディレクトリの検査
$ git secrets --scan -r testDir // 再帰的にディレクトリを検査
scanするファイルは git ls-files
でリストアップされるものだけが対象なので、.gitignoreに書かれているファイルなどは
対象外です。便利。
ちなみに、 --no-index
オプションをつけると、gitファイルでなくても検査してくれます。
scan-history
過去のコミット履歴を検査してくれます。
途中でgit-secretsを導入した場合などに活躍します。
$ git secrets --scan-history
add
禁止、許可する正規表現パターンを追加できます。
$git secrets --add "secret\s*=\s*"
SourceTreeでの操作
【追記】
SourceTreeでgit-secretsをインストールした状態で何か操作をしようとすると、
git: 'secrets' is not a git command. See 'git --help'.
というエラーが出てしまいます。
これを解決するには、
- git実行プログラムと同じ階層にgit-secrets実行プラグラムをおく(もしくはシンボリックリンクを貼る)
- soureTreeのgit実行プログラムを同じ階層に貼る。
で解決できます。
#gitの場所
$ which git
/usr/bin/git
#git-secretsの場所
$ which git-secrets
/usr/local/bin/git-secrets
in #実行プログラムを同じ階層にコピー
cp /usr/bin/git /usr/local/bin
*もしMacで権限エラーなどが出る場合は、SIPが有効になっている可能性があります。
【上級者向け】System Integrity Protection (SIP) を無効にする方法
そして、SourceTreeの【環境設定】->【Git】->【システムのGitを使用する】で、
gitのパスを指定しましょう。(ここでは/usr/bin/git)
参考文献
実践Terraform AWSにおけるシステム設計とベストプラクティスbインプレスR&D 三省堂書店オンデマンド
git-secretsはじめました
AWSアクセスキーをGitリポジトリに混入させないために git-secrets を導入した
クラウド破産しないように git-secrets を使う