💭

secretlintを使ってGitにコミットする前にシークレットの混入をチェックする

2024/10/08に公開

概要

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 コマンドのオプションを変更しています。
https://github.com/secretlint/secretlint?tab=readme-ov-file#bash-script

参考

https://github.com/secretlint/secretlint?tab=readme-ov-file

Discussion