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のインストールと初期設定
- ローカルマシンでリポジトリをスキャンする場合
手順概要
以下の手順で環境構築を実施します。
- 基本設定
- 追加設定(自動実行の有効化)
- 手順5:git hookを設定する
手順詳細
手順1:Git をインストールする
gitをまだインストールしていない人は、Gitクライアントのインストールを最初に実施する必要があります。Gitクライアントはバージョン 2.37.1以降をインストールする必要があります。
- Gitのインストール手順
手順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.git3-2:インストールコマンドの実行
クローンしたフォルダの内部に
install.ps1が存在します。PowerShell(管理者)と言うコンソールツール上でgit-secretsに移動し以下のコマンドを実行します。// git-secrets にカレントディレクトリを移動する cd git-secrets // インストールコマンドを実行する ./install.ps1補足(上記コマンド内で実施しているコト)
- 1.
%USERPROFILE%/.git-secretsにgit-secretsとgit-secrets.1をコピー - 2.環境変数PATHに
%USERPROFILE%/.git-secretsを追加
- 1.
補足(コマンド実行時のエラー)
- 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ファイルで見つかった資格情報を出力するシークレットプロバイダー。 |
- オプションの詳細は以下のサイトで確認することができます。
