📖 8分で読める

【セキュリティ #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[本番環境]
用語意味
CIContinuous Integration(継続的インテグレーション)
CDContinuous 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するたびに自動チェックが走るようになりました!


💡 この記事は個人プロジェクト向けです。 業務環境ではより厳格なチェックが必要な場合があります。


シリーズ目次

  1. サンドボックスとは?
  2. SSH鍵認証入門
  3. Deploy Key を使う
  4. AIエージェントのリスク管理
  5. tmux でプロセス永続化
  6. CI/CD セキュリティチェック ← 今ここ

🎉 シリーズ完結!

これで OpenClaw セキュリティシリーズは完結です。

✅ サンドボックスで隔離
✅ SSH鍵で安全な接続
✅ Deploy Key で権限限定
✅ AGENTS.md でルール定義
✅ tmux で安定運用
✅ CI/CD で自動チェック

個人VPSでも、これだけやれば十分安全に運用できます!