New to Kestra?
Use blueprints to kickstart your first workflows.
Audit remote container image manifests with Skopeo, detect silent tag digest drift or overwrites, and alert Slack to block untracked container deployments.
Continuously verify remote OCI container image immutability without pulling layers, catch silent tag overwrites or digest drift, and enforce deployment gates before untracked binaries reach production clusters.
In modern container orchestration, deploying mutable tags (such as :latest, :staging, or release versions like :v1.2.0) introduces significant supply chain security risks. If an upstream registry tag is overwritten, whether through an untracked rebuild, CI misconfiguration, or unauthorized push, nodes can pull unverified binaries without triggering standard CI/CD checks. This blueprint orchestrates skopeo inspect through Kestra's official io.kestra.plugin.skopeo.cli.SkopeoCLI task to inspect remote manifests directly over the network, comparing the resolved SHA256 digest against approved baselines.
scheduled_immutability_audit (io.kestra.plugin.core.trigger.Schedule) initiates regular drift detection sweeps every 4 hours.inspect_remote_image (io.kestra.plugin.skopeo.cli.SkopeoCLI) queries the target container registry (docker://<image_reference>) and streams raw manifest JSON to inspect_metadata.json without pulling heavy container layers.parse_image_digest (io.kestra.plugin.core.output.OutputValues) extracts the resolved Digest, Architecture, Os, and Created timestamps using jq filtering.evaluate_digest_drift (io.kestra.plugin.core.output.OutputValues) compares the observed digest against expected_digest, classifying the outcome into IMMUTABLE, DIGEST_DRIFT, or UNREACHABLE.route_integrity_findings (io.kestra.plugin.core.flow.If) evaluates the integrity status:alert_digest_drift (io.kestra.plugin.slack.notifications.SlackIncomingWebhook) dispatches a high-priority incident payload to Slack with full OCI manifest details.enforce_immutability is enabled, fail_on_drift (io.kestra.plugin.core.execution.Fail) halts execution, blocking downstream deployment pipelines.log_immutability_verified (io.kestra.plugin.core.log.Log) writes an immutable verification receipt to the execution audit trail.quay.io/skopeo/stable:latest.SLACK_WEBHOOK_URL: The Slack incoming webhook URL for platform alerts and supply-chain drift incidents.SLACK_WEBHOOK_URL secret in your Kestra namespace.company.platform.AUTO_DISCOVER mode) to inspect the current remote digest.expected_digest and activate the schedule to enforce continuous immutability.--creds {{ secret('REGISTRY_USER') }}:{{ secret('REGISTRY_TOKEN') }} inside the skopeo inspect command flags.