blob: a74e1b7f3bc6620c4607b252327c393c9c560b73 [file] [log] [blame] [view]
# Attestations
> [!CAUTION]
> This feature is still experimental.
## Introduction
BCR now accepts build attestations in order to increase security for all BCR users.
This feature is still experimental and thus optional, but eventually we expect all
modules that natively build with Bazel to also generate build attestation.
## How it works
BCR presubmit verifies attestations if an incoming PR for a new module (version) contains an `attestations.json` file next to `source.json` and `MODULE.bazel`.
Its format looks like this:
```
{
"mediaType": "application/vnd.build.bazel.registry.attestation+json;version=1.0.0",
"attestations" {
"source.json": {
"url": "https://github.com/some-org/some-repo/releases/download/v1.0.0/source.json.intoto.jsonl",
"integrity": "sha256-NylZt7S5lfmT0VjMvzXwafpjIqoaWDkgaml5VrmdW/A=",
},
"MODULE.bazel": {
"url": "https://github.com/some-org/some-repo/releases/download/v1.0.0/optionalPrefix-MODULE.bazel.intoto.jsonl",
"integrity": "sha256-NylZt7S5lfmT0VjMvzXwafpjIqoaWDkgaml5VrmdW/A=",
},
"project.tar.gz": {
"url": "https://github.com/some-org/some-repo/releases/download/v1.0.0/project.tar.gz.intoto.jsonl",
"integrity": "sha256-NylZt7S5lfmT0VjMvzXwafpjIqoaWDkgaml5VrmdW/A=",
},
}
}
```
Rules:
1. `attestations` must contain exactly three elements, with keys being `source.json`, `MODULE.bazel` and the basename of the source archive.
2. All URLs in this file must point to the GitHub repository specified in `metadata.json`.
3. All `*.intoto.jsonl` attestations referenced in this file must live in the same directory.
4. Attestations are either plain DSEE or Sigstore Bundles, and their signatures can be verified by [slsa-verifier](https://github.com/slsa-framework/slsa-verifier)
Attestations are checked with [slsa-verifier](https://github.com/slsa-framework/slsa-verifier) during presubmit.
Once the PR has been merged, `MODULE.bazel.intoto.json` and `source.json.intoto.jsonl` will be mirrored to https://registry.bazel.build/.
## Tools
You can verify attestations locally by running [bcr_validation.py](README.md#validations).
## Future Work
- Extensive testing of pre- and post-submit with real attestations (SLSA provenance and VSAs).
- Adding a visual indicator to the BCR web UI to indicate the presence of attestations.
- Launching a GitHub action that handles attestation creation and publishing.
- Eventually enforcing attestations for all new module versions (this will only happen after several announcements and a migration period).