CI/CD のセキュリティベストプラクティス
パイプラインにおける一般的なセキュリティ脆弱性と、開発ライフサイクル全体でリスクを軽減するベストプラクティスを理解します。
「CI/CD のセキュリティベストプラクティス」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
CI/CD のセキュリティが重要な理由
現代のソフトウェア開発では、CI/CD パイプラインが重要な役割を果たします。コードのビルド、テスト、デプロイを自動化できるためです。
しかし、大きな力には大きな責任が伴います。悪意のある攻撃や意図せず生じた脆弱性からコード、データ、インフラストラクチャを守るには、パイプラインのセキュリティを確保することが不可欠です。
パイプラインの脆弱性を特定する
セキュリティ対策を講じる前に、何から守る必要があるのかを理解しましょう。CI/CD パイプラインは、次のようなさまざまな攻撃に対して脆弱になる可能性があります。
- 認証情報の侵害: API キーやトークンの窃取。
- 悪意のある依存関係: 既知のセキュリティ上の欠陥を持つライブラリの使用。
- 安全でない設定: アクセス制御やビルドステップの設定ミス。
- サプライチェーン攻撃: ビルドプロセス自体の改ざん。
最小権限のアクセスを適用する
最小権限の原則(PoLP)とは、ユーザーや自動化されたプロセス(CI/CD ジョブなど)に対して、タスクの実行に必要な最小限の権限だけを付与し、それ以上の権限は与えないという考え方です。
これにより、認証情報やジョブが侵害された場合に発生し得る被害を抑えられます。GitHub Actions では、ジョブごとに具体的な権限を定義してください。
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read # Only read access to repo code
packages: write # Only write to package registry
id-token: write # Needed for OIDC authentication
steps:
- uses: actions/checkout@v4
- run: echo "Build logic here"コードと依存関係を保護する
ソースコードはアプリケーションの中核です。最初から安全な状態を保つようにしてください。
- コードレビュー: 複数人でレビューすることで、潜在的なセキュリティ上の欠陥を見つけられます。
- 静的解析: ツールを使ってコードをスキャンし、脆弱性を検出します(専用の SAST については後のレッスンで扱います)。
- 依存関係のスキャン: サードパーティ製ライブラリに既知の脆弱性がないか、定期的に確認します。
サードパーティ製の依存関係を管理する
ほとんどのプロジェクトはオープンソースライブラリに依存しています。強力な一方で、慎重に管理しなければ脆弱性を持ち込む可能性があります。
- 依存関係スキャナーを使用する: Dependabot などのツールを統合し、既知の脆弱性を自動的に確認します。
- 依存関係を固定する: 予期しない変更を避けるため、依存関係の正確なバージョンを指定します。
- 定期的に更新する: 依存関係を最新の状態に保ち、セキュリティパッチの恩恵を受けられるようにします。
ビルド環境を強化する
コードのビルドとテストを行う環境は、可能な限り安全にする必要があります。ソフトウェアのためのクリーンルームだと考えてください。
- エフェメラルランナー: ジョブごとに新しく分離された環境を使用します。GitHub ホストランナーはデフォルトでエフェメラルです。
- 最小限のツール: 攻撃対象領域を減らすため、必要なツールだけをインストールします。
- 安全なベースイメージ: コンテナを使用する場合は、信頼でき、強化済みのベースイメージを使用します。
シークレットをハードコードしない
API キー、データベースの認証情報、プライベートトークンなどの機密情報を、リポジトリやワークフローファイルに直接ハードコードしてはいけません。
必ず安全なシークレット管理システムを使用してください。これにより、機密データをバージョン管理の対象外にし、暗号化して保管できます。
ワークフローの入力を検証する
ワークフローが外部からの入力(手動トリガーやプルリクエストのコメントなど)を受け付ける場合は、入力を検証してサニタイズする必要があります。
信頼できない入力は、Web アプリケーションでユーザー入力を検証する場合と同様に、インジェクション攻撃の足がかりになる可能性があります。
on:
workflow_dispatch:
inputs:
deploy_env:
description: 'Environment to deploy to (e.g., staging, production)'
required: true
type: choice
options:
- 'staging'
- 'production'
version_tag:
description: 'Git tag for the release version'
required: true
type: stringパイプラインのアクティビティを記録・監視する
パイプラインのアクティビティを可視化することは、重要なセキュリティ対策です。適切なログを記録すれば、不審な動作をすばやく検出して対応できます。
- 包括的なログ記録: ワークフロー内で発生する重要なイベントとアクションをすべて記録します。
- 異常を監視する: セキュリティチェックの失敗、不正なアクセス試行、通常とは異なるビルド時間などを確認します。
- アラート: 重大なセキュリティイベントに対するアラートを設定します。
理解度を確認する
CI/CD セキュリティのベストプラクティスについて、理解度を確認しましょう。
レッスンのまとめと次のステップ
お疲れさまでした。CI/CD パイプラインに不可欠なセキュリティのベストプラクティスを学びました。
- 最小権限の原則を適用する。
- ソースコードを保護し、依存関係を管理する。
- ビルド環境を強化する。
- シークレットをハードコードしない。
- すべてのワークフロー入力を検証する。
- 堅牢なログ記録と監視を実装する。
これらのプラクティスは、安全な DevOps ライフサイクルの強固な基盤になります。今後のレッスンでは、GitHub Secrets や SAST などの具体的なツールと手法について詳しく学びます。
AI チューターと学ぶ DevOps Bootcamp — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 142
- レッスン
- 568
よくある質問
「CI/CD のセキュリティベストプラクティス」レッスンは無料ですか?
はい。「CI/CD のセキュリティベストプラクティス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「CI/CD のセキュリティベストプラクティス」で何を学びますか?
パイプラインにおける一般的なセキュリティ脆弱性と、開発ライフサイクル全体でリスクを軽減するベストプラクティスを理解します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「CI/CD のセキュリティベストプラクティス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- CI/CD のセキュリティベストプラクティス
- GitHub によるシークレット管理
- 静的アプリケーションセキュリティテスト(SAST)
- 依存関係とソフトウェアサプライチェーンのセキュリティ(SCA)