Pocket

こんばんは。

今日は、Gitリポジトリに機密情報などの登録を防ぐgit-secretsの導入について、まとめてみました。

なぜgit-secretsなのか

Webアプリケーション制作のカリキュラムの中で、AWS(Amazon Web Services)のS3というストレージサービスについて学んでいるのですが、このS3にアクセスするためのAccess key IDSecret access keyはソースコードに直接記載してはいけないと強く書かれていました。

その理由は、、、

  • 本番環境へデプロイするために、GitHubのRemote RepositoryにPushする必要がある。
  • Remote Repositoryは基本的に外部から閲覧可能な状態である。
  • つまり、悪意あるユーザーがAccess key IDとSecret access keyを使ってAWSのサービスを不正利用する危険性がある。

ということでした。

この文面だけみたら、「ははぁ、危険なんだなぁ」程度の認識でしたが、不正利用の実態を記した記事を読んでゾッとしたので、今回のテーマに取り上げました。

初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。 – Qiita

要するに、情報漏洩により「仮想通貨マイニング」などに利用されてしまい、AWSのS3は「使った分だけの費用請求」となることから、多額の請求を受けてしまうということです。

git-secretsの働き

機密情報をコードに書いてはいけないと頭ではわかりました。でも、どんなに気をつけていてもPushしてしまう可能性はゼロではありません。

そんなヒューマンエラーを防いでくれるのが、AWSが公開しているツールのgit-secretsです。

  • commit時に、事前に設定された正規表現にマッチする情報が含まれていたら、そのcommitを取り消す。
  • 任意のタイミングで、ファイルやディレクトリをスキャンすることもできる。

git-secretsのインストール

macOSのHomebrewを経由してインストールします。

$ brew install git-secrets

導入できたら、設定を適応したいアプリケーションのディレクトリに移動して、git-secretsを有効化します。

$ git secrets --install

git-secretsの制限条件を設定

ターミナルで下記コマンドを実行すると、AWS関連の秘密情報を一括で設定してくれます。これにより、このRepositoryでgit commitコマンドを実行した際に、AWSの秘密情報を含んでいないかチェックしてくれるようになりました。

% git secrets --register-aws --global

具体的にどんな制限が設定されているのか見てみましょう。

% git secrets --list

secrets.providers git secrets --aws-provider
secrets.patterns [A-Z0-9]{20}
secrets.patterns ("|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)("|')?\s*(:|=>|=)\s*("|')?[A-Za-z0-9/\+=]{40}("|')?
secrets.patterns ("|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?("|')?\s*(:|=>|=)\s*("|')?[0-9]{4}\-?[0-9]{4}\-?[0-9]{4}("|')?
secrets.allowed AKIAIOSFODNN7EXAMPLE
secrets.allowed wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

正規表現にあまり明るくないですが、

  • SECRETやACCESSという文字列+半角英数字の羅列
  • AWS+ACCOUNT_ID+半角英数字の羅列(これはARNのことでしょうか)

が制限されているということで、AWSに関わる秘密情報はカバーできてそうです。

以降作成するすべてのRepositoryに、git-secretsが適応されるようにするには、以下コマンドを実行します。

% git secrets --install ~/.git-templates/git-secrets
% git config --global init.templatedir '~/.git-templates/git-secrets'

まとめ

簡単ではありますが、git-secretsの導入についてまとめてみました。

冒頭に紹介した記事のとおり、機密情報のpushがどれだけ恐ろしいことか、理解できました。

git-secretsは必ず導入してから、開発を行いたいと思います。

投稿者

waco@jp

30代未経験でエンジニア転職を目指しています。前職はメーカーで営業と製品開発を担当。22年3月からTechCampを受講し、5月に卒業。現在、就活とオリジナルアプリケーション制作の両輪で活動しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です