Terraform Provider for cosign
🚨 This is a work in progress. 🚨
https://registry.terraform.io/providers/chainguard-dev/cosign
This provides a cosign_verify
data source, which can be used with any
containerized infrastructure rules to enforce deploy-time policy checking:
data "cosign_verify" "example" {
image = "cgr.dev/chainguard/static:latest-glibc"
policy = file("my-policy.yaml")
}
# Use "data.cosign_verify.example.verified_ref" in downstream rules (see below).
See provider examples:
This provider also exposes cosign_sign
and cosign_attest
resources that will
sign and attest a provided OCI digest, which is intended to compose with
OCI providers such as ko
,
apko
, and
oci
.
Here is an example using the ko
provider building on the verified base image
above:
# This is simply for illustration purposes!
resource "ko_build" "image-build" {
base_image = data.cosign_verify.example.verified_ref
importpath = "..."
repo = var.where-to-publish
}
resource "cosign_sign" "example" {
image = ko_build.image-build.image_ref
}
resource "cosign_attest" "example" {
image = cosign_sign.example.signed_ref
predicates {
type = "https://example.com/my/predicate/type"
json = jsonencode({
// Your claim here!
})
}
// Inlining e.g. huge SBOMs will slow down terraform a lot, so reference a file.
predicates {
type = "https://example.com/my/predicate/too-big-for-terraform.tfstate"
file = {
path = "/tmp/giant-file.json"
sha256 = "74af7407b59f9021f76a6f9ee66149c5df1ef6442617a805a7860ce18074158d"
}
}
}
# Reference cosign_attest.example.attested_ref to ensure we wait for all of the
# metadata to be published.
The provider will skip signing/attesting when ambient credentials are not
present, but can also be explicitly disabled by setting TF_COSIGN_DISABLE
to
any value.