External Secrets Operator

Syncs Kubernetes Secrets from external backends. Apache-2.0. linux/amd64.

Pin this image by digest.

published Latest tag v2.12.0-tpio.1. Pin by digest. Usage is on this page.

Critical0
High0
Medium2
Low2
Gate passed
Open Usage

Pin by digest

oci.thepeoples.io/hardened/external-secrets@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf

Pull:

podman pull oci.thepeoples.io/hardened/external-secrets@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf

Verify:

cosign verify --key https://thepeoples.io/keys/oci.thepeoples.io.pub --insecure-ignore-tlog oci.thepeoples.io/hardened/external-secrets@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf

Published 2026-10-11T06:23:15Z151.0 MiB compressed

Usage

Metrics are on in the values below; comments mark the production settings. One image covers the controller, webhook and cert-controller chart roles.

Example, not validated on this page until a matching published digest is recorded.

Image pin overlay:

image:
  repository: oci.thepeoples.io/hardened/external-secrets
  tag: "v2.12.0-tpio.1@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf"
webhook:
  image:
    repository: oci.thepeoples.io/hardened/external-secrets
    tag: "v2.12.0-tpio.1@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf"
certController:
  image:
    repository: oci.thepeoples.io/hardened/external-secrets
    tag: "v2.12.0-tpio.1@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf"

Production Helm values (metrics on, private CA only where TLS applies):

# Production-oriented Helm values for charts.external-secrets.io/external-secrets 2.12.0.
# One hardened image covers three chart roles (controller, webhook, cert-controller).
# Image pins come from catalog/image-meta.json chart_values and the generated
# values-images overlay. CRDs install with the chart.
# Example backend: Kubernetes provider in validate/manifests/eso-k8s-provider.yaml.
# Turn a metrics Service off with metrics.service.enabled / webhook.metrics.service.enabled
# / certController.metrics.service.enabled set to false.
# https://external-secrets.io/v2.12.0/introduction/getting-started/
# https://external-secrets.io/v2.12.0/api/metrics/
# https://external-secrets.io/v2.12.0/provider/kubernetes/
# https://artifacthub.io/packages/helm/external-secrets-operator/external-secrets/2.12.0

installCRDs: true

replicaCount: 2
leaderElect: true # required when replicaCount > 1
podDisruptionBudget:
  enabled: true
  minAvailable: 1

log:
  level: info
  timeEncoding: epoch

# Dedicated metrics Services (not ServiceMonitor) so Prometheus and other
# scrapers can hit /metrics without Operator CRDs.
# https://external-secrets.io/v2.12.0/api/metrics/
metrics:
  service:
    enabled: true # set false to skip the controller metrics Service
    port: 8080
serviceMonitor:
  enabled: false # set true only when Prometheus Operator CRDs are installed

securityContext:
  enabled: true
  allowPrivilegeEscalation: false
  capabilities:
    drop: [ALL]
  readOnlyRootFilesystem: true
  runAsNonRoot: true
  runAsUser: 1000
  seccompProfile:
    type: RuntimeDefault
# https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

resources:
  requests: {cpu: 50m, memory: 64Mi}
  limits: {cpu: 250m, memory: 256Mi}

webhook:
  create: true
  replicaCount: 2
  failurePolicy: Fail
  podDisruptionBudget:
    enabled: true
    minAvailable: 1
  metrics:
    service:
      enabled: true # set false to skip the webhook metrics Service
      port: 8080
  securityContext:
    enabled: true
    allowPrivilegeEscalation: false
    capabilities:
      drop: [ALL]
    readOnlyRootFilesystem: true
    runAsNonRoot: true
    runAsUser: 1000
    seccompProfile:
      type: RuntimeDefault
  resources:
    requests: {cpu: 50m, memory: 64Mi}
    limits: {cpu: 250m, memory: 128Mi}

certController:
  create: true
  replicaCount: 1
  metrics:
    service:
      enabled: true # set false to skip the cert-controller metrics Service
      port: 8080
  securityContext:
    enabled: true
    allowPrivilegeEscalation: false
    capabilities:
      drop: [ALL]
    readOnlyRootFilesystem: true
    runAsNonRoot: true
    runAsUser: 1000
    seccompProfile:
      type: RuntimeDefault
  resources:
    requests: {cpu: 50m, memory: 64Mi}
    limits: {cpu: 250m, memory: 128Mi}

bitwarden-sdk-server:
  enabled: false # not this batch
helm repo add external-secrets https://charts.external-secrets.io
helm upgrade --install external-secrets external-secrets/external-secrets --version 2.12.0 \
  --namespace external-secrets --create-namespace -f values-hardened.yaml

Verify the latest published digest

cosign verify --key https://thepeoples.io/keys/oci.thepeoples.io.pub --insecure-ignore-tlog oci.thepeoples.io/hardened/external-secrets@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf
cosign verify-attestation --key https://thepeoples.io/keys/oci.thepeoples.io.pub --insecure-ignore-tlog --type https://thepeoples.io/attestations/hardened-gate/v1 oci.thepeoples.io/hardened/external-secrets@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf

The report views show the predicate types and commands for SPDX, scanner and optional OpenVEX attestations. Inspect the verified predicates as well as the signature.

