Programming Self-Study Notebook

勉強したことを忘れないように! 思い出せるように!!

git-secretsで機密情報の混入を防いでみる

git-secretsとはgitへのセキュリティ情報の混入を自動で検出し、セキュリティ情報混入を自動で拒否するためのツールです。 個人PC上でgit-secretsの有効化を行った際の流れや、git-secretsに対して調べた内容をまとめます。

参考文献

git-secretsとは

「非公開のGitリポジトリが攻撃され、コミット履歴上に存在するセキュリティ情報が漏洩し、企業が損害を被る」という事件がたびたび報道されます。 このような事態を回避するために、公開/非公開を問わずGitリポジトリに対しセキュリティレベルに係わる情報や個人情報をプッシュするのは避けるべきです。

git-secretsを利用することで、機密情報がリモートリポジトリにプッシュされる前に、機密情報が混入していることを検知し対象のGitコマンドを拒否することができます。

git-secretsとは、AWSラボが作成したオープンソースです。git-secretsを使用するとGit ソースリポジトリをスキャンし、ユーザーパスワードや AWS アクセスキーなどの機密情報を含む可能性のあるコードや、その他のセキュリティ上の問題があるコードを見つけることができます。

git-secretsは、コミット、コミットメッセージ、マージをスキャンして、シークレットなどの機密情報が Git リポジトリに追加されないようにします。 例えば、コミット、コミットメッセージ、またはマージ履歴のコミットが、設定済みで禁止されている正規表現パターンのいずれかに一致した場合、そのコミットは拒否されます。

前提条件

git-secretsの機能を利用するには以下の条件を満たす必要があります。

  • アクティブな AWS アカウント
  • Gitクライアント(バージョン 2.37.1以降)がインストールされている

git-secretsのインストールと初期設定

以下がAWSのサイト上で公開されているアーキテクチャです。

手順概要

以下の手順で環境構築を実施します。

  • 基本設定
    • 手順1:Git をインストールする
    • 手順2:ソースリポジトリをクローンする
    • 手順3:git-secrets をインストールする(Windowsの場合)
    • 手順4:コードをスキャンする
  • 追加設定(自動実行の有効化)
    • 手順5:git hookを設定する

手順詳細

手順1:Git をインストールする

gitをまだインストールしていない人は、Gitクライアントのインストールを最初に実施する必要があります。Gitクライアントはバージョン 2.37.1以降をインストールする必要があります。

手順2:ソースリポジトリをクローンする

スキャン対象のリプジトリがローカル環境に存在している必要があるのでクローンしておきます。すでにクローンされているリポジトリgit-secretsを追加する場合はスキップ出来ます。

手順3:git-secrets をインストールする(Windowsの場合)

OSによって推奨されるインストール方法が異なります。詳細はgit-secrets内のreadme内に記載されています。

Windowsの場合
  • 3-1:git-secretsのgitリポジトリをクローン

    クローンデータを格納するフォルダ(任意)で以下のコマンドを実行します。

      git clone https://github.com/awslabs/git-secrets.git
    
  • 3-2:インストールコマンドの実行

    クローンしたフォルダの内部にinstall.ps1が存在します。PowerShell(管理者)と言うコンソールツール上でgit-secretsに移動し以下のコマンドを実行します。

      // git-secrets にカレントディレクトリを移動する
      cd git-secrets 
    
      // インストールコマンドを実行する
      ./install.ps1
    
    • 補足(上記コマンド内で実施しているコト)

      • 1.%USERPROFILE%/.git-secretsgit-secretsgit-secrets.1をコピー
      • 2.環境変数PATHに%USERPROFILE%/.git-secretsを追加
    • 補足(コマンド実行時のエラー)

      • PowerShellを管理者として実行していてもエラーが出ることがあります。
      • 権限設定が不十分な可能性がありますので確認をお願いします。

        • Set-ExecutionPolicy RemoteSigned
    • インストール結果のに対する処理

        PS D:\(省略)\git-secrets>  ./install.ps1
        Checking to see if installation directory already exists...
        Creating installation directory.
        Copying files.
        Checking if directory already exists in Path...
        Adding to path.
        Adding to user session.
        Done.
      
  • 3-3:Path登録

    git-secretsの実行時にGitがそれを取得できるように、PATHのどこかにgit-secretsを配置します。上記コマンドで%USERPROFILE%/.git-secrets環境変数PATHに追加されているはずですが、追加されていないようであれば追加を実施してください。

      %USERPROFILE%/.git-secrets
    
macOSの場合
  • Homebrewを利用してインストールすることができます。

      brew install git-secrets
    

手順4:コードをスキャンする

  • スキャンする Git リポジトリディレクトリに切り替えます。

      cd my-git-repository
    
  • 次のコマンドを実行して、リポジトリのスキャンを開始します。

      git secrets --scan
    
  • 脆弱性が見つかると出力ファイルを生成します。

    • 以下に出力ファイルの例を示します。

        example.sh:4:AWS_SECRET_ACCESS_KEY = *********
      
        [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
      

手順5:git hookを設定する

  • プロジェクトのルートディレクトリで以下のコマンドを実施します。

      # git hookのインストール
      git secrets --install
    
      # aws認証情報用のパターンをgitconfig(ローカル)に書き込む
      git secrets --register-aws
    
      # リポジトリに設定されているsecretsのconfigを表示
      git secrets --list
    

git-secretsでよく使うコマンド

  • コマンドの基本形

      // git secrets (操作モード)
      git secrets -–scan
    

操作モード

操作モード 処理内容
--install リポジトリのGitフックをインストールします|
--scan 1 つ以上のファイルをスキャンしてシークレットを探します
--scan-history すべてのリビジョンを含むリポジトリをスキャンします
--list git-secrets現在のリポジトリまたはグローバル Git 構成の構成を一覧表示します
--add 禁止または許可されるパターンを追加します
--add-provider シークレット プロバイダーを登録します
--register-aws 一般的な AWS パターンを git 構成に追加し、存在するキーが~/.aws/credentialsどのコミットにも見つからないようにします
--aws-provider INIファイルで見つかった資格情報を出力するシークレットプロバイダー。