build provenanceとは?
build provenanceは、artifactがどのように、どのpipelineによって、どのソースコミットからbuildされたかを記録した、署名付きで改ざんが検出可能な記録です。
バイナリそれ自体は、それがどこから来たのかを何も教えてくれません。provenanceは検証可能な声明、すなわち「このartifactはこのworkflowによって、このコミットから、これらの入力でbuildされた」を添付します。そのため利用者は、artifactの出所を仮定するのではなく信頼できます。
provenanceが証明するもの
provenanceドキュメントは、ソースリポジトリとコミット、builder(CIシステムとworkflow)、buildの入力、そして生成されたartifactのダイジェストを記録します。これらはすべて暗号的に署名されており、検出されずに改変することはできません。
検証の方法
利用者は、信頼されたbuilderのアイデンティティに対して署名を照合し、artifactのダイジェストとソースの主張が一致することを確認します。build後に何かがすり替わっていれば、検証は失敗します。
小さな例
GitHubのbuild-provenance証明は、imageダイジェストXがworkflow YによってコミットZからbuildされたことを記録します。deployの前に、検証者は実行中のimageのダイジェストが、あなたのリポジトリとworkflowからの証明と一致すること、未知のソースからのものではないことを確認します。
SLSAとCIの位置づけ
SLSAのようなフレームワークがprovenanceのレベルを定義します。provenanceが生成される場所はCIです。なぜなら、pipelineこそがソース、入力、builderを権威をもって知る唯一の場所だからです。プラットフォームはそれをますます自動的に生成するようになっています。
provenanceと署名
署名はartifactが変更されておらず、あなたのものであることを証明します。provenanceはそれがどのようにbuildされたかを記述します。両者は補完し合います。artifactに署名し、provenanceの声明にも署名する - そして両者が揃うことで、利用者はビットとその出所の両方を信頼できます。
重要なポイント
- provenanceは、artifactがどのように、何からbuildされたかを記録した署名付きの記録です。
- 利用者は盲目的に信頼するのではなく、出所を検証できます。
- CIがそれを生成します。SLSAのようなフレームワークがprovenanceのレベルを定義します。