208 lines
5.3 KiB
Markdown
208 lines
5.3 KiB
Markdown
# SLSA Compliance
|
|
|
|
This document describes Stella Ops' compliance with the [Supply-chain Levels for Software Artifacts (SLSA)](https://slsa.dev/) framework.
|
|
|
|
## Current SLSA Level
|
|
|
|
Stella Ops releases target **SLSA Level 2** with ongoing work toward Level 3.
|
|
|
|
| Level | Status | Description |
|
|
|-------|--------|-------------|
|
|
| SLSA 1 | ✅ Complete | Provenance exists and shows build process |
|
|
| SLSA 2 | ✅ Complete | Provenance is signed and generated by hosted build service |
|
|
| SLSA 3 | 🔄 In Progress | Build platform provides strong isolation guarantees |
|
|
|
|
## SLSA v1.0 Provenance
|
|
|
|
### Predicate Type
|
|
|
|
Stella Ops uses the standard SLSA v1.0 provenance predicate:
|
|
|
|
```
|
|
https://slsa.dev/provenance/v1
|
|
```
|
|
|
|
### Provenance Structure
|
|
|
|
```json
|
|
{
|
|
"_type": "https://in-toto.io/Statement/v1",
|
|
"subject": [
|
|
{
|
|
"name": "stella-1.2.3-linux-x64.tar.gz",
|
|
"digest": {
|
|
"sha256": "abc123..."
|
|
}
|
|
}
|
|
],
|
|
"predicateType": "https://slsa.dev/provenance/v1",
|
|
"predicate": {
|
|
"buildDefinition": {
|
|
"buildType": "https://stella-ops.io/ReleaseBuilder/v1",
|
|
"externalParameters": {
|
|
"version": "1.2.3",
|
|
"target": "linux-x64"
|
|
},
|
|
"resolvedDependencies": [
|
|
{
|
|
"uri": "git+https://git.stella-ops.org/stella-ops.org/git.stella-ops.org@v1.2.3",
|
|
"digest": {
|
|
"gitCommit": "abc123..."
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"runDetails": {
|
|
"builder": {
|
|
"id": "https://ci.stella-ops.org/builder/v1"
|
|
},
|
|
"metadata": {
|
|
"invocationId": "12345/1",
|
|
"startedOn": "2025-01-15T10:30:00Z",
|
|
"finishedOn": "2025-01-15T10:45:00Z"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Verification
|
|
|
|
### Verifying Provenance Signature
|
|
|
|
```bash
|
|
cosign verify-blob \
|
|
--key cosign.pub \
|
|
--signature provenance/stella-cli.slsa.intoto.jsonl.sig \
|
|
provenance/stella-cli.slsa.intoto.jsonl
|
|
```
|
|
|
|
### Inspecting Provenance
|
|
|
|
```bash
|
|
# View full provenance
|
|
cat provenance/stella-cli.slsa.intoto.jsonl | jq .
|
|
|
|
# Extract builder ID
|
|
cat provenance/stella-cli.slsa.intoto.jsonl | jq -r '.predicate.runDetails.builder.id'
|
|
|
|
# Extract source commit
|
|
cat provenance/stella-cli.slsa.intoto.jsonl | jq -r '.predicate.buildDefinition.resolvedDependencies[0].digest.gitCommit'
|
|
```
|
|
|
|
### Policy Verification
|
|
|
|
Verify provenance matches your policy:
|
|
|
|
```bash
|
|
# Example: Verify builder ID
|
|
BUILDER_ID=$(cat provenance/stella-cli.slsa.intoto.jsonl | jq -r '.predicate.runDetails.builder.id')
|
|
if [ "$BUILDER_ID" != "https://ci.stella-ops.org/builder/v1" ]; then
|
|
echo "ERROR: Unknown builder"
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
## Strict Validation Mode
|
|
|
|
Stella Ops supports strict SLSA validation that enforces:
|
|
|
|
1. **Valid builder ID URI** - Must be a valid absolute URI
|
|
2. **Approved digest algorithms** - sha256, sha384, sha512, sha3-*
|
|
3. **RFC 3339 timestamps** - All timestamps must be properly formatted
|
|
4. **Minimum SLSA level** - Configurable minimum level requirement
|
|
|
|
### Configuration
|
|
|
|
In `appsettings.json`:
|
|
|
|
```json
|
|
{
|
|
"Attestor": {
|
|
"Slsa": {
|
|
"ValidationMode": "Strict",
|
|
"MinimumSlsaLevel": 2,
|
|
"AllowedBuilderIds": [
|
|
"https://ci.stella-ops.org/builder/v1",
|
|
"https://github.com/actions/runner"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## SLSA Requirements Mapping
|
|
|
|
### Source Requirements
|
|
|
|
| Requirement | Implementation |
|
|
|-------------|----------------|
|
|
| Version controlled | Git with signed commits |
|
|
| Verified history | Protected branches, PR reviews |
|
|
| Retained indefinitely | Git history preserved |
|
|
| Two-person reviewed | Required PR approvals |
|
|
|
|
### Build Requirements
|
|
|
|
| Requirement | Implementation |
|
|
|-------------|----------------|
|
|
| Scripted build | Makefile + CI workflows |
|
|
| Build service | GitHub Actions / Gitea Actions |
|
|
| Build as code | `.gitea/workflows/*.yml` |
|
|
| Ephemeral environment | Fresh CI runners per build |
|
|
| Isolated | Containerized build environment |
|
|
| Parameterless | Build inputs from version control only |
|
|
| Hermetic | Pinned dependencies, reproducible builds |
|
|
|
|
### Provenance Requirements
|
|
|
|
| Requirement | Implementation |
|
|
|-------------|----------------|
|
|
| Available | Published with every release |
|
|
| Authenticated | Cosign signatures |
|
|
| Service generated | CI generates provenance |
|
|
| Non-falsifiable | Signed by CI identity |
|
|
| Dependencies complete | All inputs listed with digests |
|
|
|
|
## Verification Tools
|
|
|
|
### Using slsa-verifier
|
|
|
|
```bash
|
|
# Install slsa-verifier
|
|
go install github.com/slsa-framework/slsa-verifier/v2/cli/slsa-verifier@latest
|
|
|
|
# Verify artifact
|
|
slsa-verifier verify-artifact \
|
|
artifacts/stella-1.2.3-linux-x64.tar.gz \
|
|
--provenance-path provenance/stella-cli.slsa.intoto.jsonl \
|
|
--source-uri github.com/stella-ops/stella-ops \
|
|
--builder-id https://ci.stella-ops.org/builder/v1
|
|
```
|
|
|
|
### Using Stella CLI
|
|
|
|
```bash
|
|
stella attest verify \
|
|
--artifact artifacts/stella-1.2.3-linux-x64.tar.gz \
|
|
--provenance provenance/stella-cli.slsa.intoto.jsonl \
|
|
--slsa-level 2 \
|
|
--builder-id https://ci.stella-ops.org/builder/v1
|
|
```
|
|
|
|
## Roadmap to SLSA Level 3
|
|
|
|
Current gaps and planned improvements:
|
|
|
|
| Gap | Plan |
|
|
|-----|------|
|
|
| Build isolation | Migrate to hardened build runners |
|
|
| Non-forgeable provenance | Implement OIDC-based signing |
|
|
| Isolated build inputs | Hermetic build environment |
|
|
|
|
## Related Documentation
|
|
|
|
- [Release Evidence Pack](./RELEASE_EVIDENCE_PACK.md)
|
|
- [Reproducible Builds](./REPRODUCIBLE_BUILDS.md)
|
|
- [Attestor Architecture](../modules/attestor/architecture.md)
|