$30 off During Our Annual Pro Sale. View Details »

git-secretsとgitフックをざっと理解する

 git-secretsとgitフックをざっと理解する

Kanazawa.rb meetup #120 で発表した資料です。

TAKAyukiatkwsk

August 27, 2022
Tweet

More Decks by TAKAyukiatkwsk

Other Decks in Programming

Transcript

  1. Who am I? • Takayuki Takagi (髙木貴之 / ニボシーニョ) •

    @TAKAyuki_atkwsk / takayukiatkwsk • Programmer (employee) • Working from home • AWS, Kubernetes, Scala, Ruby, Go, etc. • Like beer and gyoza🍻🍻🍻
  2. git-secrets • https://github.com/awslabs/git-secrets ◦ Gitリポジトリにクレデンシャルなどの情報をコミットするのを防ぐ ツール ◦ AWSがオープンソースとして公開 • 特徴

    ◦ 割と簡単にインストールできる ◦ 基本はAWSクレデンシャルに対応し、カスタマイズ可能 ▪ 正規表現でマッチしたものを検知する仕組み ◦ gitフックを利用
  3. 使い方 $ brew install git-secrets $ cd /path/to/repo $ git

    secrets --install $ git secrets --register-aws
  4. 使い方 $ git diff --staged diff --git a/config/storage.yml b/config/storage.yml index

    09e48aa..b120701 100644 --- a/config/storage.yml +++ b/config/storage.yml @@ -9,7 +9,7 @@ local: # ... amazon: service: S3 - access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> + access_key_id: AKIAXXXXXXXXXXXXXXXX # サンプル用 secret_access_key: ... region: us-east-1 bucket: your_own_bucket-<%= Rails.env %>
  5. 使い方 $ git commit config/storage.yml:12: access_key_id: AKIAXXXXXXXXXXXXXXXX [ERROR] Matched one

    or more prohibited patterns Possible mitigations: - Mark false positives as allowed using: git config --add secrets.allowed ... - Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory - List your configured patterns: git config --get-all secrets.patterns - List your configured allowed patterns: git config --get-all secrets.allowed - List your configured allowed patterns in .gitallowed at repository's root directory - Use --no-verify if this is a one-time false positive $ echo $? 1
  6. 検知方法 • コミットされたファイルやコミットメッセージに該当 する正規表現がマッチするか検査 ◦ git secrets --register-aws コマンドで正規表現が登録される ◦

    アクセスキーIDやシークレットアクセスキーを表すパターン ◦ https://github.com/awslabs/git-secrets/blob/master/git-secrets #L233 • Gitフックのpre-commit, prepare-commit-msg,commit-msgで上記処理が呼ばれる ◦ https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9 %E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3 %82%AF
  7. gitフック(クライアント)について • git操作における各種タイミングで呼ばれる処理 • .git/hooks ディレクトリに格納されている ◦ デフォルトでは *.sample というファイルが格納されている

    • 決まったファイル名で実行可能であれば意図したタイ ミングでそのファイルが呼ばれる ◦ 「AのときにBする」を実現し、Bの結果で処理続行するか決まる ▪ A: コミット前、プッシュする前、コミットメッセージ入力後など  ▪ B: チェック、lint、テストなど
  8. git-secretsのフックの中身 $ find .git/hooks/* -not -name "*.sample" .git/hooks/commit-msg .git/hooks/pre-commit .git/hooks/prepare-commit-msg

    $ find .git/hooks/* -not -name "*.sample" -exec cat {} \; #!/usr/bin/env bash git secrets --commit_msg_hook -- "$@" #!/usr/bin/env bash git secrets --pre_commit_hook -- "$@" #!/usr/bin/env bash git secrets --prepare_commit_msg_hook -- "$@"