This project started to use GitHub Action to create attestations for the release artifacts. Building software with artifact attestation streamlines supply chain security and helps us achieve SLSA v1.0 Build Level 3 for this project.
Note
Not all artifacts may have attestations generated for them. Please check the repository attestations to see which artifacts have attestations available.
Attestations are only available for releases from v6.9.0.
First, install GitHub CLI if you haven't already. See the installation instructions for your platform.
To verify artifact attestations generated during the build process, use the gh attestation verify command from the GitHub CLI.
The gh attestation verify command requires either --owner or --repo flags to be used with it.
Note
Make sure to replace x.y.z with the actual release tag you want to verify. Replace artifact name with the actual artifact you want to verify.
Download the release artifacts first:
version="x.y.z"
artifact="terraform-provider-github_${version}_darwin_amd64.zip"
gh release download "v${version}" --repo integrations/terraform-provider-github -p "*.zip" --clobberTo verify the artifact attestations for this project, you can run the following command:
gh attestation verify --repo integrations/terraform-provider-github --source-ref "refs/tags/v${version}"\
--signer-workflow integrations/terraform-provider-github/.github/workflows/release.yaml@refs/tags/v${version} \
"$artifact"Alternatively, you can verify all downloaded artifacts with a loop that provides individual status reporting:
for artifact in terraform-provider-github_${version}_*.zip; do
echo "Verifying: $artifact"
gh attestation verify --repo integrations/terraform-provider-github --source-ref "refs/tags/v${version}" \
--signer-workflow integrations/terraform-provider-github/.github/workflows/release.yaml@refs/tags/v${version} \
"$artifact" && echo "✓ Verified" || echo "✗ Failed"
doneThe gh attestation verify command supports additional flags for more specific verification:
Use the --signer-repo flag to specify the repository:
gh attestation verify --owner integrations --signer-repo \
integrations/terraform-provider-github \
"$artifact"If you would like to require an artifact attestation to be signed with a specific workflow, use the --signer-workflow flag to indicate the workflow file that should be used.
gh attestation verify --owner integrations --signer-workflow \
integrations/terraform-provider-github/.github/workflows/release.yaml@refs/tags/v${version} \
"$artifact"Note
Not all artifacts may have attestations generated for them. Please check the repository attestations to see which artifacts have attestations available.
Attestations are only available for releases from v6.9.0.
In addition to artifact attestations, you can verify release artifacts using Cosign. Cosign is a tool for signing and verifying software artifacts and container images.
First, install Cosign if you haven't already. See the installation instructions for your platform.
Download the checksums file and its signature bundle:
gh release download v${version} --repo integrations/terraform-provider-github \
-p "terraform-provider-github_${version}_SHA256SUMS" \
-p "terraform-provider-github_${version}_SHA256SUMS.sbom.json.bundle" --clobberVerify the checksums file signature:
cosign verify-blob \
--bundle "terraform-provider-github_${version}_SHA256SUMS.sbom.json.bundle" \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity "https://github.com/integrations/terraform-provider-github/.github/workflows/release.yaml@refs/tags/v${version}" \
"terraform-provider-github_${version}_SHA256SUMS"After verifying the checksums file, verify your downloaded artifacts match the checksums:
Download the artifact you want to verify:
artifact="terraform-provider-github_${version}_darwin_amd64.zip"
gh release download v${version} --repo integrations/terraform-provider-github \
-p "$artifact" --clobberVerify the checksum:
shasum -a 256 -c terraform-provider-github_${version}_SHA256SUMS --ignore-missingThis will verify that your downloaded artifact matches the signed checksum, confirming its integrity and authenticity.
In addition to using the GitHub CLI, you can verify SLSA provenance attestations using Cosign by downloading the attestation and verifying it against your local artifact.
- Install
cosignfor verifying attestations. See the installation instructions. - Install
gh(GitHub CLI) if you haven't already. See the installation instructions.
Note
Make sure to replace x.y.z with the actual release tag you want to verify. Replace artifact name with the actual artifact you want to verify.
Note
Not all artifacts may have attestations generated for them. Please check the repository attestations to see which artifacts have attestations available.
Attestations are only available for releases from v6.9.0.
First, download the artifact you want to verify:
version="x.y.z"
artifact="terraform-provider-github_${version}_darwin_amd64.zip"
gh release download "v${version}" --repo integrations/terraform-provider-github \
-p "$artifact" --clobberThen, download the attestation associated with the artifact:
gh attestation download "$artifact" \
--repo integrations/terraform-provider-githubThis will create a file named sha256:[digest].jsonl in the current directory.
Verify the attestation using Cosign:
# Calculate the digest and verify using the specific bundle file
digest=$(shasum -a 256 "$artifact" | awk '{ print $1 }')
cosign verify-blob-attestation \
--bundle "sha256:${digest}.jsonl" \
--new-bundle-format \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity "https://github.com/integrations/terraform-provider-github/.github/workflows/release.yaml@refs/tags/v${version}" \
"$artifact"A successful verification will output Verified OK, confirming that the artifact was built by the trusted GitHub Actions workflow and its provenance is securely recorded.
To verify all release artifacts for a specific version:
version="x.y.z"
# Download all release artifacts
gh release download "v${version}" --repo integrations/terraform-provider-github -p "*.zip" --clobber
# Download attestations for all artifacts
for artifact in terraform-provider-github_${version}_*.zip; do
gh attestation download "$artifact" --repo integrations/terraform-provider-github
done
# Verify all artifacts using specific digest-based bundle files
for artifact in terraform-provider-github_${version}_*.zip; do
echo "Verifying: $artifact"
digest=$(shasum -a 256 "$artifact" | awk '{ print $1 }')
cosign verify-blob-attestation \
--bundle "sha256:${digest}.jsonl" \
--new-bundle-format \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity "https://github.com/integrations/terraform-provider-github/.github/workflows/release.yaml@refs/tags/v${version}" \
"$artifact" > /dev/null && echo "✓ Verified" || echo "✗ Failed"
doneThis approach calculates the digest for each artifact and uses the corresponding specific bundle file, ensuring each artifact is verified against its own attestation.