Check artifact provenance
With Minder you can create rules that assert that artifacts built from your repositories are built from trusted sources and using trusted workflows based on their cryptographically signed provenance.
This is done by creating a profile which utilizes the artifact_signature
rule_type
.
Prerequisites
- The
minder
CLI application - A Stacklok account - create one by logging into the hosted minder instance
or by running
minder auth login
from the command line - A GitHub repository to be enrolled by Minder
- A repository that produces container images. At the moment Minder's artifact signature checks are only available for container images and only the
ghcr.io
registry is supported.
Define a Simple Profile That Checks Artifact Provenance From The UI
Start by logging in to Minder Cloud. In the left sidebar, select Profiles. Click New Profile, then select Artifact Security in the pop-up dialog. Finally click Apply.
The newly created profile will ensure that any images built in your repository with the tag latest
have any signed provenance information and that the signature can be verified, meaning whether the provenance information is indeed representing this artifact.
Define a simple profile that checks artifact signatures from the CLI
Next, create a profile that applies the rule type to the appropriate artifact.
The artifacts are referred to by name and tag. If the name is not specified,
the rule will match any artifact name. The tag can be specified either as a list
of tags using the tags
parameter or as a regular expression using the tag_regex
parameter. If both are empty, the rule will match any tag. It is an error to specify
both tags
and tag_regex
.
Create a new file called profile-artifact-simple.yaml
. The following example would match a container
image named good-repo-go
with the latest
tag. The profile would pass for any artifact that
has a signature, regardless of who signed it.
---
# sample policy for validating artifact signatures
version: v1
type: profile
name: latest-artifact-simple
context:
provider: github
artifact:
- type: artifact_signature
params:
tags: [latest]
name: good-repo-go
def:
is_signed: true
is_verified: true
Create the profile in Minder:
minder profile create -f profile-artifact-simple.yaml
Once the profile is created, Minder will start checking the artifacts produced by the enrolled repositories and the policy status will be updated accordingly. If the artifact is not matching the expected provenance (for example someone pushes a new image to the registry without signing it), a violation is presented via the profile status and an alert is raised.
Define a more advanced profile that checks artifact provenance
As the next step, let's create a profile that checks the provenance of the artifact.
Create a new file called profile-artifact-provenance.yaml
.
The profile would pass only if the container was
built from the main
branch of the good-repo-go
repository, using the build-image-signed-ghat.yml
workflow using a hosted github runner.
---
# sample policy for validating artifact provenance
version: v1
type: profile
name: latest-artifact-hardened
context:
provider: github
artifact:
- type: artifact_signature
params:
tags: [latest]
name: good-repo-go
def:
is_signed: true
is_verified: true
branch: main
signer_identity: build-image-signed-ghat.yml
runner_environment: github-hosted
repository: https://github.com/mytestorg/good-repo-go
cert_issuer: https://token.actions.githubusercontent.com
Create the profile in Minder:
minder profile create -f profile-artifact-provenance.yaml
Once the profile is created, Minder will start checking the artifacts produced by the enrolled repositories and the policy status will be updated accordingly. If the artifact is not matching the expected provenance (for example someone pushes a new image to the registry after having signed the image with their personal account or the image is built from a different workflow or a different branch), a violation is presented via the profile status and an alert is raised.