🔖

git-secrets を活用して、Discord Bot のトークンの混入を防ぐ

2021/08/15に公開

本記事は、Disocrd Botを開発する際についうっかりやってしまいがちな、シークレットトークンをGitHubに上げてしまい、Discordに怒られるということを減らすために書きました。これを実現するために、Gitの機能であるpre-commitと、AWSlabが開発した、git-secretsというスクリプトを用います。pre-commitというのは、コミットの直前に設定したスクリプトを実行してくれる機能です(Git Hook)。pre-commitの活用例には、例えば、linterの実行などがあります。git-secretsはAWSの秘密情報を漏らさないために開発されたものです。今回は、それをDiscord Bot向けに流用しています。

tl;dr

cd /want/to/path
sudo apt install git-secrets
git secrets --add '[A-z0-9_]{24}\.[A-z0-9_]{6}\.[A-z0-9_]{27}\.'
git secrets install

インストール

git-secretsのインストールを行います。git-secretではないので気をつけてください。公式のawslabs/git-secretsを参考に進めます。

Ubuntu

sudo apt install git-secrets

Mac

brew install git-secrets

Windows
git cloneしてから、PowerShellで開きます。

PS > ./install.ps1

設定

まずDiscord Botを開発しているリポジトリまで移動します。

cd /want/to/path

パターンを登録

検査したいパターンを正規表現で書きます。パターンは.git/configに書き込まれます。pre-commitの設定は.git/hooks/に書き込まれます。ファイルがすでに存在し、上書きしたい場合は、-fオプションをつけてください。

git secrets --add '[A-z0-9_]{24}\.[A-z0-9_]{6}\.[A-z0-9_]{27}\.'
git secrets install

余談:ファイルの更新を無視する方法

トークンを./secret.txtに配置しているとします。このとき、このファイルの更新を無視したいときは以下のコマンドを打ちます。

git update-index --assume-unchanged secret.txt

とすると、ある状態から更新されなくなります。.gitignoreにファイル名を書き込むのとは違い、リモートにファイル自体は存在させることができます。

参考

Discussion