継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

リポジトリに載せたくない秘匿情報をチェックする Secretlint を触った

タダです.

リポジトリAWS のアクセスキー,シークレットアクセスキーを載せてしまって情報の漏洩といったことが起こりうるので,その予防策としてSecretlintを触る機会があったためこの記事に備忘録をまとめます.

Secretlint とは

Secretlintazu さんが開発されている秘匿情報のコミットを防ぐツールです.

github.com

Secretlint 導入

Docker イメージも提供されていますが,今回は npm で導入し,npx secretlint --initSecretlint の設定ファイルを生成します.

$ 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 でチェックした場合の例

f:id:sadayoshi_tada:20220220172946p:plain

まとめ

Secretlintを触った備忘録を記事にまとめていきました.初めて触ってみて導入の敷居がかなり低く始められるという印象で,セキュリティ向上のために個人環境でもいれていきたいと感じました.

参考情報

efcl.info