目次
概要
AWSを用いた開発を行なっていると、AWSのアクセスキーを用いてローカル環境で検証を行います。
しかし、検証後にそのままコミットして、AWSアクセスキーをGitリポジトリに混入させてしまうリスクがあります。
そこで、AWSのアクセスキーがファイルに含まれていたらエラーとする方法について検証しました。
準備
git-secretsのインストール
$ brew update
$ brew install git-secrets
コマンドの確認
$ which git-secrets
/usr/local/bin/git-secrets
$ git secrets
usage: git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<files>...]
インストールされていることを確認。
設定
git secrets --register-aws --global
OK
以下が追加されていることを確認
~/.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 = AKIAIOSFODNN7EXAMPLE
allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
allowedに値を指定すると、エラーならず、許容されます。
上記の値は以下URLのサンプルのキー情報です。
検証
AWSのアクセス情報を含むファイル作成
vi aws_credential.txt
ファイルの中身を表示
$ cat aws_credential.txt
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLo
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEo
git secretsでファイルをスキャンしてみる
$ git secrets --scan --no-index
fatal: not a git repository (or any of the parent directories): .git
aws_credential.txt:3:aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEo
[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
上記のように、エラーとなってくれました。
後は、これをhuskyと組み合わせてgitでcommit時に上記コマンドを実行するようにすればよさそうです。
huskyの使い方は以下でまとめているので、気になる方はどうぞです。
参考