タダです.
リポジトリに AWS のアクセスキー,シークレットアクセスキーを載せてしまって情報の漏洩といったことが起こりうるので,その予防策としてSecretlint
を触る機会があったためこの記事に備忘録をまとめます.
Secretlint とは
Secretlint
は azu さんが開発されている秘匿情報のコミットを防ぐツールです.
Secretlint 導入
Docker イメージも提供されていますが,今回は npm
で導入し,npx secretlint --init
で Secretlint
の設定ファイルを生成します.
$ npm install secretlint @secretlint/secretlint-rule-preset-recommend --save-dev added 276 packages, and audited 277 packages in 24s 36 packages are looking for funding run `npm fund` for details found 0 vulnerabilities $ npx secretlint --init Create .secretlintrc.json
.secretlintrc.json
という設定ファイルを開くと推奨ルールセット(@secretlint/secretlint-rule-preset-recommend
)が設定されています.
{ "rules": [ { "id": "@secretlint/secretlint-rule-preset-recommend" } ] }
Secretlint のルール
推奨ルールセットの他に個別のルールセットが以下のものがあります.
@secretlint/secretlint-rule-npm
@secretlint/secretlint-rule-aws
@secretlint/secretlint-rule-gcp
@secretlint/secretlint-rule-github
@secretlint/secretlint-rule-privatekey
@secretlint/secretlint-rule-basicauth
@secretlint/secretlint-rule-slack
@secretlint/secretlint-rule-sendgrid
@secretlint/secretlint-rule-secp256k1-privatekey
@secretlint/secretlint-rule-no-k8s-kind-secret
@secretlint/secretlint-rule-pattern
@secretlint/secretlint-rule-no-homedir
@secretlint/secretlint-rule-no-dotenv
例えば,@secretlint/secretlint-rule-aws
では AWS アカウント番号,アクセスキー,シークレットアクセスキーが書かれていないかをチェックしてくれます.また無視したい条件をチェック対象から外したりすることも可能です.
Secretlint を実行する
意図的に .env
ファイルに AWS アクセスキー,シークレットアクセスキーを設定してSecretlint
を実行してみました.@secretlint/secretlint-rule-aws
のルールに引っかかっています.このようにチェックができるため,自分だけでなくプロジェクトで設定しておくと誤って GitHub に載せちゃうってことが防げるためガードレールになると思います.
$ npx secretlint "**/*" /Users/tady/xxx/github.com/tasogare0919/xxx/.env 1:18 error [AWSAccessKeyID] found AWS Access Key ID: hoge @secretlint/secretlint-rule-preset-recommend > @secretlint/secretlint-rule-aws 2:0 error [AWSSecretAccessKey] found AWS Secret Access Key: hoge @secretlint/secretlint-rule-preset-recommend > @secretlint/secretlint-rule-aws ✖ 2 problems (2 errors, 0 warnings)
azu さんが記事でも紹介されていますが, このツールを使って git-hooks や CI でチェックを仕組み化していきたいです.
git-hooks 実行例
git commit -m "test commit" ▶ Check credentials by secretlint Unable to find image 'secretlint/secretlint:latest' locally latest: Pulling from secretlint/secretlint 59bf1c3509f3: Pull complete f1265917d930: Pull complete 550febb8ed3d: Pull complete 8a58962111ca: Pull complete ddf315adcbfd: Pull complete 93f101a4cc21: Pull complete Digest: sha256:916807d43cff2d6927a62ac588594ab4322e28ad8cce31410b3b392e1762c483 Status: Downloaded newer image for secretlint/secretlint:latest WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested /Users/tady/xxx/github.com/tasogare0919/xxx/.env 1:18 error [AWSAccessKeyID] found AWS Access Key ID: hoge @secretlint/secretlint-rule-preset-recommend > @secretlint/secretlint-rule-aws 2:0 error [AWSSecretAccessKey] found AWS Secret Access Key: hoge @secretlint/secretlint-rule-preset-recommend > @secretlint/secretlint-rule-aws ✖ 2 problems (2 errors, 0 warnings)
GitHub Actions で秘匿情報を push でチェックした場合の例
まとめ
Secretlint
を触った備忘録を記事にまとめていきました.初めて触ってみて導入の敷居がかなり低く始められるという印象で,セキュリティ向上のために個人環境でもいれていきたいと感じました.