依存関係と成果物の署名
SLSAとSigstoreで来歴を検証します。
「依存関係と成果物の署名」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
プロベナンスが重要な理由
SBOMは、アーティファクトの中身を示します。プロベナンスは、それがどこから来て、どのようにビルドされたかを示します。署名によってアーティファクトと検証可能な出所が結び付くため、利用者は信頼できるパイプラインで生成されていないものを拒否できます。
プロベナンスがなければ、レジストリ内のtarballを攻撃者に置き換えられても、正規のリリースと見分けがつきません。
タグではなくダイジェスト
完全性の基盤は、コンテンツアドレス指定です。アーティファクトの暗号学的ハッシュ(ダイジェスト)は、その正確なバイト列を一意に識別します。latestのような可変タグは別の内容を指すように変更できますが、ダイジェストは変更できません。
# pull by immutable digest, not a tag
docker pull my-app@sha256:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613f
# compute a file digest
sha256sum release-1.4.0.tar.gzデジタル署名の基礎
デジタル署名では、秘密鍵を使ってアーティファクトのハッシュに署名します。対応する公開鍵を持つ人は誰でも署名を検証できます。これにより、次の2つが保証されます。
- 完全性 — 署名後にアーティファクトが変更されていないこと
- 真正性 — 秘密鍵の保有者が署名したこと
難しいのは数学ではなく、鍵の管理と信頼の配布です。検証者は、どの公開鍵を信頼すべきかをどのように知るのでしょうか。
Sigstoreによるキーレス署名
従来の署名では、チームが漏洩しやすい長期間有効な秘密鍵を保護しなければなりません。Sigstoreはキーレス署名を提供します。OIDC ID(CIワークロードや開発者のメールアドレスなど)に結び付いた短期間有効な証明書を発行して署名し、そのイベントをRekorという公開透明性ログに記録します。
盗まれる長期間有効な鍵は存在せず、すべての署名を公開で監査できます。
Cosignによる署名
Cosignは、コンテナイメージやその他のアーティファクトに署名するためのSigstoreツールです。キーレスモードではパイプラインのOIDCトークンを使用するため、ディスク上に鍵ファイルが残りません。
# keyless sign in CI (uses ambient OIDC identity)
COSIGN_EXPERIMENTAL=1 cosign sign my-registry/my-app@sha256:1d5283...
# verify, asserting the expected signer identity
cosign verify my-registry/my-app@sha256:1d5283... \
--certificate-identity-regexp '.*@my-org\.com' \
--certificate-oidc-issuer https://accounts.google.com透明性ログ
Sigstoreは、各署名イベントをRekorに記録します。Rekorは、改ざんを検知できる追記専用の公開ログです。これは強力な検知用の制御になります。
- 何かがいつ署名されたかを証明できます
- アイデンティティを盗んだ攻撃者も秘密裏に署名できません。イベントが公開で記録されるためです
- 異常な署名(予期しないアイデンティティや通常とは異なる時間帯)を検知できるようになります
透明性によって、密かな侵害が観測可能な証拠に変わります。
SLSA:ビルド完全性のレベル
SLSA(Supply-chain Levels for Software Artifacts)は、ビルドプロセスの信頼性を評価するフレームワークです。レベルが高いほど、改ざんに対する強い保証が求められます。
- L1 — プロベナンスが存在し、文書化されている
- L2 — ホスティングされたビルドサービスから提供された署名付きプロベナンスがある
- L3 — 強化された分離ビルドであり、パイプライン内部の関係者であってもプロベナンスを偽造できない
SLSAはロードマップです。目標レベルを決め、差分を埋めていきます。
ビルドプロベナンスアテステーション
プロベナンスアテステーションは、アーティファクトがどのようにビルドされたかを説明する署名付きの声明です。ソースコミット、ビルダーのアイデンティティ、ビルドパラメーター、入力情報などを記録します。in-toto形式がこの情報を標準化します。
# generate and attach SLSA provenance for an image
cosign attest --type slsaprovenance \
--predicate provenance.json \
my-registry/my-app@sha256:1d5283...
# verify provenance matches expected source repo
cosign verify-attestation --type slsaprovenance my-registry/my-app@sha256:1d5283...アドミッション時の署名強制
何かが署名のないアーティファクトを拒否しない限り、署名は役に立ちません。Kubernetesでは、アドミッションコントローラーによって、有効な署名と信頼できるアイデンティティによるプロベナンスを持たないイメージをブロックできます。
- ポリシーコントローラーが、Podの起動前にcosignの署名を検証します
- 予期しないアイデンティティによって署名されたイメージを拒否します
- 承認済みのソースリポジトリを指すプロベナンスを要求します
これで一連の流れが完成し、信頼されていないアーティファクトは実行されません。
依存関係への上流署名
プロベナンスは、自分が出荷するものだけでなく、利用するものにも拡張したときに最も価値を発揮します。各エコシステムでは、ネイティブの署名とプロベナンスの導入が進んでいます。
- npm provenanceは、公開されたパッケージをソースコミットおよびCI実行に関連付けます
- コンテナのベースイメージでは、cosign署名付きで提供されるものが増えています
- 言語のレジストリでは、Sigstoreを基盤とする検証の試行が始まっています
検証可能なプロベナンスを公開している依存関係を優先し、対応している場合はインストール時に検証してください。
検証を最優先にする
実践的な署名戦略は、複数の層で構成し、エンドツーエンドで検証します。
- 入力をダイジェストで固定します
- アーティファクトにキーレス署名を行い、SBOMとプロベナンスアテステーションを付加します
- すべてを透明性ログに記録します
- デプロイ時にアドミッションポリシーで検証を強制します
チェーンの強度は、検証されていない最も弱いリンクによって決まります。そのため、利用するすべての時点で検証してください。
クイックチェック:キーレス署名
キーレス署名によってサプライチェーンのセキュリティが向上する理由を考えてみましょう。
まとめ:依存関係とアーティファクトへの署名
プロベナンスを証明し、それを強制する方法を学びました。
- 可変タグではなくダイジェストで固定します
- デジタル署名によって完全性と真正性を保証できます。課題は鍵の管理です
- Sigstore + cosignによって、公開Rekor透明性ログを使用したキーレス署名が可能になります
- SLSAはビルド完全性を評価し、プロベナンスアテステーションはアーティファクトがどのようにビルドされたかを記録します
- アドミッションポリシーによって、デプロイ時に署名のないものや信頼されていないものを拒否します
次は、これらのアーティファクトを生成するCI/CDパイプラインの強化です。
AI チューターと学ぶ Cyber Security Academy — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 76
- レッスン
- 303
よくある質問
「依存関係と成果物の署名」レッスンは無料ですか?
はい。「依存関係と成果物の署名」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「依存関係と成果物の署名」で何を学びますか?
SLSAとSigstoreで来歴を検証します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「依存関係と成果物の署名」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- サプライチェーンの脅威
- ソフトウェア部品表(SBOM)
- 依存関係と成果物の署名
- CI/CDパイプラインの保護