Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. git-secretsとgitフックを
    ざっと理解する
    Kanazawa.rb meetup #120
    Takayuki Takagi

    View full-size slide

  2. Who am I?
    ● Takayuki Takagi (髙木貴之 / ニボシーニョ)
    ● @TAKAyuki_atkwsk / takayukiatkwsk
    ● Programmer (employee)
    ● Working from home
    ● AWS, Kubernetes, Scala, Ruby, Go, etc.
    ● Like beer and gyoza🍻🍻🍻

    View full-size slide

  3. 今日の話
    ● AWSのクレデンシャルをパブリックリポジトリに公開し
    ちゃうの怖いですよね
    ○ 第三者にAWSリソースを悪用される
    ● それを予防してくれるgit-secretsというツールの紹介
    ● gitフックってなんだろうという話

    View full-size slide

  4. 調べようと思ったきっかけ
    ● AWSのDevOps系カリキュラムの動画で紹介されていた
    ● AWSクレデンシャル(認証情報)を意図せずGitHubの公
    開リポジトリにアップロードしてしまう事例が結構観
    測される
    ● お手軽に予防できるならそれに越したことはない

    View full-size slide

  5. git-secrets
    ● https://github.com/awslabs/git-secrets
    ○ Gitリポジトリにクレデンシャルなどの情報をコミットするのを防ぐ
    ツール
    ○ AWSがオープンソースとして公開
    ● 特徴
    ○ 割と簡単にインストールできる
    ○ 基本はAWSクレデンシャルに対応し、カスタマイズ可能
    ■ 正規表現でマッチしたものを検知する仕組み
    ○ gitフックを利用

    View full-size slide

  6. 使い方
    $ brew install git-secrets
    $ cd /path/to/repo
    $ git secrets --install
    $ git secrets --register-aws

    View full-size slide

  7. 使い方
    $ 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 %>

    View full-size slide

  8. 使い方
    $ 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

    View full-size slide

  9. 検知方法
    ● コミットされたファイルやコミットメッセージに該当
    する正規表現がマッチするか検査
    ○ 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

    View full-size slide

  10. gitフック(クライアント)について
    ● git操作における各種タイミングで呼ばれる処理
    ● .git/hooks ディレクトリに格納されている
    ○ デフォルトでは *.sample というファイルが格納されている
    ● 決まったファイル名で実行可能であれば意図したタイ
    ミングでそのファイルが呼ばれる
    ○ 「AのときにBする」を実現し、Bの結果で処理続行するか決まる
    ■ A: コミット前、プッシュする前、コミットメッセージ入力後など 
    ■ B: チェック、lint、テストなど

    View full-size slide

  11. 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 -- "$@"

    View full-size slide

  12. git-secretsのフックの中身
    詳しくは
    https://github.com/awslabs/git-secrets/blob/master/g
    it-secrets
    を眺めてみてね!

    View full-size slide

  13. まとめ
    ● AWSクレデンシャルを含むコミットを防ぐツールの
    git-secretsを紹介しました
    ● gitフックを利用し、特定の操作時にAWSクレデンシャ
    ルが含まれているか正規表現のマッチで検知
    ● gitフックについての簡単な説明

    View full-size slide