セキュリティ
LionsheadのすべてのPRに含まれるセキュリティチェック
The security checks in every Lionshead PR (lionshead.digital)
要約
個人開発者がエンタープライズ規模のセキュリティ対策を導入する重要性について論じています。大規模なインシデント対応体制を持たない個人開発者にとって、データ漏洩は製品の終焉を意味するため、PR(プルリクエスト)ごとに自動化されたセキュリティチェックを実行し、脆弱性が本番環境に到達する前にブロックしています。Trivy、Gitleaks、Checkov、OWASP ZAPなどのオープンソースツールを活用し、依存関係の脆弱性、ハードコードされた認証情報、インフラ設定の不備などを検出しています。
全文翻訳
2026-07-12LionsheadのすべてのPRに含まれるセキュリティチェックエンタープライズ規模では、侵害は悪い四半期を意味します。開示を調整するための法務チーム、毎年訓練する災害復旧計画、物語をコントロールするためのPRチーム、インシデントを検疫、調査、トリアージするためのセキュリティチーム、規制上の罰金、集団訴訟の和解、そしてそれに続く顧客離れを吸収するのに十分な銀行口座があります。ソロ規模では、それらのどれもありません。ユーザーデータの実際の侵害は、ほぼ確実に製品を終了させます。「ブランドに傷がつく」とか、「四半期遅れる」ということではありません。終了します。だから、まず自分で侵害します。LionsheadのすべてのPRにおけるセキュリティスタックは、自動化された自己侵害です。すべてのマージ試行は、中規模のセキュリティチームが本番コードに対して週に一度実行するツールによってスキャンされます。それらのいずれかが何かを見つけた場合、マージはブロックされます。脆弱性は本番環境に到達せず、インシデントを引き起こした私自身のバージョンはチャンスを得られません。Lionsheadのすべての製品に対するすべてのPRで実際に実行されるのは次のとおりです。Trivyファイルシステム — リポジトリ全体にわたる脆弱性、秘密情報、ライセンスのスキャン。すべてのPRで実行され、パスゲートはありません。依存関係のCVE、偶発的なハードコードされた認証情報、ライセンスの競合を検出します。リポジトリルートのtrivy.yamlで設定され、CRITICALまたはHIGHのいずれかの深刻度で失敗します。TrivyはAqua Securityのオープンソーススキャナーであり、私が使用した中で最高の無料脆弱性スキャナーです。Trivy IaC (Terraform) — 同じツール、セカンドモードで、Terraformファイルに対して実行されます。安全でないインフラストラクチャのデフォルト(パブリックバケット、許可されたIAMロール、暗号化されていないリソース)を検出します。パスゲート付き:terraform/**ファイルが変更された場合にのみ実行されます。同じ深刻度ゲート。Gitleaks — 現在の差分だけでなく、git履歴全体にわたる秘密情報のスキャン。APIキー、トークン、秘密鍵、数年前にコミットして後で削除した接続文字列を検出します。秘密情報は履歴に残っており、悪用可能です。すべてのPRで実行されます。リポジトリが.gitleaks.tomlオーバーライドをドロップしない限り、デフォルトのルールセットを使用します。Checkov — Trivy IaCと並行して実行される2番目のIaCセキュリティスキャナーで、防御のために実行されます。CheckovとTrivy IaCは異なるルールセットと異なるヒューリスティックを使用しており、異なるクラスの問題を検出します。terraform/**に対してパスゲート付き。既知の誤検出ルールのスキップリストは.checkov.yamlに配置されます。OWASP ZAPベースライン — PRのVercelプレビューURLに対するアクティブなDAST。リポジトリがプレビューデプロイを生成すると、ZAPはそのデプロイされたサイトにベースラインセキュリティスキャンを実行します。欠落しているセキュリティヘッダー、Cookie設定の問題、一般的なインジェクションベクトルを検出します。WARN+アラートで失敗します。ルールごとの抑制は、リポジトリの.zap/rules.tsvにあります。Actionlint — GitHub Actionsワークフローのリンティング。厳密にはセキュリティではありませんが、セキュリティに隣接しています。ワークフローのアクセスをサイレントに過剰にスコープする可能性のある構文エラー、無効なコンテキスト、および権限スコープのタイポを検出します。.github/workflows/**に対してパスゲート付き。Shellcheck — シェルスクリプト静的解析。引用エラー、コマンドインジェクションパターン、およびキャリアを単一の脆弱性よりも多く終了させた古典的な「rmコマンドでの未引用変数」バグを検出します。*.shファイルに対してパスゲート付き。Hadolint — Dockerfileリンティング。コンテナエスケープ時の影響範囲を拡大する、安全でないイメージベース、欠落したUSERディレクティブ、その他のDockerfile形状の問題を検出します。Dockerfile*に対してパスゲート付き。Action pins check — Lionsheadが作成したガードレールで、ワークフローファイルで参照されているすべてのサードパーティGitHubアクションが、移動するタグではなく、完全なコミットSHAにピン留めされていることを検証します。アクションのタグに対するサプライチェーン攻撃がLionsheadのCIにサイレントに伝播するのを防ぎます。SHAピンなしでアクションを追加または更新するPRを失敗させます。Infracost + OPAコストゲート — CVEの意味でのセキュリティではありませんが、「間違いで月に1万ドル請求される」という意味でのセキュリティです。すべてのTerraform PRで実行され、コスト差を計算し、差が月に50ドルを超えた場合にGitHub環境承認ゲートでPRを一時停止します。これは前回の投稿でより詳細にカバーしました。同じワークフローに存在するため、ここで言及しました。さらに2つのレイヤーがPRゲートの外で実行されます。スケジュールされたセキュリティ監査 — すべての製品リポジトリは、デフォルトブランチに対して毎日lionshead-security-audit.ymlを実行します。これはnpm audit(または言語に応じた同等のもの)と完全なTrivyファイルシステムスキャンを実行します。検出された問題は、リポジトリごとに単一のsecurity:dependencyトラッキング問題をオープンまたは更新します。クリーンな実行は、開いている問題を閉じます。PR時に導入されたものだけでなく、コードがマージされた後に開示されたCVEを検出することが目的です。実際のCVEの大部分は、本番環境にあるコードに対して開示されます。PRタイムスキャンだけではそれらを逃します。Renovate — 依存関係更新自動化。ci-standards Renovateプリセットは、1行のrenovate.jsonを介してすべての製品リポジトリに適用されます。Renovateは、依存関係を更新し、アクションSHAをピン留めし、ベースコンテナイメージを更新するためのPRを開きます。そのgithub-actionsマネージャーは、ピン留めされた再利用可能なワークフローSHAを最新の状態に保ちます。これにより、新しい製品がtemplate-productからクローンされたときに、手動介入なしで最新のci-standardsワークフローに留まります。週次のスケジュールにより、ノイズが制限されます。ロードマップには3つの項目がありますが、まだ出荷されていません。Semgrep (SAST) — セキュリティベースラインは、GitHub Advanced Securityの無料オープンソース代替として、静的解析カバレッジのためにSemgrep OSSを義務付けています。すべての製品へのロールアウトが進行中です。スケジュールされたcronとしてのOWASP ZAP(開発環境向け) — 現在、ZAPはプレビューURLに対してPRタイムで実行されます。計画は、プレビュービルドと、より長く存在する環境との間のドリフトを検出するために、共有開発環境に対しても週に一度ZAPを実行することです。Pre-commitフック — コードがPRに到達する前に、最も厄介な失敗モード(少なくともGitleaksプリコミットスキャン)を実行するHusky駆動のローカルフックスタック。プッシュする前に間違いを検出することで、完全な往復時間を削除します。次に出荷するショートリストにあります。スタック全体でライセンス費用はゼロです。上記のすべてのツールはオープンソースです。コストは、それらを配線する時間と、誤検出抑制を調整する継続的な時間です。そのコストは、数ヶ月ではなく、一度数時間で測定されます。それが購入するものは、「私の製品が生き残る」と「私の製品が終わる」の違いです。それは、午後11時にTerraform PRを誤って入力した場合のシナリオです。これは、まったく同じ理由でエンタープライズ規模の取引のように見えます。次にCI/CDサブシリーズで:ZAPが実行されるプレビュー環境パターン。Vercel + PRごとに新しいNeon Postgresブランチ、レビュー担当者がすべてのPRで実際のデータベースと通信する実際の実行中のアプリケーションをどのように取得するか、そしてそれがほとんど費用がかからない理由。このシリーズでは:Lionsheadの構築2026-07-05なぜ私がソロ創業者規模でエンタープライズグレードのCIを実行するのか2026-06-28コロフォン、そしてなぜ私がその言葉を聞いたことがなかったのか2026-05-23リコンサイラー:モノレポなしで10のリポジトリ全体に標準を分散させる#building-lionshead#ci-cd#security