
.. contents:: :depth: 2
::
git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<files>...]
git secrets --scan-history
git secrets --install [-f|--force] [<target-directory>]
git secrets --list [--global]
git secrets --add [-a|--allowed] [-l|--literal] [--global] <pattern>
git secrets --add-provider [--global] <command> [arguments...]
git secrets --register-aws [--global]
git secrets --aws-provider [<credentials-file>]
git-secrets は、コミット、コミットメッセージ、および --no-ff マージをスキャンして、シークレットがgitリポジトリに追加されるのを防ぎます。コミット、コミットメッセージ、または --no-ff マージ履歴内のいずれかのコミットが、設定された禁止正規表現パターンのいずれかに一致する場合、そのコミットは拒否されます。
git-secrets は、git secrets を実行したときに git によって認識されるように、PATHのどこかに配置する必要があります。
*nix (Linux/macOS)
提供されているMakefileの ``install`` ターゲットを使用して、``git secrets`` とmanページをインストールできます。PREFIX変数とMANPREFIX変数を使用して、インストールパスをカスタマイズできます。
::
make install
Windows
~~~~~~~
提供されている ``install.ps1`` PowerShellスクリプトを実行します。これにより、必要なファイルがインストールディレクトリ(デフォルトでは ``%USERPROFILE%/.git-secrets``)にコピーされ、そのディレクトリが現在のユーザーの ``PATH`` に追加されます。
::
PS > ./install.ps1
Homebrew(macOSユーザー向け)
::
brew install git-secrets
.. warning::
**まだ完了していません!** ``git secrets --install`` を使用する予定の**すべてのリポジトリに対してgitフックをインストールする必要があります。**
以下は、各コミット時にgitリポジトリがシークレットをスキャンされるようにするための簡単な例です::
cd /path/to/my/repo
git secrets --install
git secrets --register-aws
今後初期化またはクローンするすべてのリポジトリにフックを追加したい場合は、設定テンプレートを追加します。
::
git secrets --register-aws --global
ローカルリポジトリすべてにフックを追加します。
::
git secrets --install ~/.git-templates/git-secrets
git config --global init.templateDir ~/.git-templates/git-secrets
セキュリティ資格情報をスキャンするためのカスタムプロバイダーを追加します。
::
git secrets --add-provider -- cat /path/to/secret/file/patterns
git-secretsを使用すると、全リビジョンを含むリポジトリをスキャンすることもできます:
::
git secrets --scan-history
操作モード
これらの各オプションは、コマンドラインの最初に指定する必要があります。
``--install``
リポジトリにgitフックをインストールします。フックがインストールされると、そのリポジトリではコミットおよび非fast-forwardマージでシークレットがコミットされるのを防ぎます。
``--scan``
1つ以上のファイルをシークレットについてスキャンします。ファイルにシークレットが含まれている場合、スキャン対象ファイルから一致したテキストがstdoutに書き込まれ、スクリプトは0以外のステータスで終了します。一致した各行は、一致したファイル名、コロン、一致した行番号、コロン、そして一致したテキストの行として書き込まれます。ファイルが指定されない場合、``git ls-files`` によって返されるすべてのファイルがスキャンされます。
``--scan-history``
すべてのリビジョンを含めてリポジトリをスキャンします。ファイルにシークレットが含まれている場合、スキャン対象ファイルから一致したテキストがstdoutに書き込まれ、スクリプトは0以外のステータスで終了します。一致した各行は、一致したファイル名、コロン、一致した行番号、コロン、そして一致したテキストの行として書き込まれます。
``--list``
現在のリポジトリまたはグローバルgit configの ``git-secrets`` 設定を一覧表示します。
``--add``
禁止パターンまたは許可パターンを追加します。
``--add-provider``
シークレットプロバイダーを登録します。シークレットプロバイダーは、呼び出されると ``git-secrets`` が禁止として扱うべき禁止パターンを出力する実行可能ファイルです。
``--register-aws``
git configに一般的なAWSパターンを追加し、``~/.aws/credentials`` に存在するキーがいずれのコミットにも含まれないようにします。次のチェックが追加されます:
- AWSアクセスキーID: ``(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}``
- Amazon Bedrock APIキー。長期有効: ``ABSK[A-Za-z0-9+/]{109,}=*``、短期有効: ``bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29t``
- AWSシークレットアクセスキーの割り当て: ":" または "=" で囲まれ、オプションで引用符で囲まれます
- AWSアカウントIDの割り当て: ":" または "=" で囲まれ、オプションで引用符で囲まれます
- サンプルAWSキー(``AKIAIOSFODNN7EXAMPLE`` および ``wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY``)の許可パターン
- ``~/.aws/credentials`` から既知の資格情報
.. note::
このコマンドで登録されたパターンは、ほとんどのAWS資格情報をキャッチするはずですが、**すべて**をキャッチすることを保証するものではありません。``git-secrets`` は追加の保険手段として使用すべきであり、資格情報をリポジトリにコミットしないようにするための十分な注意を払う必要があります。
``--aws-provider``
INIファイル内の資格情報を出力するシークレットプロバイダー。オプションでINIファイルへのパスを指定できます。
``--install`` のオプション
-f, --force
既存のフックがあれば上書きします。
<target-directory>
指定された場合、指定されたディレクトリにgitフックをインストールします。<target-directory> が指定されない場合は、カレントディレクトリが使用されます。
指定された ``<target-directory>`` がgitリポジトリ内にない場合、ディレクトリが作成され、フックは ``<target-directory>/hooks`` に配置されます。これは、``git init --template <target-directory>`` を使用してgitテンプレートディレクトリを作成するのに便利です。
既に初期化されているリポジトリで ``git init`` を実行できます。「git initドキュメント(https://git-scm.com/docs/git-init)」より:
gitのドキュメントより: 既存のリポジトリで ``git init`` を実行しても安全です。既存のものは上書きされません。``git init`` を再実行する主な理由は、新しく追加されたテンプレートを適用するためです(または ``--separate-git-dir`` が指定された場合にリポジトリを別の場所に移動するため)。
次のgitフックがインストールされます:
1. ``pre-commit``: コミットで変更されたファイルが禁止パターンを使用していないかチェックするために使用されます。
2. ``commit-msg``: コミットメッセージに禁止パターンが含まれているかを判断するために使用されます。
3. ``prepare-commit-msg``: マージコミットが、履歴のどの時点でも禁止パターンを含む履歴を導入するかどうかを判断するために使用されます。このフックは非fast-forwardマージの場合にのみ呼び出されることに注意してください。
.. note::
Gitでは、フックごとに1つのスクリプトのみを実行できます。リポジトリに ``pre-commit.d`` や ``commit-msg.d`` のようなDebianスタイルのサブディレクトリが存在する場合、gitフックはこれらのディレクトリにインストールされます。これは、対応するフックがこれらのディレクトリ内のすべてのスクリプトを実行するように設定されていることを前提としています。これらのgitサブディレクトリが存在しない場合、gitフックはgitリポジトリの ``.git/hooks`` ディレクトリにインストールされます。
例 ^^^^^^^^
カレントディレクトリにgitフックをインストール::
cd /path/to/my/repository
git secrets --install
カレントディレクトリ以外のリポジトリにgitフックをインストール::
git secrets --install /path/to/my/repository
git-secrets がインストールされたgitテンプレートを作成し、そのテンプレートをgitリポジトリにコピー::
git secrets --install ~/.git-templates/git-secrets
git init --template ~/.git-templates/git-secrets
既存のフックがあれば上書き::
git secrets --install -f
--scan のオプション
``-r, --recursive``
指定されたファイルを再帰的にスキャンします。ディレクトリが見つかった場合、そのディレクトリがスキャンされます。``-r`` が指定されない場合、ディレクトリは無視されます。
``-r`` は ``--cached``、``--no-index``、または ``--untracked`` と一緒に使用できません。
``--cached``
インデックスファイルに登録されているblobを検索します。
``--no-index``
gitで管理されていないカレントディレクトリ内のファイルを検索します。
``--untracked``
ワーキングツリー内の追跡ファイルに加えて、``--scan`` は追跡されていないファイルも検索します。
``<files>...``
シークレットをスキャンするディスク上の1つ以上のファイルへのパス。
ファイルが指定されない場合、``git ls-files`` によって返されるすべてのファイルがスキャンされます。
例
^^^^^^^^
リポジトリ内のすべてのファイルをスキャン::
git secrets --scan
単一のファイルをシークレットについてスキャン::
git secrets --scan /path/to/file
ディレクトリを再帰的にシークレットについてスキャン::
git secrets --scan -r /path/to/directory
複数のファイルをシークレットについてスキャン::
git secrets --scan /path/to/file /path/to/other/file
globを使ってスキャンすることもできます::
git secrets --scan /path/to/directory/*
標準入力からスキャン::
echo 'hello!' | git secrets --scan -
``--list`` のオプション
--global
グローバルgit config内のgit-secrets設定のみを一覧表示します。
--add のオプション
``--global``
グローバルgit configにパターンを追加します。
``-l, --literal``
指定されたパターン内の正規表現特殊文字をエスケープし、パターンをリテラルとして検索します。
``-a, --allowed``
パターンを禁止ではなく許可としてマークします。許可パターンは誤検出を除外するために使用されます。
``<pattern>``
検索する正規表現パターン。
例
^^^^^^^^
現在のリポジトリに禁止パターンを追加::
git secrets --add '[A-Z0-9]{20}'
グローバルgit configに禁止パターンを追加::
git secrets --add --global '[A-Z0-9]{20}'
リテラルとしてスキャンされる文字列を追加 (``+`` はエスケープされます)::
git secrets --add --literal 'foo+bar'
許可パターンを追加::
git secrets --add -a 'allowed pattern'
``--register-aws`` のオプション
--global
AWS固有の設定変数をグローバルgit configに追加します。
--aws-provider のオプション
``[<credentials-file>]``
指定された場合、スキャンするINIファイルのカスタムパスを指定します。指定されない場合、``~/.aws/credentials`` が使用されます。
``--add-provider`` のオプション
--global
プロバイダーをグローバルgit configに追加します。
<command>
呼び出すプロバイダーコマンド。呼び出されると、コマンドは禁止パターンを改行で区切ってstdoutに出力することが期待されます。追加の引数はコマンドに渡されます。
例 ^^^^^^^^
引数付きのシークレットプロバイダーを登録::
git secrets --add-provider -- git secrets --aws-provider
ファイルからシークレットを出力::
git secrets --add-provider -- cat /path/to/secret/file/patterns