【セキュリティ #6】CI/CD セキュリティチェック — 自動で守る
⚠️ 注意 この記事は個人の学習記録です。筆者はセキュリティの専門家ではありません。 本番環境や機密性の高いシステムでは、必ず専門家に相談してください。
本記事の内容を参考にした結果について、筆者は一切の責任を負いません。
背景
このブログ(7sapiens-blog)をGitHubにpushしたら、自動でCloudflareにデプロイされるようになりました。便利!
でも、ふと不安になりました。
「うっかりAPIキーをコミットしちゃったら?」 「使ってるライブラリに脆弱性があったら?」
毎回手動でチェックするのは大変…。そこで、GitHub Actions で自動チェックを設定することにしました。
pushするたびに、gitleaks(秘密漏洩)、npm audit(脆弱性)、lychee(リンク切れ)が自動で走ります。
今日実際に設定したので、その内容をまとめます。
この記事で学べること
- CI/CD とは何か
- なぜセキュリティチェックを自動化するのか
- GitHub Actions での実装方法
- 具体的なチェック項目
CI/CD とは
graph LR A[コード変更] --> B[CI: 自動テスト] B --> C[CD: 自動デプロイ] C --> D[本番環境]
| 用語 | 意味 |
|---|---|
| CI | Continuous Integration(継続的インテグレーション) |
| CD | Continuous Deployment(継続的デプロイ) |
なぜ自動化?
手動チェックの問題
😅 「今回は忘れてた」
😰 「急いでたからスキップした」
🤯 「全部確認するの大変すぎ」
自動化のメリット
graph TD
A[コードをプッシュ] --> B[自動でチェック開始]
B --> C{問題あり?}
C -->|Yes| D[❌ 警告・ブロック]
C -->|No| E[✅ デプロイ続行]
毎回、同じチェックが自動で実行される!
セキュリティチェック項目
1. 秘密漏洩検出(gitleaks)
❌ APIキーがコードに含まれてない?
❌ パスワードがハードコードされてない?
❌ 秘密鍵がコミットされてない?
2. 依存関係の脆弱性(npm audit)
❌ 使ってるライブラリに脆弱性ない?
❌ 古いバージョンで危険なものない?
3. リンク切れ検出(lychee)
❌ ドキュメントのリンクが切れてない?
❌ 参照先が消えてない?
GitHub Actions での実装
ワークフローファイル
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# 秘密漏洩チェック
- name: Gitleaks
uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 依存関係チェック
- name: npm audit
run: npm audit --audit-level=high
continue-on-error: true
# リンク切れチェック
- name: Lychee
uses: lycheeverse/lychee-action@v1
with:
args: --verbose './src/**/*.md' './src/**/*.mdx'
continue-on-error: true
仕組み
sequenceDiagram participant Dev as 開発者 participant GH as GitHub participant CI as GitHub Actions participant Prod as 本番環境 Dev->>GH: git push GH->>CI: ワークフロー起動 CI->>CI: ビルド CI->>CI: gitleaks(秘密漏洩) CI->>CI: npm audit(脆弱性) CI->>CI: lychee(リンク切れ) CI-->>GH: 結果報告 GH-->>Dev: ✅ or ❌ GH->>Prod: デプロイ(成功時)
実際の効果
Before(手動)
1. コード書く
2. プッシュ
3. (チェック忘れる)
4. 本番で問題発覚 💀
After(自動)
1. コード書く
2. プッシュ
3. 自動チェック実行
4. 問題あれば即通知 ✅
ベストプラクティス
1. 段階的に導入
最初から完璧を目指さない
→ まずビルド確認から
→ 徐々にチェック追加
2. continue-on-error を活用
- name: npm audit
run: npm audit
continue-on-error: true # 警告は出すがブロックしない
3. 通知設定
失敗時は Slack/Discord に通知
→ 気づかないを防ぐ
まとめ
| ポイント | 説明 |
|---|---|
| 自動化 | 人間のミスを防ぐ |
| 一貫性 | 毎回同じチェック |
| 早期発見 | 本番前に問題検出 |
今日設定したCI/CDで、pushするたびに自動チェックが走るようになりました!
💡 この記事は個人プロジェクト向けです。 業務環境ではより厳格なチェックが必要な場合があります。
シリーズ目次
- サンドボックスとは?
- SSH鍵認証入門
- Deploy Key を使う
- AIエージェントのリスク管理
- tmux でプロセス永続化
- CI/CD セキュリティチェック ← 今ここ
🎉 シリーズ完結!
これで OpenClaw セキュリティシリーズは完結です。
✅ サンドボックスで隔離
✅ SSH鍵で安全な接続
✅ Deploy Key で権限限定
✅ AGENTS.md でルール定義
✅ tmux で安定運用
✅ CI/CD で自動チェック
個人VPSでも、これだけやれば十分安全に運用できます!