工芸品の制作
このページでは、各 SLSA レベルでアーティファクトを生成するための詳細な技術要件について説明します。対象読者は、プラットフォーム実装者とセキュリティ エンジニアです。
すべての対象者を対象としたレベルの有益な説明については、レベル を参照してください。背景については、用語を参照してください。要件の背後にある理由をよりよく理解するには、脅威と緩和策 を参照してください。
この文書のキーワード「しなければならない」、「してはならない」、「必須」、「しなければならない」、「してはならない」、「すべきである」、「すべきではない」、「推奨」、「してもよい」、「任意」は次のとおりです。 RFC 2119 に記載されているように解釈されます。
概要
ビルドレベル
特定のビルド レベルのアーティファクトを生成するには、プロデューサー と [ビルド プラットフォーム] の間で責任が分担されます。ビルド プラットフォームは、特定のレベルを達成するためにセキュリティ制御を強化しなければなりません (MUST)。一方、プロデューサーは、希望のビルド レベルを達成できるビルド プラットフォームを選択して採用し、選択したプラットフォームで指定された制御を実装しなければなりません (MUST)。
実装担当者 | 要件 | 学位 | L1 | L2 | L3 |
---|---|---|---|---|---|
プロデューサー | 適切なビルド プラットフォームを選択する | ✓ | ✓ | ✓ | |
一貫したビルド プロセスに従う | ✓ | ✓ | ✓ | ||
来歴を配布する | ✓ | ✓ | ✓ | ||
ビルド プラットフォーム | 来歴の生成 | 存在する | ✓ | ✓ | ✓ |
真正である | ✓ | ✓ | |||
偽造不可能である | ✓ | ||||
分離の強度 | ホストされた | ✓ | ✓ | ||
分離された | ✓ |
セキュリティのベストプラクティス
安全なプラットフォームを構成するものの正確な定義はこの仕様の範囲を超えていますが、すべての実装は、この仕様に準拠するために業界のセキュリティのベスト プラクティスを使用しなければなりません。これには、適切なアクセス制御の使用、通信の保護、暗号秘密の適切な管理の実装、頻繁な更新の実行、既知の脆弱性の迅速な修正が含まれますが、これらに限定されません。
この問題については、CIS Critical Security Controls などのさまざまな関連規格やガイドを参照できます。
プロデューサー
パッケージのプロデューサーは、ソフトウェアを所有し、リリースする組織です。それは、オープンソース プロジェクト、企業、企業内のチーム、さらには個人の場合もあります。
注: 初期の ドラフト バージョン (v0.1) には、プロデューサーに対する追加の要件があり、パッケージのビルド方法に影響を与えていました。これらは v1.0 仕様で削除され、将来の方向性 に示されているように再評価され、再追加される予定です。
適切なビルド プラットフォームを選択する
プロデューサーは、希望する SLSA ビルド レベルに到達できるビルド プラットフォームを選択しなければなりません。
たとえば、プロデューサーがビルド レベル 3 のアーティファクトを生成したい場合、ビルド レベル 3 の来歴を生成できるビルダーを選択しなければなりません。
一貫したビルドプロセスに従う
プロデューサーは、検証者がビルド プロセスについての期待を形成できるように、一貫した方法でアーティファクトをビルドしなければなりません (MUST)。一部の実装では、プロデューサーは、ビルドプロセスに関する明示的なメタデータを検証者に提供してもよい(MAY)。他の場合には、検証者は暗黙的に期待を形成します (例: 最初の使用時の信頼)。
プロデューサーが、構成ファイルの形式でビルドプロセスに関する明示的なメタデータを必要とする [パッケージエコシステム] を通じてアーティファクトを配布したい場合、プロデューサーは構成ファイルを完成させ、最新の状態に保たなければなりません (MUST)。このメタデータには、アーティファクトのソース リポジトリおよびビルド パラメータに関連する情報が含まれる場合があります。
来歴を配布する
生産者は、アーティファクトの消費者に来歴を配布しなければなりません (MUST)。パッケージ エコシステムが来歴を配布できる場合、プロデューサーはこの責任を パッケージ エコシステム に委任することができます。
プラットフォームを構築する
パッケージの ビルド プラットフォーム は、ソフトウェアをソースからパッケージに変換するために使用されるインフラストラクチャです。これには、ビルドに影響を与える可能性のあるすべてのハードウェア、ソフトウェア、個人、および組織の推移的閉包が含まれます。ビルド プラットフォームは、ホストされたマルチテナント ビルド サービスであることがよくありますが、複数の独立したリビルダーのシステム、単一のソフトウェア プロジェクトで使用される専用のビルド プラットフォーム、さらには個人のワークステーションである場合もあります。理想的には、消費者が [信頼できるプラットフォームの数を最小限に抑える] (principles.md) ことができるように、1 つのビルド プラットフォームが多くの異なるソフトウェア パッケージで使用されます。詳細については、「モデルの構築」(terminology.md#build-model) を参照してください。
ビルド プラットフォームは、来歴の生成 と ビルド間の分離 という 2 つのことを提供する責任があります。ビルド レベル は、これらの各プロパティがどの程度満たされるかを示します。
来歴の生成
ビルド プラットフォームは、パッケージがどのように作成されたかを説明する来歴を生成する責任があります。
SLSA ビルド レベルは、次の最小要件に従って、全体的な来歴の整合性を記述します。
- 完全性: 来歴にはどのような情報が含まれていますか?
- 信頼性: 来歴は建設者とどの程度強く結び付けられますか?
- 精度: 来歴生成は、ビルド プロセス内での改ざんに対してどの程度耐性がありますか?
要件 | 説明 | L1 | L2 | L3 |
---|---|---|---|---|
来歴が存在します |
ビルド プロセスは、暗号ダイジェストによって出力パッケージを明確に識別し、そのパッケージがどのように作成されたかを説明する来歴を生成しなければなりません (MUST)。形式は パッケージ エコシステム および/または 消費者 に受け入れられなければなりません。 [SLSA Provenance] 形式と [associated suite] は、SLSA に使用する際に相互運用可能、汎用的、および明確になるように設計されているため、使用することが推奨されます。要件と実装ガイドラインについては、その形式のドキュメントを参照してください。 代替形式を使用する場合は、各レベルで SLSA 来歴と同等の情報が含まれていなければならず (MUST)、SLSA 来歴に双方向に変換可能である必要があります (SHOULD)。
| ✓ | ✓ | ✓ |
来歴は本物です |
信頼性: 消費者は、次のことを行うために、来歴証明書の信頼性を検証できなければなりません。
これは、来歴証明書を生成したビルド プラットフォーム コンポーネントのみがアクセスできる秘密鍵からのデジタル署名を介する必要があります (SHOULD)。 署名方法の選択には多くの制約が影響しますが、ビルド プラットフォームでは、透明性ログや、透明性が適切でない場合はタイムスタンプ サービスに依存する方法など、鍵の侵害を検出して修復する能力を向上させる署名方法を使用することが推奨されます。 信頼性により、消費者はビルド プラットフォームの ID などの来歴証明書の内容を信頼できます。 正確性: 以下に記載する場合を除き、来歴はコントロール プレーン (つまり、[来歴で識別される] 信頼境界内) によって生成されなければならず、ビルド プラットフォームのテナント (つまり、信頼境界の外側) によって生成されることはありません。
完全性: 完全であるべきです。
| ✓ | ✓ | |
来歴は偽造不可能です |
精度: 来歴はテナントによる偽造に対して強力な耐性を持たなければなりません。
完全性: 完全であるべきです。
注: この要件は、最初の draft version (v0.1) では「反証不可能」と呼ばれていました。 | ✓ |
絶縁強度
ビルド プラットフォームは、同じテナント プロジェクト内であっても、ビルド間を分離する責任があります。言い換えれば、外部の影響なしにビルドが実際に正しく実行されたという保証はどのくらい強いのでしょうか?
SLSA ビルド レベルは、分離強度の最小基準を示します。ビルド プラットフォームの分離強度の評価の詳細については、「ビルド プラットフォームの検証」(verifying-systems.md) を参照してください。
要件 | 説明 | L1 | L2 | L3 |
---|---|---|---|---|
ホスト型 |
すべてのビルド ステップは、個人のワークステーションではなく、共有インフラストラクチャまたは専用インフラストラクチャ上のホストされたビルド プラットフォームを使用して実行されました。 例: GitHub Actions, Google Cloud Build, Travis CI. | ✓ | ✓ | |
孤立 |
ビルド プラットフォームにより、意図しない外部からの影響を受けずに、隔離された環境でビルド ステップが実行されることが保証されました。言い換えれば、ビルドに対する外部の影響は、ビルド自体によって明確に要求されたものです。これは、同じテナント プロジェクト内のビルド間でも当てはまらなければなりません。 ビルド プラットフォームは次のことを保証する必要があります。
ビルド自体にはサブ要件はありません。ビルド L3 は、善意のビルドが安全に実行されることを保証することに限定されています。ビルド プラットフォームがプロデューサーによる危険なビルドや安全でないビルドの実行を妨げる必要はありません。特に、「分離」要件は、ビルドがビルド プラットフォームの信頼境界の外側にあるリモート実行サービスまたは「セルフホスト ランナー」を呼び出すことを禁止するものではありません。 注: この要件は、初期の ドラフト バージョン (v0.1) では「分離環境」と「一時環境」に分割されていました。 注: この要件を「密閉」と混同しないでください。これは、ネットワーク アクセスなしでビルドが実行されたことを大まかに意味します。このような要件には、ビルド プラットフォームと個々のビルドの両方に大幅な変更が必要であり、将来の方向性 で検討されています。 | ✓ |