💭
secretlintを使ってGitにコミットする前にシークレットの混入をチェックする
概要
GitHubにpushする前に資材にシークレットが混入していないか確認するためにMacにsecretlintをインストールし、Gitのpre-commitフックでコミット前に検査するようにします。
環境
% uname -m
arm64
% uname -s
Darwin
% uname -r
23.2.0
secretlint実行環境の準備
インストール
/usr/local/binディレクトリにsecretlintコマンドを配置します。
% SECRETLINT_VERSION="8.4.0"
% ARCH=$(uname -m); echo "${ARCH}"
arm64
% OS=$(uname -s | tr '[:upper:]' '[:lower:]'); echo "${OS}"
darwin
% cd /usr/local/bin
% curl -sSL "https://github.com/secretlint/secretlint/releases/download/v${SECRETLINT_VERSION}/secretlint-${SECRETLINT_VERSION}-${OS}-${ARCH}" -o secretlint
% chmod +x secretlint
設定ファイルの作成
Gitのローカルリポジトリにcdし、configディレクトリに設定ファイルを作成します。
% cd ${GIT_LOCAL_REPO}/config
% secretlint --init
Create .secretlintrc.json
コマンドの実行確認
% cd ..
% secretlint --secretlintrc=config/.secretlintrc.json --maskSecrets "**/*"
% echo $?
0
シークレットが含まれる場合の確認
動作確認のためにerr_test.txtを用意しました。
err_test.txt
AWS_ACCESS_KEY="AKIA****************"
secretlintコマンドに--maskSecretsオプションを指定して、シークレットが表示されないようにしています。
% secretlint --secretlintrc=config/.secretlintrc.json --maskSecrets "**/*"
${絶対パス}/err_test.txt
1:16 error [AWSAccessKeyID] found AWS Access Key ID: ******************** @secretlint/secretlint-rule-preset-recommend > @secretlint/secretlint-rule-aws
✖ 1 problem (1 error, 0 warnings)
Gitのpre-commitフックの設定
.git/hooks/pre-commitファイルを作成し実行権限をつけることで、コミット時にpre-commitファイルに記載したsecretlintコマンドが実行されます。
pre-commitファイルの作成
% vi .git/hooks/pre-commit
% chmod +x .git/hooks/pre-commit
pre-commitの中身を以下に記載します。
pre-commit
#!/bin/sh
FILES=$(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g')
[ -z "$FILES" ] && exit 0
# Secretlint all selected files
echo "$FILES" | xargs secretlint --secretlintrc=config/.secretlintrc.json --maskSecrets
RET=$?
if [ $RET -eq 0 ] ;then
exit 0
else
exit 1
fi
上記のpre-commitは、下記のリンク先に記載の内容を参考に secretlint コマンドのオプションを変更しています。
参考
Discussion