この記事は、 ギルドワークス アドベントカレンダー の10日目の記事です。
業務でAWSを触ることもあり、AWSクレデンシャル情報に触れる機会も増えてきました。
AWSアクセスキーの漏洩の話を聞くこともときどきあり、漏洩を未然に防ぐために git-secrets というツールを設定したときのメモになります。
インストール
macOSでHomebrew環境の場合、下記を実行でインストールが完了します。
$ brew update
$ brew install git-secrets
設定
以下のコマンドを実行し、AWSアクセスキーの標準パターンをGitの設定ファイルに書き込みます。
git secrets –register-aws –global
下記の様に、~/.gitconfigに設定が追記されたら成功です。
[secrets]
providers = git secrets –aws-provider
patterns = [A-Z0-9]{20}
patterns = (“|’)?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(|key|Key)(“|’)?s*(:|=>|=)s*(“|’)?[A-Za-z0-9/+=]{40}(“|’)?
patterns = (“|’)?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(id|Id)?(“|’)?s*(:|=>|=)s*(“|’)?[0-9]{4}-?[0-9]{4}-?[0-9]{4}(“|’)?
allowed = AKIAIOSFODNN7EXAMPLE
allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
allowedの行にあるのは、AWS自身が公式ドキュメントで使用している アクセスキーのサンプル みたいです。
実行してみる
1つ目のパターン
[A-Z0-9]{20}
README.mdに以下を記述し、git commitを実行すると警告が表示されます。
00000000000000000000
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXX
以下のような警告が表示され、README.mdの1行目と2行目が原因でコミットができなくなります。
README.md:1:00000000000000000000
README.md:2:XXXXXXXXXXXXXXXXXXXX[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
2つ目のパターン
(“|’)?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(|key|Key)(“|’)?s*(:|=>|=)s*(“|’)?[A-Za-z0-9/+=]{40}(“|’)?
README.mdに以下を記述し、git commitを実行すると警告が表示されます。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
aws_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
access_key_id: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
secret_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
secret_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
secret_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
aws_secret_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
secret_access_key_id: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
以下のような警告が表示され、README.mdの3行目、5行目、8行目、10行目が原因でコミットができなくなります。
README.md:3:access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
README.md:5:aws_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
README.md:8:secret_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
README.md:10:aws_secret_access_key: ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’[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
3つ目のパターン
(“|’)?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(id|Id)?(“|’)?s*(:|=>|=)s*(“|’)?[0-9]{4}-?[0-9]{4}-?[0-9]{4}(“|’)?
README.mdに以下を記述し、git commitを実行すると警告が表示されます。
0000-0000-0000
aws_account: ‘0000-0000-0000’
aws_account: ‘0000-0000-000’
aws_account: ‘000000000000’
aws_account: ‘0000000000001’
aws_account_id: ‘0000-0000-0000’
AWS_ACCOUNT_ID: ‘0000-0000-0000’
aws_ACCOUNT_id: ‘0000-0000-0000’
aws_ACCOunt_id: ‘0000-0000-0000’
以下のような警告が表示され、README.mdの2行目、4行目、6行目、7行目、8行目が原因でコミットができなくなります。
README.md:2:aws_account: ‘0000-0000-0000’
README.md:4:aws_account: ‘000000000000’
README.md:6:aws_account_id: ‘0000-0000-0000’
README.md:7:AWS_ACCOUNT_ID: ‘0000-0000-0000’
README.md:8:aws_ACCOUNT_id: ‘0000-0000-0000’[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
最後に
git-secretsの設定はリポジトリごとに.git/configファイルを編集することで、各リポジトリにallowedやpatternsを設定することができます。ローカル環境全体でgit-secretsを有効にしつつ、細かい例外を各リポジトリごとに設定することで、柔軟に運用することができます。
最悪の事態を未然に防ぐためのツールとして、一度試してみてはいかがでしょうか。
この記事もどうですか?
-
MVP Award 受賞者インタビュー:第2回最優秀賞『Co-LABO MAKER』 〜これぞ仮説検証のなせるワザ!応募してからが面白い「MVP Award」受賞者の声〜
第二回最優秀賞を受賞した『 Co-LABO MAKER 』が「 MVP Award 」に応募してから1年が経ちました。今年はいよいよ開発が始まる段階となり、現在ギルドワークスでは要件定義とマネジメント部分をサポートしています。 「MVP A…
-
大工から引き継がれたソフトウェア職人気質
ソースのdiffを取るように、キャリアのdiffを取る 数年に1度は改訂する個人ドキュメントに、 職務経歴書 があると思います。ドキュメントとしては書くのにたいへん面倒な部類に入りますが、1回作っておくと後は更新で済むので、便利ですね。私が…
-
チームメンバーに自分を見せている?〜「ジョハリの窓」の紹介〜
「チームの成熟度」はプロジェクトの成功に必要なことの1つ プロジェクトがうまく進み、プロジェクトの目標に近づく要因の1つに チームの成熟度 があります。ここでは「メンバーそれぞれがお互いのことをどれほど知っていて、理解しあっているか?」をチ…