【Git】TokenやSecret KeyのCommit/Pushを防止するツールの紹介と比較
こんにちは!!!!!
みなさんは、大事な大事なTokenやSecret keyをGithubなどのリモートリポジトリーに間違えてアップロードしたことはありませんか?!
はい、私はあります!!
、、、と明るく言ってみましたが、実際に洒落にならないので気を付けなければなりません。下の記事のようなことも起こり得ます。(私の時はなんとか事無きを得ましたが💦 )
ということで、この記事は、tokenやsecret key(以下、まとめてシークレット)をcommit/pushしてしまうのを防止するツールの紹介と比較です。セキュリティ上重要なツールなので、そのツール自体の信頼性なども重要です。ぜひ参考にしてください。
今回の比較対象
今回対象としたのは以下のツールになります。
- secret scanning (GitHub)
- GitGuardian
- awslab/git-secrets (AWS)
- Yelp/detect-secrets (Yelp)
- zricethezav/gitleaks
- tufflesecurity/tuffleHog
- secretlint
また、比較観点はこちらです。
- 概要
- 対応しているシークレット発行元のプロバイダー
- star数(GitHub)
※2021/5/22時点での情報です
※実際に全て導入して確かめたわけでは無いので間違いなどあれば都度指摘してください
レポジトリースキャン
最初の2つはリポジトリーからすでにプッシュされたシークレットを検知してくれるサービスです。当然これらも必要ではあるのですが、事前にプッシュを防いでくれるわけでは無いのと、検知後にシークレットを提供する各プロバイダーが通知を受けてシークレットを無効にしてくれる保証はないので、「このサービスがあるから安心」ではないです。併せて事前にコミットを防止するツールの導入もしましょう。
secret scanning (GitHub)
概要
secret scanningはGitHub公式が提供しているサービスです。GitHubにPushされたシークレットを検知して、token発行元の各サービスプロバイダーに通知するというシステムになっています。パブリックリポジトリーでは自動で有効になり、Organizationのプライベートレポジトリーでは設定で有効にできます。
対応プロバイダー
AWS、GCP、GitHub、Stripe、Slackなど約43
Star数
OSSではないので不明
GitGuradian
概要
GitGuadianはGitHubのsecret scanningと同様にパブリックリポジトリーのシークレット流出を検知して通知してくれるサービスです。機能的にsecret scanningとの違いはあまりないですが、プロバイダーが多いので導入する価値はあるかもしれません。
対応プロバイダー
約200
Star数
OSSではないので不明
事前commit/push防止ツール
次の中から1つは導入するのをお勧めします。
awslab/git-secrets (AWS)
概要
AWSが開発しているOSSになります。commit、commit message、--no-ff mergesをスキャンしてシークレットが含まれて無いか検知してくれます。機能としては十分なツールですね。ただ、AWSのシークレットの流出検知の設定は簡単にできるのですが、他のシークレット検知の設定などは自分で正規表現で設定しないといけないなど多少面倒があるようです。
対応プロバイダー
デフォルトではAWSのみ
Star数
9,000
Yelp/detect-secrets (Yelp)
概要
海外の食べログ的(?)なサイトのYelpが開発しているツールになります。スキャンコマンドを走らせる事で、シークレットの発見と、発見された場合の情報を詳しく教えてくれます。ただ、コミット時などのhookは自分で作成する必要がありそうです。
対応プロバイダー
AWSやPrivateKeyなど約18
Star数
1,800
zricethezav/gitleaks
概要
コミットされたシークレットを検知してくれるだけでなく、ステージングされてないシークレットもスキャンしてくれるようです。また、リモート・ローカルどちらのスキャンも行えます。
対応プロバイダー
デフォルトルールとして提供されているのは約22
Star数
7,700
tufflesecurity/tuffleHog
概要
コミットの差分ごとに検査してくれます。また、新たにコミットされる20文字以上の文字列を発見すると画面に出してくれるようです。
対応プロバイダー
デフォルトルールとして提供されているのは約13
Star数
5,700
secretlint
概要
シークレットの発見、コミット時のトリガー、プロバイダーごとのチェックルール作成の容易さなどバランスよく必要な機能が揃ったツールです。基本的にはプロジェクトごとに入れる必要があります。懸念としてはStar数が少ないことでしょうか。
対応プロバイダー
デフォルトルールとして提供されているのは約12
Star数
275
まとめ
当然、.gitignoreの設定をする、コミット前にソースコードの確認をするなどは必要ですが、人間ミスをしてしまうものなので(開き直り?)、ぜひこれらツールで予防をしておきましょう。
Discussion