SECURITY GUIDE
GitHubで安全に開発する
→ キーで次へ
ゴール: 開発中のセキュリティリスクを理解し、事故を未然に防ぐ習慣を身につける
実際の事故事例と対策の概要
→ 実際の事故例で危機感を持つ
.env・環境変数・.gitignoreの使い方
→ APIキーを漏洩させない具体的な方法
git-secrets / Dependabotの導入と設定
→ git-secrets / Dependabotで人間のミスを機械が防ぐ
GPG署名・2FA・SSH鍵の設定
→ 「本人が書いた」ことを証明する仕組み
ブランチ保護・Advanced Security
→ ブランチ保護 / Advanced Securityで組織的に守る
セキュリティ対策の確認項目
→ 今日からできるセキュリティ対策一覧
実際にあった事故
AWS APIキーをGitHubにpush
→ 数分でボットに検出される
→ 仮想通貨マイニングに悪用
→ 一晩で数十万円の請求
GitHubの公開リポジトリは常にスキャンされている。シークレットを1秒でも公開すると危険。
でも防げる!
正しい知識があれば、事故はほぼ100%防げる
.env ファイル
これを絶対にコミットしない!
.gitignore
プロジェクト開始時に必ず設定
git-secrets とは?
AWSが開発したツール。git commit 時にフックが走り、AWSキーやパスワードのパターンを検出してコミットをブロックする。
何をしてくれる?
有効化方法
Dependabotが自動でPRを作成。レビューしてマージするだけ。
lodash < 4.17.21 に任意コード実行の脆弱性。Dependabot PRで修正可能。
express 4.17.x にReDoS脆弱性。4.18.2以上にアップデート推奨。
GitHubはCVEデータベースと連携し、使用中のパッケージに脆弱性が見つかるとアラートを送信。
Settings → Code security and analysis で通知を有効化しよう。
なぜ署名が必要?
git config user.email は誰でも自由に設定できる。つまり他人になりすましてコミットできてしまう。
GPG/SSH署名で「このコミットは本当に自分が作った」と証明できる。
SSH署名がおすすめ
Git 2.34以降はSSH鍵で署名可能。GPGより設定が簡単!
パスワードだけでは危険
パスワードが漏洩すると、誰でもあなたのアカウントにログインできてしまう。
2023年からGitHubは全ユーザーに2FA必須化を段階的に実施中
設定方法
Google Authenticator / 1Password / Authy など
Settings → Password and authentication → Enable 2FA
スマホ紛失時のためにリカバリーコードを安全な場所に保管!
YubiKeyなどのハードウェアキーが最も安全
多くの企業・OSSプロジェクトでは2FA必須。設定していないとOrganizationに参加できないことも。
セキュリティの観点からmainブランチを守る設定
Require pull request reviews
直接pushを禁止し、PRレビューを必須にする。悪意あるコードや脆弱なコードが混入するのを防ぐ。
Require signed commits
署名なしのコミットをブロック。なりすましコミットを防止。
Require status checks
CIテスト(GitHub Actions)が通らないとマージ不可。セキュリティスキャンを必須にできる。
Restrict who can push
特定のユーザー/チームだけがmainにpush可能。管理者でもルール適用を強制できる。
Settings → Branches → Add branch protection rule で設定。
Do not allow bypassing the above settings にチェックを入れると管理者にも適用。
SECURITY.md とは?
脆弱性を発見した人に「どこに・どうやって報告すればいいか」を伝えるファイル。Responsible Disclosure(責任ある開示)のガイド。
リポジトリルートまたは .github/ に置く。GitHub Security タブにも表示される。
テンプレート
Code Scanning
CodeQLエンジンがコードを解析し、SQLインジェクションやXSSなどの脆弱性を自動検出。
PRごとにスキャン実行可能
Secret Scanning
コード内のAPIキー、トークン、パスワードを自動検出。パートナープログラムで自動無効化も。
公開リポジトリは無料で有効
Dependency Review
PRで追加・変更される依存パッケージの脆弱性をマージ前にチェック。
危険な依存を事前にブロック
公開リポジトリ: Secret Scanning & Dependabot は無料
プライベートリポジトリ: GitHub Enterprise で Advanced Security ライセンスが必要
まずは無料機能から始めよう!
全ての開発者がやるべきこと
個人の設定
リポジトリの設定
防御
.gitignore
git-secrets
検出
Dependabot
Secret Scanning
証明
署名コミット
2FA
統制
Branch Protection
SECURITY.md
安全な開発
Secure SDLC
🔒
シークレットは
絶対にコミットしない
.gitignore + git-secrets
🔄
依存パッケージは
常に最新に
Dependabot + アラート
🔐
認証を強化し
本人を証明する
2FA + 署名コミット
セキュリティは「やるかやらないか」。今日から始めよう。
| コマンド | 説明 |
|---|---|
| ── Secrets管理 ── | |
git add . |
全ての変更をステージングエリアに追加 |
git commit -m "メッセージ" |
ステージングされた変更をコミット |
git push origin main |
ローカルの変更をリモートにプッシュ |
git push origin main --force |
リモートの履歴を強制的に上書き(履歴改変後に使用) |
echo ".env" >> .gitignore |
.gitignoreに.envファイルの除外ルールを追加 |
git rm --cached .env |
追跡対象から.envを削除(ファイル自体は残す) |
git filter-branch --force --index-filter "..." HEAD |
Gitの全履歴からファイルを完全に削除 |
| ── git-secrets ── | |
brew install git-secrets |
Homebrewでgit-secretsをインストール |
git secrets --install |
リポジトリにgit-secretsのフックを設定 |
git secrets --register-aws |
AWSキーの検出パターンを登録 |
git secrets --add --allowed ... |
誤検知パターンをホワイトリストに追加 |
git secrets --list |
登録済みの検出パターン一覧を表示 |
| ── 署名付きコミット ── | |
git config --global gpg.format ssh |
署名形式をSSHに設定 |
git config --global user.signingkey ~/.ssh/id_ed25519.pub |
署名に使うSSH公開鍵を指定 |
git config --global commit.gpgsign true |
全てのコミットに自動署名を有効化 |
git config user.email |
コミットに使用するメールアドレスの設定・確認 |
git commit -m "feat: ..." |
署名付きコミットを作成(gpgsign=trueの場合自動署名) |
git log --show-signature -1 |
最新コミットの署名検証結果を表示 |
| ── Dependabot設定 (YAML) ── | |
.github/dependabot.yml |
Dependabotの設定ファイル(配置するだけで有効化) |
version: 2 |
Dependabot設定ファイルのバージョン指定 |
package-ecosystem: |
パッケージマネージャの種類を指定(npm, pip等) |
schedule: / interval: |
更新チェックの頻度を指定(daily, weekly, monthly) |