Skip to main content
This tutorial covers deploying ClickHouse Private with FIPS 140-3 compliance on AWS. It builds on the standard AWS deployment as an overlay — you must complete the AWS resource setup first, then follow these FIPS-specific steps for the Kubernetes resources.
Deploying on GKE?The FIPS-specific Kubernetes steps below — certificate generation, certificate secrets, and the openSSL Helm flags — are cloud-agnostic. For GCP, provision the infrastructure with Deploy on GCP GKE, then apply those steps here, substituting the GCS storage settings and Workload Identity from the GCP guide.

Prerequisites

Before starting this tutorial, you must have completed the following from tutorials/deploy-aws.md:
  • Step 1: IAM role for ECR access
  • Step 2: Container images copied to your ECR (using FIPS version tags — see below)
  • Step 3: VPC created
  • Step 4: EKS cluster created
  • Step 5: Node groups created
  • Step 6: S3 bucket and IAM roles created

FIPS Version Tags

Use the following FIPS-specific image tags when copying artifacts:

S3 Bucket Naming Restriction

The S3 bucket name cannot contain any periods (.) when using FIPS. The S3 FIPS endpoints require virtual-host-style addressing, which does not work when the bucket name contains periods.

Step 1: Create FIPS Certificates

FIPS compliance requires TLS certificates generated using FIPS-approved algorithms in a FIPS-enabled environment. You need three sets of certificates: You also need a CA certificate (ca.crt and ca.key), either self-signed or from your organization’s certificate authority. Requirements:
  • Minimum RSA 3072-bit key size
  • SHA-256 or higher signature algorithm
  • Generated in a FIPS-enabled environment
  • A unique set of certificates (excluding CA) must be created for each ClickHouse cluster
For the full certificate generation procedure using a Red Hat UBI8 container with FIPS crypto policy, see how-to/configure-fips-certificates.md.

Step 2: Install Kubernetes Prerequisites

Install VolumeSnapshot CRDs

Install StorageClass (Optional)

Only if you do not have a custom or existing StorageClass:

Step 3: Install Operator

Note the FIPS ECR endpoint format: 0000000000.dkr-ecr-fips.us-west-2.on.aws (not the standard .amazonaws.com endpoint).

Step 4: Create Certificate Secrets

Secrets must be installed in the same Kubernetes namespace where the ClickHouse cluster will run. If your cluster name is default-xx-01, the namespace will be ns-default-xx-01. Ensure the namespace exists, then create the secrets. Do not change the secret names or key names.

Step 5: Deploy ClickHouse Cluster

Use the correct FIPS version of the endpoints for ECR and S3. FIPS endpoints can be found at https://aws.amazon.com/compliance/fips/.
Guaranteed QoS (recommended)ClickHouse workloads should run with matching requests and limits for both CPU and memory. The single SERVER_CPU/SERVER_MEMORY/KEEPER_CPU/ KEEPER_MEMORY values below are applied to both resources.requests and resources.limits in the helm invocation that follows, which places the pods in the Guaranteed QoS class. If you need to run with a different QoS class, review Pod QoS: Guaranteed (recommended) first for the trade-offs.
Key differences from the standard AWS deployment:

Step 6: Verify Installation

Port-forward on TLS Port

With FIPS mode, ClickHouse uses TLS on port 9440 instead of the standard port 9000.

Create Client Configuration

Create a client-config.xml file to tell the ClickHouse client where to find the CA certificate. Update the path to your ca.crt file:

Connect and Run a Query

Run a test query:
Expected output:
Important: Port 9000 (plaintext native) and port 8123 (plaintext HTTP) will refuse connections when openSSL.required=true. Use port 9440 (native TLS) or port 8443 (HTTPS) instead.

Next Steps

  • Teleport integration (optional): For secure database access via Teleport Enterprise, see Integrate Teleport with ClickHouse Private. This requires SERVER_VERIFICATION_MODE=relaxed and KEEPER_VERIFICATION_MODE=relaxed.
Last modified on August 7, 2026