---
title: "Vouching for Docker Images"
description: "Kubernetes does not enable Docker image signature verification by default, leaving organizations to decide whether images are trusted before they run in a cluster. The post explains code signing through hashes and public/private keys, then describes Binary Authorization as a combination of metadata storage, an enforcer, and a signing service. Using Grafeas and Kritis, or GKE’s Binary Authorization, cluster policies require specified attestors to sign images; invalid or unsigned images are blocked before their containers start. Voucher supplies the missing signing component as a REST service running in Cloud Run or Kubernetes: build pipelines submit image paths, Voucher performs security checks, signs qualifying images, and records signatures in the metadata service. Its extensible checks can verify internal ownership, GitHub commits, approvals, builder identity, and vulnerability counts, while distinct cluster policies balance compliance requirements with faster experimentation; Voucher later moved into the Grafeas organization."
---

# Vouching for Docker Images

[Shopify](https://yomu.fyi/company/shopify) · 2023-10-18 · Dec 1, 2020

**Type:** Explainer

## Summary

Kubernetes does not enable Docker image signature verification by default, leaving organizations to decide whether images are trusted before they run in a cluster. The post explains code signing through hashes and public/private keys, then describes Binary Authorization as a combination of metadata storage, an enforcer, and a signing service. Using Grafeas and Kritis, or GKE’s Binary Authorization, cluster policies require specified attestors to sign images; invalid or unsigned images are blocked before their containers start. Voucher supplies the missing signing component as a REST service running in Cloud Run or Kubernetes: build pipelines submit image paths, Voucher performs security checks, signs qualifying images, and records signatures in the metadata service. Its extensible checks can verify internal ownership, GitHub commits, approvals, builder identity, and vulnerability counts, while distinct cluster policies balance compliance requirements with faster experimentation; Voucher later moved into the Grafeas organization.

## Context

Kubernetes does not provide Docker image signature verification by default. The post presents this as a security concern because a compromised container could access data belonging to a service and its customers, making Binary Authorization a priority for Shopify after its move to Kubernetes.

## Approach / What changed

Binary Authorization combines a metadata service, an enforcer, and a signing service. Voucher provides the signing service through a REST endpoint that build pipelines call with image paths; it runs configurable security checks, signs images that meet requirements, and stores signatures in the metadata service. Cluster policies then require specified attestors before allowing images to run.

## Takeaways

- Binary Authorization blocks Kubernetes images that lack signatures required by a cluster policy, preventing containers that reference those images from starting.
- Voucher supports checks for Shopify-owned repositories, GitHub commits, approval records, builder identity, and vulnerability counts, with separate signing keys for different requirements.
- Different clusters can require different combinations of signatures, allowing stricter compliance policies alongside less restrictive settings for experiments and staging.

**Tags:** [Binary Authorization](https://yomu.fyi/topic/binary-authorization), [Docker](https://yomu.fyi/topic/docker), [Kubernetes](https://yomu.fyi/topic/kubernetes), [Security](https://yomu.fyi/topic/security)

- Source: [Shopify](https://shopify.engineering/voucher-docker-images)
- Source URL: https://shopify.engineering/voucher-docker-images
- Ingested by Yomu: 2026-08-31T01:11:07.243Z

[Read original post](https://shopify.engineering/voucher-docker-images)
