CI/CDパイプラインの保護
ビルドからリリースまでの経路を堅牢化します。
「CI/CDパイプラインの保護」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
攻撃対象としてのパイプライン
CI/CDパイプラインは、ソースコード、シークレット、本番環境への特権アクセスを持っています。これを侵害されると、コードレビューを回避しながら今後のすべてのビルドにバックドアを注入される可能性があります。現代のエンジニアリングにおいて、最も価値の高い標的の1つです。
パイプラインは本番インフラストラクチャとして扱ってください。稼働中のシステムと同じように、強化、監視、最小権限の原則を適用する価値があります。
ビルドにおける信頼されていない入力
パイプラインは、プルリクエスト、タグ、外部からのコントリビューションなど、完全には制御できないイベントで自動的に実行されます。悪意のあるPRは、ビルド自体を変更しようとする可能性があります。
- フォークにある汚染されたパイプライン定義が、シークレットの外部流出を試みる可能性があります
- 信頼されていないコードが、信頼されたビルドと同じ権限で実行される可能性があります
信頼されたワークフローと信頼されていないワークフローを分離してください。外部からのプルリクエストで起動されるジョブにシークレットを公開してはいけません。
アクションとイメージを固定する
パイプラインのステップでは、可変タグでサードパーティーのアクションやコンテナイメージを取得することがよくあります。そのタグが悪意のある内容を指すように変更されると、ビルドが侵害されます。不変のダイジェストで固定してください。
# BAD: mutable tag can be moved under you
uses: some/action@v3
# GOOD: pinned to an immutable commit SHA
uses: some/action@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
# pin container steps by digest too
image: build-tools@sha256:9f86d081884c7d659a2feaa0c55ad015...トークンに最小権限を付与する
パイプラインのデフォルトトークンには過剰な権限が付与されていることが多く、リポジトリ全体やレジストリへの書き込みアクセスを許可しています。各ジョブが必要とする権限だけに範囲を絞ってください。
# scope the default token to read-only, grant more only where needed
permissions:
contents: read
jobs:
publish:
permissions:
contents: read
packages: write # only this job can publishシークレットの衛生管理
ハードコードされたシークレットや広範囲で共有されるシークレットは、主な情報漏洩経路です。厳格に取り扱ってください。
- シークレットはシークレットマネージャーまたはCIのシークレットストアに保存し、決してコードに含めないでください
- 静的なクラウドキーよりも短期間有効なOIDCフェデレーションを優先してください
- ログ内のシークレットをマスクし、エコーによる出力をブロックしてください
- 各シークレットの対象を、必要最小限のジョブと環境に限定してください
OIDCフェデレーションを使うと、パイプラインはビルド時のアイデンティティを短期間有効なクラウド認証情報と交換でき、長期間有効な鍵を完全に排除できます。
一時的で分離されたランナー
再利用されるビルドランナーには、あるジョブから次のジョブへマルウェアや漏洩したシークレットが引き継がれる可能性があります。一時的なランナーはジョブごとに新しく作成され、終了後に破棄されるため、何も残りません。
- ビルドごとにクリーンな環境を1つ使用し、終了後に破棄します
- 信頼されたジョブと信頼されていないジョブの間で状態を共有しません
- ネットワークの外向き通信を必要なエンドポイントに限定します
これはSLSA L3の分離目標を直接支援します。
ソースブランチを保護する
パイプラインの信頼性は、ソース管理から始まります。誰でもリリースブランチにプッシュできるなら、下流で署名やスキャンを行っても意味がありません。
- マージ前にプルリクエストのレビューを必須にします
- 保護されたブランチで署名付きコミットを強制します
- ステータスチェック(テスト、スキャン)の成功を必須にします
mainへの強制プッシュと直接プッシュを禁止します
# require signed commits on a branch
git config commit.gpgsign true
# verify a commit signature locally
git verify-commit HEADパイプライン内でスキャンする
セキュリティゲートをCIに直接組み込み、問題が本番環境に到達する前にビルドを失敗させます。
# secret leak detection
gitleaks detect --source . --redact
# dependency vulnerabilities
osv-scanner --lockfile=package-lock.json
# IaC and config misconfig
trivy config .
# fail the job on critical findings (non-zero exit stops CI)リリースにおける二者承認
影響の大きい操作には、人によるゲートを設けるべきです。本番環境へのデプロイや認証情報の変更には、作成者以外の人による承認を必須にしてください。
- 環境保護ルールによって、デプロイ前にレビュー担当者の承認を必須にします
- ビルド用のアイデンティティとデプロイ用のアイデンティティを分離します
- 1人の行為者が、コードを作成してレビューなしに本番環境へプッシュすることの両方をできないようにします
これにより、内部関係者によるリスクと、1つの侵害されたアカウントによる被害範囲の両方を抑えられます。
監査と改ざん検知性
パイプラインが実行した内容を再構成できなければなりません。そのログを一元化し、保護してください。
- CIログを追記専用でアクセス制御されたストアに送信します
- 誰がいつパイプライン定義を変更したかを記録します
- アーティファクトを特定のビルドまで追跡できるように、署名付きプロベナンスを出力します
- 新しいセルフホストランナー、予期しないシークレットへのアクセス、レビュー外での設定変更などの異常を検知したら警告します
パイプライン強化チェックリスト
防御可能なパイプラインは、ソース、ビルド、リリースの制御を組み合わせます。
- ブランチ保護、レビュー済みで署名されたコミット
- アクションとイメージをダイジェストで固定
- 最小権限で短期間有効なOIDCトークン
- 一時的で分離されたランナー
- パイプライン内でのシークレット、依存関係、設定のスキャン
- リリースにおける二者承認
- 監査ログ付きの署名済みアーティファクト、SBOM、プロベナンス
クイックチェック:トークンの権限
特権ビルドトークンに適した制御を判断してみましょう。
まとめ:CI/CDパイプラインの保護
ビルドとリリースの経路全体を強化する方法を学びました。
- パイプラインを本番環境として扱います。今後のすべてのビルドにバックドアを仕込めるためです
- 信頼されていないPRのビルドをシークレットから分離します
- アクションとイメージをダイジェストで固定し、最小権限で短期間有効なOIDCトークンを使用します
- 一時的で分離されたランナーを使用し、ソースブランチを保護します
- パイプライン内でスキャンし、リリースにおける二者承認を必須にし、改ざん検知可能な監査ログを保持します
コース完了です。これでソフトウェアサプライチェーンをエンドツーエンドで保護できるようになりました。
よくある質問
「CI/CDパイプラインの保護」レッスンは無料ですか?
はい。「CI/CDパイプラインの保護」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「CI/CDパイプラインの保護」で何を学びますか?
ビルドからリリースまでの経路を堅牢化します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「CI/CDパイプラインの保護」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- サプライチェーンの脅威
- ソフトウェア部品表(SBOM)
- 依存関係と成果物の署名
- CI/CDパイプラインの保護