buildの整合性とは何か? artifactが改ざんされていないことを信頼する
buildの整合性とは、artifactがまさに期待されるソースから、まさに期待されるプロセスによって、途中で改ざんされることなくbuildされたという保証です。
あなたはソースコードをレビューし最終artifactを信頼しますが、その間に何が起きたのでしょうか? buildの整合性はそのギャップに関するものです。あなたが配布するバイナリが、あなたがレビューしたソースから、誰も破壊工作していないbuildを通じて本当に生まれたことを証明します。これはSolarWindsのようなサプライチェーン攻撃が、build途中で改ざんすることによって特に狙った特性です。
途中で何が問題になりうるか
- 悪意のある依存関係がbuild中にコードを注入する。
- 侵害されたbuildサーバーが出力を書き換える。
- artifactがbuild後release前にすり替えられる。
- 汚染されたbuild scriptが生成されるものを変える。
整合性の確立
buildの整合性はいくつかのプラクティスから構築されます。buildが改ざんされないように堅牢化された分離済みのbuild環境、artifactがどう作られたかを記録する署名付き来歴、そして同じソースが同じバイナリを生むことを誰でも確認できる再現可能なbuildです。
downstreamでの検証
利用者は来歴とattestationをチェックして整合性を検証します。このartifactは有効な署名付き来歴を持っているか? 期待されるソースとbuilderを指しているか? そのdigestは一致するか? deploymentゲートは、artifactを受け入れる前にこれらすべてを要求できます。
証拠としての再現可能なbuild
buildが再現可能なら、同じソースをbuildする2つの独立した当事者はバイト単位で同一のartifactを得ます。これにより、releaseされたバイナリが隠された追加なしにソースと真に対応することを誰でも確認でき、最も強力な整合性の証拠となります。
build環境が基盤
あらゆる整合性の保証は信頼できるbuilderの上に成り立ちます。build環境が改ざんされうるなら、その来歴と署名は侵害されたプロセスを証明することになります。分離されたエフェメラルなbuild環境 (Latchkeyのランナーのような) は、各buildにクリーンで封じ込められた基盤を与え、整合性の主張を意味あるものにします。
重要なポイント
- buildの整合性は、改ざんされていないbuildを通じてartifactがソースと一致することを保証します。
- 堅牢化されたbuilder、署名付き来歴、再現可能なbuildがそれを確立します。
- downstreamのゲートは、artifactを受け入れる前に来歴とattestationを検証します。