Skip to content
Latchkey

artifact署名とは?

artifact署名は、buildの出力に暗号署名を付与し、誰もがそれが改ざんされておらず、あなたから来たものであることを検証できるようにします。

artifactが一度pipelineを離れると、レジストリやネットワークを経由していきます。署名により、利用者は信頼する前に2つのことを確認できます。あなたがbuildして以来変更されていないこと、そしてbuildしたのがあなたであることです。

署名の仕組み

pipelineはartifactのダイジェストを計算し、秘密鍵で署名します。利用者は対応する公開鍵で署名を検証します。artifactが1バイトでも変わっていれば、検証は失敗します。

keyless署名

長命な署名鍵の管理はリスクを伴います。keyless署名(たとえばSigstore/cosign経由)は、OIDCアイデンティティに紐づいた短命な証明書を使うため、漏洩する秘密鍵が存在しません。OIDCによるクラウド認証と同じアイデンティティモデルです。

小さな例

CIでcosign sign <image>を実行すると、workflowのOIDCアイデンティティを使ってコンテナimageに署名します。鍵は保存されません。deployゲートがcosign verifyを実行し、期待するアイデンティティからの有効な署名がないimageを拒否します。

署名とprovenance

署名はartifact自体の完全性と出所を証明します。provenanceはそれがどのようにbuildされたかを記述します。両者は自然に組み合わさります。artifactに署名し、それに付随するprovenanceの声明にも署名します。

検証こそが要点

署名は、何かが署名をチェックする場合にのみ役立ちます。重要な境界(deployステップやadmission controller)で検証を強制すれば、署名のない、あるいは改ざんされたartifactは実行される前に拒否されます。

重要なポイント

  • 署名により、利用者はartifactの完全性と出所を検証できます。
  • keyless署名は、短命なOIDCアイデンティティを使うことで、長命な鍵を回避します。
  • 署名は、何かが検証を強制する場合にのみ有用です。

関連ガイド