MENU

気づかず入ってた「git-secrets」の正体を調べてみた

terraform import、tfstateとコードは別物だったことを説明する画像

おはようございます、YASUです。

以前Gitの設定を確認していた時、git config --global --listの結果に見覚えのないsecrets.*という項目がずらっと出てきたことがありました。「これ何だろう」と思いつつそのままにしていたのですが、今日はちゃんと調べて、その正体を突き止めてみました。

目次

結論

git-secretsは、AWSのアクセスキーのような機密情報を、うっかりGitにコミットしてしまうのを機械的に防いでくれるツールでした。以前紹介した.gitignoreが「うっかり公開してしまうファイルそのものを除外する」仕組みだとすれば、git-secretsは「コミットしようとしている中身を検査して、危険なパターンが含まれていたら拒否する」という、もう一段踏み込んだ防御策です。

なぜこのツールが必要とされるのか

調べていると、AWSのアクセスキーをうっかりGitHubにコミットしてしまい、不正利用されて高額請求が届いた、という体験談がいくつも見つかりました。6,000ドル請求された話や、300万円請求された話など、検索するとすぐに出てくるくらい、よくある事故のようです。

仕組みとしては単純です。悪意のある第三者は、GitHub上に公開されているリポジトリを常に自動でスキャンしていて、AWSのアクセスキーのパターンを見つけると、すぐに不正利用(仮想通貨のマイニングなど)に使ってしまいます。「気をつけていたつもりでも、うっかりコミットしてしまう」というヒューマンエラーは、どれだけ注意していても完全にはなくせません。そこで、機械的にチェックしてくれる仕組みが必要になります。

git-secretsの仕組み

git-secretsは、コミットやコミットメッセージ、マージの内容をスキャンして、あらかじめ登録された正規表現パターンに一致する文字列が含まれていたら、そのコミット自体を拒否します。代表的なパターンはこんな感じです。

# AWSのアクセスキーIDらしき文字列のパターン
(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}

AWSのアクセスキーIDは必ずAKIAなどの決まった文字列で始まるという特徴があるので、そのパターンに一致する文字列がコミットに含まれていたら、警告を出して弾いてくれる、という仕組みです。

導入の基本的な流れ

# git-secrets本体をインストール(Macの場合)
brew install git-secrets

# パソコン全体のGitリポジトリに保護をかける
git secrets --install ~/.git-templates/git-secrets
git config --global init.templatedir '~/.git-templates/git-secrets'

# AWS用の検知パターンを登録する
git secrets --register-aws --global

ポイントは--globalを付けて設定しておくことです。こうしておくと、これから新しくgit initするすべてのリポジトリに、自動的にこの保護が適用されるようになります。まさに、以前確認した自分のパソコンの設定に、この仕組みがすでに入っていました。

テスト用の除外パターンもある

学習や検証のために、公式ドキュメントに載っているサンプルのアクセスキー(AKIAIOSFODNN7EXAMPLEなど)を使うことはよくあります。これらは実在しない、説明用のダミーキーなので、誤って検知されないように、あらかじめ「許可リスト」に登録しておく仕組みも用意されています。

.gitignoreとの役割の違い

  • .gitignore:特定の「ファイル」自体を、そもそも管理対象から除外する
  • git-secrets:コミットしようとしている「中身(テキスト)」を検査して、危険なパターンが含まれていたら拒否する

.gitignoreに書き忘れたファイルや、コードの中に直接キーを書いてしまったケースなど、.gitignoreだけではカバーしきれない場面を、git-secretsが二重の防御線として補ってくれる、という位置づけです。

まとめ

  • git-secretsは、AWSのアクセスキーなどの機密情報を、コミット時に機械的に検知して拒否してくれるツール
  • AWSキーの流出による高額請求は、検索するとすぐ見つかるほどよくある事故
  • –globalで設定しておけば、これから作る全リポジトリに自動的に保護がかかる
  • .gitignoreが「ファイル単位」の防御なら、git-secretsは「中身のパターン単位」の防御

気づかないうちに自分のパソコンにも導入されていた、という発見から始まった今回の調査でしたが、実務でも欠かせない予防線だと分かりました。それでは、また明日!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次