Skip to content

feat(operator): support FIPS 140-3 runtime mode (v0.2 backport) - #348

Merged
AviadHayumi merged 3 commits into
v0.2from
cherry-pick/v0.2-fips-140-3
Sep 8, 2026
Merged

feat(operator): support FIPS 140-3 runtime mode (v0.2 backport)#348
AviadHayumi merged 3 commits into
v0.2from
cherry-pick/v0.2-fips-140-3

Conversation

@nshidlansik

Copy link
Copy Markdown
Contributor

What does this PR do?

Reduced-scope backport of the FIPS 140-3 support added to main in #335.
v0.2 predates the crd-upgrader Job and webhook support that #335 also
touched, so this backport is operator-only:

  • Pins GOFIPS140=v1.0.0 in operator/Dockerfile so the Go toolchain's
    CMVP-validated FIPS 140-3 crypto module is always linked into the operator
    binary.
  • Adds a fipsMode chart value (off / on / only, default off,
    validated via a shared karta.validateFipsMode helper) that sets
    GODEBUG=fips140=<mode> on the operator container.
  • Adds --attest type=sbom to operator/Makefile's docker-buildx-push.
  • Adds docs/FIPS.md, trimmed to this operator-only scope: no
    crd-upgrader or tlsmlkem content, since that Job and the TLS-curve
    workaround it needed do not apply on this branch.

Related issue(s)

Relates to #334

Checklist

  • All commits are signed off with DCO (git commit -s)
  • New/modified files have SPDX license and copyright headers
  • Documentation updated (docs/FIPS.md, README.md)
  • Tests pass (make check)
  • No proprietary or internal information included

Reduced-scope backport of the FIPS 140-3 support added to main in
#335. v0.2 predates the crd-upgrader Job and webhook support that
#335 also touched, so this backport is operator-only:

- Pins GOFIPS140=v1.0.0 in operator/Dockerfile so the Go toolchain's
  CMVP-validated FIPS 140-3 crypto module is always linked into the
  operator binary.
- Adds a fipsMode chart value (off/on/only, default off, validated
  via a shared karta.validateFipsMode helper) that sets
  GODEBUG=fips140=<mode> on the operator container.
- Adds --attest type=sbom to operator/Makefile's docker-buildx-push.
- Adds docs/FIPS.md, trimmed to the operator-only scope (no
  crd-upgrader or tlsmlkem content, since that Job does not exist on
  this branch).

Relates to #334

Signed-off-by: Nir Shidlansik <nshidlansik@nvidia.com>
Signed-off-by: Nir Shidlansik <nshidlansik@nvidia.com>
Same fix as the main-branch backport source: GOFIPS140=v1.0.0 at build
time makes the operator binary's own compiled-in GODEBUG default
fips140=on, so wrapping the GODEBUG env var in
{{- if ne .Values.fipsMode "off" }} meant fipsMode=off (the chart
default) set no GODEBUG at all and fell through to the compiled-in
on default. off and on were identical; every default install silently
ran FIPS self-tests and the FIPS-restricted TLS cipher/curve list.

Always render GODEBUG explicitly so fipsMode maps to the runtime mode
it names.

Found by Aviad Hayumi in review after #335 (the main-branch source of
this backport) merged.

Signed-off-by: Nir Shidlansik <nshidlansik@nvidia.com>
@AviadHayumi
AviadHayumi merged commit 77f721c into v0.2 Sep 8, 2026
1 check passed
@AviadHayumi
AviadHayumi deleted the cherry-pick/v0.2-fips-140-3 branch September 8, 2026 15:17
- name: {{ .Chart.Name }}
image: "{{ required "image.repository is required" .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current fix works but leaves an unnecessary env var in place (my original comment). Please change it to GODEBUG=fips140=off as Aviad wrote above, and keep the if condition on the env var.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants