こんにちは。DevOpsの世界へようこそ。
あなたがコードを書くとき、一番怖いものは何ですか? バグ? サーバーダウン? いえ、もっと恐ろしいのは「秘匿情報の流出」です。一度でもAPIキーやデータベースのパスワードが公開リポジトリに晒されれば、数分以内に世界中の攻撃者に拾われ、あなたのインフラは食い物にされます。
今日は、GitHubが提供する強力な盾「GitHub Advanced Security (GHAS)」の要、シークレットスキャン(Secret Scanning)を徹底攻略します。これを設定するだけで、あなたの組織は「うっかり事故」から解放されます。
—
1. なぜ「ツール」ではなく「仕組み」で防ぐのか?
初心者のうちは「気をつけてコミットすればいい」と考えがちです。しかし、人間は必ずミスをします。深夜の疲れた頭で、テスト用のAPIキーを消し忘れて `git push` する。これは防ぎようのない事故です。
GitHub Advanced Securityは、あなたの代わりにコードの隅々を24時間監視し、秘匿情報が紛れ込んでいないかチェックする「門番」です。この門番を雇うことは、現代のエンジニアにとっての最低限の教養と言えます。
—
2. 最初のセットアップ:門番を起動しよう
まずは、リポジトリでシークレットスキャンを有効にします。
1. GitHubのリポジトリ画面で 「Settings」 を開く。
2. 左サイドバーの 「Code security and analysis」 をクリック。
3. 「Secret scanning」 の項目で 「Enable」 をクリック。
これだけで、GitHubがサポートしている数百種類のプロバイダー(AWS, Google Cloud, Slack, Stripeなど)のキーパターンを自動的に監視し始めます。
—
3. 【実務レベル】HelloWorld:わざと検知させる
本当に動いているか不安ですよね? 実際にダミーのキーをプッシュして、検知されるか試してみましょう。
手順:
1. リポジトリに `test-keys.txt` を作成。
2. 中に以下のような文字列を書き込みます(これはAWSのダミー形式です)。
# これはテスト用のダミーキーです。絶対に本物を使わないでください。
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
3. `git add .` して `git push`。
数秒後、GitHubの 「Security」タブ の 「Secret scanning」 を確認してください。驚くほど正確にアラートが上がっているはずです。
—
4. 独自ルールを作ろう:カスタムパターンの追加
GitHubが標準で用意しているもの以外にも、組織独自の「社内専用APIキー」や「命名規則」があるはずです。これを検知させないと、本当のセキュリティとは言えません。
カスタムパターンの設定手順:
1. Settings > Code security and analysis > Secret scanning の画面の下部にある「Custom patterns」から「New pattern」を作成。
2. 正規表現(Regex)を使ってキーのパターンを定義します。
例:社内用の認証トークン(`SEC-` で始まり、英数字16文字)を検知する設定
正規表現の例
SEC-[A-Z0-9]{16}
- Secret name: `Internal-Company-Token`
- Regex: `SEC-[A-Z0-9]{16}`
- Test: 先ほどのダミーキーを入力して「Match」することを確認。
—
5. 検知した後の「理想的なフロー」
検知した後の対応こそが、プロの腕の見せ所です。単にアラートを消すだけではダメです。以下の手順をチームの規約にしましょう。
1. 無効化(Revoke): 何よりも先に、当該キーをクラウド側(AWS管理画面など)で無効化する。
2. 回転(Rotate): 新しいキーを発行し、アプリケーション側の環境変数を更新する。
3. 解決(Resolve): GitHub上でアラートの「Close」を選択。「Revoked(無効化済み)」というステータスで閉じるのがベストプラクティスです。
—
魂のアドバイス:Gitの歴史は書き換えられない
最後に一つだけ、プロとして厳しいことを言います。
一度プッシュしたシークレットは、たとえ後から削除してもGitの履歴(コミットログ)に残ります。
もし本物のキーを流出させてしまったら、`git rm` するだけでは不十分です。`git filter-repo` や `BFG Repo-Cleaner` を使って履歴から完全に削除するか、即座にそのキー自体を無効化する必要があります。
「後で消せばいい」という甘えを捨て、「最初からリポジトリに入れない」という文化をチームで作ること。それが、あなたがDevOpsスペシャリストへの階段を登る第一歩です。
設定で分からないことがあれば、いつでも聞いてください。安全な開発ライフを!