🔑
機密情報の検知ツールの導入
目的
意図せずにgit上に機密情報をコミットしてしまうことを防ぎたい
ツールの候補
実現したいことと各ツールの対応状況
やりたいこと | git-secrets | Gitleaks | Secretlint |
---|---|---|---|
コミット時にすべてのファイルをスキャンする機能 | ◯ | △(コミット対象のファイルのみ) | ◯ |
GitHub Actionsでプッシュ/プルリクエスト時にスキャンしてアラートする機能 | ✗ | ◯ | ◯ |
コミット時にすべてのファイルをスキャンする機能
だけでもほとんどカバーされると思っていますが、GitHub Actionsでプッシュ/プルリクエスト時にスキャンしてアラートする機能
を追加することで、不意なコミット(GitHub上で直接書き換えるなど)にも対応できると判断し、この2つの機能が実現できるツールをSecretlintを採用しました
インストール
基本的には公式のインストールに従うのですが、公式ではgitの差分のみ検査する方法となっています
大規模開発の場合などは別途考慮する必要がありそうですが、基本的には何らかの方法でgit上に入ってくるとも限らないし、検査自体はさほど時間がかかるものでもないので、毎回全スキャンで良いかなという思いから、一部変更したインストールをします
手順
公式に従い、下記を行います
Dockerを使う場合
docker run -v pwd:pwd -w pwd --rm -it secretlint/secretlint secretlint "**/*"
Node.jsを使う場合
Node.js 18+ が必要
npm install secretlint @secretlint/secretlint-rule-preset-recommend --save-dev
npx secretlint --init
npx secretlint "**/*"
コミットをフックに起動させる設定
ここで公式と少し違うのですがBashスクリプトを使って下記のように設定します
Dockerを使う場合
#!/bin/sh
docker run -v `pwd`:`pwd` -w `pwd` --rm -it secretlint/secretlint secretlint "**/*"
RET=$?
if [ $RET -eq 0 ] ;then
exit 0
else
exit 1
fi
Node.jsを使う場合
#!/bin/sh
npx @secretlint/quick-start "**/*"
RET=$?
if [ $RET -eq 0 ] ;then
exit 0
else
exit 1
fi
個別にルールをインストールしている場合はスキャンのスクリプトを下記にします
npx secretlint "**/*"
実行結果
GitHub Actionsの登録
公式同様に.github/workflows/secretlint.yml
をリポジトリに置きます
name: Secretlint
on: [push, pull_request]
permissions:
contents: read
jobs:
test:
name: "Secretlint"
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v3
- name: setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install
run: npm install
- name: Lint with Secretlint
run: npx secretlint "**/*"
実行結果
We are hiring
Septeni Japanでは、一緒にプロダクト開発組織を盛り上げてくれる仲間を募集しています!
ご興味のある方は以下リンクから応募していただき、カジュアル面談を通じて働く環境や仲間を知っていただければと思います!
その際、応募フォームの「知ったきっかけ」に「テックブログ」と記載いただければと思います。
Discussion