#author("2021-06-22T06:49:44+00:00","default:src128","src128") #author("2021-06-23T04:42:17+00:00","default:src128","src128") &tag(git-secrets); *目次 [#t7c7efc7] #contents *関連ページ [#t4c72c3d] *参考情報 [#i864e4cd] -[[awslabs/git-secrets: Prevents you from committing secrets and credentials into git repositories:https://github.com/awslabs/git-secrets]]…公式サイト。 *インストール [#xf1918d1] -Homebrewの場合 brew install git-secrets -MacPortsは存在しない。しかし単なるシェルスクリプトなので以下で良い make install *初期設定 [#l2c8a18f] -特定のgitリポジトリでだけ使用する場合。 #pre{{ cd /path/to/my/repo git secrets --install git secrets --register-aws }} -これによって.git/configの「secrets」のなかに設定が保存される。 *Tips [#q41974ee] **「--register-aws」の意味 [#p399ce5b] -aws向けの設定をconfigに追加するとともに、~/.aws/credentialsに含まれるキーがソースコードに含まれないことを保証するためのオールインワンオプション。 -以下のような情報が追加される。 #pre{{ [secrets] providers = git secrets --aws-provider patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16} patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')\ ?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')? patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[\ 0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')? allowed = AKIAIOSFODNN7EXAMPLE allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY }} -この並びに意味はない?最初の「providers = git secrets --aws-provider」が~/.aws/credentialsのチェックに使われ、のこりは一般的なチェックパターン(と許可パターン)ということだと思われる。 **「--add-provider」ってどういうオプション? [#s2e6f878] -[[git-secrets 導入 — シガナイエンジニアの雑記:https://r-square.net/CI/04_git_secrets.html]]が参考になる。 git secrets --add-provider -- cat SECRET_WORDS.txt -するとconfigに以下の設定が追加される。 #pre{{ providers = cat SECRET_WORDS.txt }} -providersで指定されたコマンドがチェックで実行されるというような意味だと思われる。 **awsのどのパターンがマッチしているか知りたい [#t8735e18] -git-secretsは設定さえたpatternsを結合してgrepに渡しているだけ。 -どこがマッチしたかを表示するオプションは存在しない? -しかし.git/configなどの設定ファイルからpatternsを1つずつ削除していってその都度スキャンすればどれがマッチしたかは絞り込める。 **patternsとallowedの関係 [#i7815412] -公式サイトには以下のような情報が含まれている。まず最初にpatternsにマッチした行が集められ、それがallowedで打ち消されるかチェックするということっぽい。 #pre{{ まず、git-secrets はファイルから禁止されたマッチを含むすべての行を抽出します。マッチした結果に含まれるのは、マッチしたファイル名のフルパスの後に ':' が続き、マッチした行番号が続き、シークレットパターンでマッチしたファイルの行全体が続きます。そして、許可される正規表現を定義している場合は、git-secrets はマッチしたすべての行が登録した許可される正規表現の少なくともひとつにマッチするかどうかを調べます。秘密と判定された行がすべて許可されたマッチで打ち消された場合は、そのサブジェクトテキストには秘密が含まれていません。一致した行のどれかが許可された正規表現に一致しなかった場合、git-secrets はコミット/マージ/メッセージを失敗させます。 }} *トラブルシューティング [#m82f26e8] **aws_access_key_idにマッチしない? [#me2d7311] -例えば[[AWSアクセスキーをGitリポジトリに混入させないために git-secrets を導入した | DevelopersIO:https://dev.classmethod.jp/articles/startup-git-secrets/]]のサンプルは3行目しかマッチしない。 #pre{{ [default] aws_access_key_id = AKIAIOSFODNN7EXAMPLo aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEo }} -「aws_access_key_id=」にマッチするpatternsは存在しないので、マッチするとすれば「patterns = [A-Z0-9]{20}」だが、これも大文字数字20文字なのでマッチしない。原因は不明。 -以下の正規表現だと「aws_account_id=」にしかマッチしないのでは。 (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?