Evidence

Publish and rescan reports for each tag. Gate is 0 CRITICAL / 0 HIGH from Trivy and Grype. MEDIUM/LOW are listed; they do not block publish. Remaining-CVE tables live here.

151.0 MiB · v2.12.0-tpio.1 · worst-of Trivy and Grype at publish.

Publication scan reports: Trivy · Grype · gate · Scan index

Corresponding source for v2.12.0-tpio.1 is at /oci/hardened/external-secrets/v2.12.0-tpio.1/source/.

MEDIUM/LOW are best-effort and non-blocking. Remaining counts:

MEDIUM 2LOW 2

Fixed-version availability does not guarantee a compatible fix.

ScannerCVE / IDPackageInstalledSeverityFixed version available
trivyCVE-2026-81870go.opentelemetry.io/otel/exporters/otlp/otlptracev1.40.0LOWYes: 1.45.0
grypeGHSA-8wmf-6v46-5gfggo.opentelemetry.io/otel/exporters/otlp/otlptracev1.40.0LOWYes: 1.45.0
trivyCVE-2026-81870go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcv1.40.0LOWYes: 1.45.0
grypeGHSA-8wmf-6v46-5gfggo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcv1.40.0LOWYes: 1.45.0
trivyGHSA-gcjh-h69q-9w9ggithub.com/google/cel-gov0.27.0MEDIUMYes: 0.29.0
trivyCVE-2026-2303go.mongodb.org/mongo-driverv1.17.6MEDIUMYes: 1.17.7

Counts retain scanner gate semantics; the list deduplicates identical package/version records. Different scanner IDs can describe the same advisory.

Back to pull

This image is here as the Secret sync operator. Used by External Secrets Operator (controller), External Secrets Operator (webhook), External Secrets Operator (cert-controller).

Why this image is connected
Why this image is connectedExternalSecrets…uses this imageExternalSecrets…uses this imageExternalSecrets…uses this imageExternalSecrets…uses this image

Arrow styles

  • uses
  • External Secrets Operator uses External Secrets Operator as controller
  • External Secrets Operator uses External Secrets Operator as webhook
  • External Secrets Operator uses External Secrets Operator as cert-controller

Status: published. Platform: linux/amd64.

Available tags and scan history

v2.12.0-tpio.1

Digest:

oci.thepeoples.io/hardened/external-secrets@sha256:f29c67bcff4c6796df8991dcb8d0e1d69e6f0769dbadc688139260aff559d0cf

Published 2026-10-11T06:23:15Z UTC.

This tag used the first-publish cooldown break-glass (first publish; PhreeStyle override 2026-10-10 20:11 CT).

Publication scan reports: Trivy / Grype / gate / OpenVEX

SPDX SBOM · OpenVEX: not present

Corresponding source available at /oci/hardened/external-secrets/v2.12.0-tpio.1/source/, including exact upstream archives, SHA-256 sums, packaging, rebuild recipe and recorded changes.

Scan history for v2.12.0-tpio.1
Scanned (UTC)Kind / gateTrivyGrypeScanner DB versions/dates
2026-10-10T21:11:22Zpublish / passCRITICAL 0HIGH 0MEDIUM 2LOW 2CRITICAL 0HIGH 0MEDIUM 0LOW 2Trivy 0.73.0 / DB {"DownloadedAt": "2026-10-10T20:21:17.504299339Z", "NextUpdate": "2026-10-11T18:59:50.889010572Z", "UpdatedAt": "2026-10-10T18:59:50.889010923Z", "Version": 2} / 2026-10-10T18:59:50.889010923Z; Grype 0.120.1 / schema v6.1.10 / 2026-10-10T06:30:01Z

MEDIUM/LOW are best-effort and non-blocking. Remaining counts:

MEDIUM 2LOW 2

Fixed-version availability does not guarantee a compatible fix.

Remaining MEDIUM/LOW findings (6 distinct scanner/package/version records; 6 with fixed versions available)
ScannerCVE / IDPackageInstalledSeverityFixed version available
trivyCVE-2026-81870go.opentelemetry.io/otel/exporters/otlp/otlptracev1.40.0LOWYes: 1.45.0
grypeGHSA-8wmf-6v46-5gfggo.opentelemetry.io/otel/exporters/otlp/otlptracev1.40.0LOWYes: 1.45.0
trivyCVE-2026-81870go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcv1.40.0LOWYes: 1.45.0
grypeGHSA-8wmf-6v46-5gfggo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcv1.40.0LOWYes: 1.45.0
trivyGHSA-gcjh-h69q-9w9ggithub.com/google/cel-gov0.27.0MEDIUMYes: 0.29.0
trivyCVE-2026-2303go.mongodb.org/mongo-driverv1.17.6MEDIUMYes: 1.17.7

Counts retain scanner gate semantics; the list deduplicates identical package/version records. Different scanner IDs can describe the same advisory.

Rebuild and licence

Same upstream digest (ladder c); distroless/static-debian13 has no apk/apt. Go-binary findings wait for ladder (b). One image covers three chart roles.

Licence: Apache-2.0.

External Secrets Operator is Apache-2.0. The distroless/static-debian13 base keeps its own licenses.

Upstream source