git-secretsを利用したAWSキーの漏洩対策
git-secretsを利用して、AWSのアクセス/シークレットキーを、意図せずGitリポジトリに公開しないよう対策する。既に多くの利用例が紹介されているが、備忘録としてインストールと利用方法をメモしておく。
git-secretsのインストール
macOS
Homebrewを利用してインストール:
$ brew install git-secrets $ which git-secrets /opt/homebrew/bin/git-secrets
Linux
公式リポジトリをgit clone
してインストール:
$ git clone https://github.com/awslabs/git-secrets $ cd git-secrets $ sudo make install $ which git-secrets /usr/local/bin/git-secrets
git-secretsを適用する
デモ用のプロジェクトにgit-secretsを適用する:
$ git clone git@github.com:saito-hideki/demo-ansible-project.git $ cd demo-ansible-project $ 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
gitプロジェクトレベルでAWSのアクセスキーとシークレットキーの漏洩対策の設定:
$ git secrets --register-aws OK
globalレベルでのSAWSのアクセスキーとシークレットキーの漏洩対策の設定:
$ git secrets --register-aws --global
設定を実施すると、そ以下のパスにある設定ファイルの[secrets]
セクションが追加され、git secrets scan
や、git commit
時にスキャンするパターン(patterns
)が`[secrets]
セクションに設定される。
- プロジェクトレベルで設定した場合は、gitのプロジェクトディレクトリの
.git/config
- globalレベルで設定した場合は`$HOME/.gitconfig
... [secrets] providers = git secrets --aws-provider patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16} patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')? patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')? allowed = <サンプルアクセスキー> allowed = <サンプルシークレットキー>
git-secretsの効果を確認する
AWSのアクセスキーは、AKIAから始まり16文字の[A-Z0-9]で構成されているので、サンプルデータを作成して効果を確認する。
[secrets]
に定義されたpatterns
にしたがってgit commit
時にスキャンされる:
※allowed
に記載された文字列については除外される:
$ echo "AWS_ACCESS_KEY = AKIA`openssl rand -hex 128 | cut -c 1-16 | tr \[:lower:\] \[:upper:\]`" > hello.txt $ git commit -a hello.txt:1:AWS_ACCESS_KEY = <アクセスキー> [ERROR] Matched one or more prohibited patterns Possible mitigations: - Mark false positives as allowed using: git config --add secrets.allowed ... - Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory - List your configured patterns: git config --get-all secrets.patterns - List your configured allowed patterns: git config --get-all secrets.allowed - List your configured allowed patterns in .gitallowed at repository's root directory - Use --no-verify if this is a one-time false positive
既存のコンテンツに含まれているかどうかは、--scan-history
で確認できる:
$ git secrets --scan-history <コミットID>:hello.txt:1:AWS_ACCESS_KEY = <アクセスキー> [ERROR] Matched one or more prohibited patterns Possible mitigations: - Mark false positives as allowed using: git config --add secrets.allowed ... - Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory - List your configured patterns: git config --get-all secrets.patterns - List your configured allowed patterns: git config --get-all secrets.allowed - List your configured allowed patterns in .gitallowed at repository's root directory - Use --no-verify if this is a one-time false positive
[secrets]
セクションでのチェックを無視してcommitする場合は、--no-verify
オプションを付与する:
$ git commit --no-verify