Skip to content

feat: Add FIPS 140-3 support using Microsoft Go and Azure Linux#237

Draft
kaovilai wants to merge 1 commit intoopenshift:oadp-1.5from
kaovilai:fips-docs-oadp-1.5
Draft

feat: Add FIPS 140-3 support using Microsoft Go and Azure Linux#237
kaovilai wants to merge 1 commit intoopenshift:oadp-1.5from
kaovilai:fips-docs-oadp-1.5

Conversation

@kaovilai
Copy link
Copy Markdown
Member

@kaovilai kaovilai commented Apr 6, 2026

Summary

Add FIPS 140-3 support to hypershift-oadp-plugin using Microsoft's Go fork and Azure Linux base images for OpenShift OADP 1.5, consistent with Velero and Azure plugin implementations.

Changes

  • Builder: Switch to mcr.microsoft.com/oss/go/microsoft/golang:1.25-azurelinux3.0
  • Runtime: Switch to mcr.microsoft.com/azurelinux/distroless/base:3.0
  • FIPS Config: Add CGO_ENABLED=1 GOFIPS140=latest at build time
  • Documentation: Add inline comments explaining Azure Linux FIPS configuration

Why Microsoft Go + Azure Linux?

  1. Consistency: Matches FIPS approach across all OADP components (Velero, Azure plugin)
  2. Azure Integration: Microsoft's Go fork is optimized for Azure environments
  3. FIPS 140-3 Compliance: Azure Linux 3.0 provides FIPS compliance via SCOSSL/SymCrypt
  4. Minimal Attack Surface: Distroless base contains only essential components
  5. Reference Architecture: Follows ARO-HCP pattern from https://github.com/Azure/ARO-HCP/blob/main/frontend/Dockerfile

FIPS Implementation Details

Uses Microsoft's Go fork with platform-dependent crypto:

  • ✅ Integrated FIPS support in Microsoft's Go
  • ✅ Azure Linux 3.0 FIPS 140-3 certified (SCOSSL/SymCrypt)
  • ✅ Plugin processes inherit GODEBUG=fips140=on from parent Velero
  • ✅ Distroless base minimizes security exposure

Why No Runtime GODEBUG?

Plugin processes are spawned by Velero and automatically inherit the parent's GODEBUG=fips140=on environment variable. No additional configuration needed in the plugin container.

Companion PRs

Testing

Build and verify:

podman build -f Dockerfile.oadp -t hypershift-oadp-plugin:fips-test .
# Verify binary exists
podman run --rm hypershift-oadp-plugin:fips-test ls -lh /plugins/

Multi-arch build and push:

podman build -f Dockerfile.oadp . --platform linux/amd64,linux/arm64 --manifest quay.io/oadp-aro/hypershift-oadp-plugin:oadp-1.5-latest
podman manifest push quay.io/oadp-aro/hypershift-oadp-plugin:oadp-1.5-latest

Note

Responses generated with Claude

/cc @kaovilai

@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Apr 6, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 6, 2026

Important

Review skipped

Auto reviews are limited based on label configuration.

🚫 Excluded labels (none allowed) (1)
  • do-not-merge/work-in-progress

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ff396e08-8785-418f-918f-2535c03f6e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Apr 6, 2026

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Apr 6, 2026

@kaovilai: GitHub didn't allow me to request PR reviews from the following users: kaovilai.

Note that only openshift members and repo collaborators can review this PR, and authors cannot review their own PRs.

Details

In response to this:

Summary

Add FIPS 140-3 support to hypershift-oadp-plugin using Go Cryptographic Module v1.26.0 for OpenShift OADP 1.5, consistent with Velero and Azure plugin implementations.

Changes

  • Add GOFIPS140=v1.26.0 environment variable for FIPS-capable build
  • Use CGO_ENABLED=1 for build (backward compatibility)
  • Add inline documentation explaining FIPS configuration
  • Switch from strictfipsruntime approach to native Go FIPS module

FIPS Implementation Details

Uses upstream Go's native FIPS 140-3 module:

  • ✅ Official FIPS 140-3 certified (module A6650)
  • ✅ Pure Go implementation (CGO not required but used for compatibility)
  • ✅ Plugin processes inherit GODEBUG=fips140=on from parent Velero
  • ✅ Cross-compilation supported natively

Why This Approach?

  • Consistency: Matches FIPS approach across OADP components
  • Pure Go: Unlike Microsoft Go approach in Velero/Azure plugin, this uses upstream Go
  • Plugin Model: Inherits GODEBUG from Velero parent process

Related

[!Note]
Responses generated with Claude

/cc @kaovilai

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@openshift-ci openshift-ci bot added needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. approved Indicates a PR has been approved by an approver from all required OWNERS files. labels Apr 6, 2026
@kaovilai kaovilai force-pushed the fips-docs-oadp-1.5 branch 4 times, most recently from fe0adc3 to 309b82e Compare April 6, 2026 20:08
@kaovilai kaovilai changed the base branch from main to oadp-1.5 April 6, 2026 20:16
@kaovilai kaovilai changed the title feat: Add FIPS 140-3 support with GOFIPS140 v1.26.0 feat: Add FIPS 140-3 support using Microsoft Go and Azure Linux Apr 6, 2026
@kaovilai kaovilai force-pushed the fips-docs-oadp-1.5 branch from 309b82e to 14f7432 Compare April 6, 2026 20:41
@openshift-ci openshift-ci bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 6, 2026
@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Apr 6, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: kaovilai

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@kaovilai kaovilai force-pushed the fips-docs-oadp-1.5 branch 2 times, most recently from 94f247f to 02c0b1a Compare April 6, 2026 21:07
Switch to Microsoft Go and Azure Linux for FIPS 140-3 compliance in
OpenShift OADP 1.5 HyperShift deployments.

Changes:
- Replace builder with mcr.microsoft.com/oss/go/microsoft/golang:1.25-azurelinux3.0
- Replace runtime with mcr.microsoft.com/azurelinux/distroless/base:3.0
- Add GOFIPS140=latest and CGO_ENABLED=1 for Microsoft's FIPS implementation
- Add documentation explaining Azure Linux FIPS configuration
- Switch from strictfipsruntime approach to Microsoft's FIPS module

Why Microsoft Go + Azure Linux distroless:
- Microsoft's Go fork provides integrated FIPS support for Azure environments
- Azure Linux 3.0 distroless base is FIPS 140-3 compliant with SCOSSL/SymCrypt
- Minimal attack surface with distroless
- Consistency with Velero and Azure plugin implementations
- Follows ARO-HCP reference architecture

Plugin processes inherit GODEBUG=fips140=on from the parent Velero
process, so no runtime environment variable configuration needed.

Reference implementation: https://github.com/Azure/ARO-HCP/blob/main/frontend/Dockerfile

Companion to: openshift/velero#492
Companion to: openshift/velero-plugin-for-microsoft-azure#125

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Signed-off-by: Tiger Kaovilai <passawit.kaovilai@gmail.com>
@kaovilai kaovilai force-pushed the fips-docs-oadp-1.5 branch from 02c0b1a to e46063a Compare April 6, 2026 21:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant