v1.0.13 Release
Release Tag: v1.0.13-bighammer-aws
Chart Version: 1.0.13
Base Release: v1.0.12-bighammer-aws
BigHammer Helm Chart v1.0.13 introduces native Keyless IAM Role Authentication across all microservices on both Amazon EKS (IRSA) and AWS EC2 (IAM Instance Profiles / K3s / Standalone Docker), enterprise External Secrets Operator (ESO) integration with AWS Secrets Manager, and dynamic in-pod cloud license resolution.
This release completely eliminates static AWS Access Keys (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) from environment variables and Kubernetes Secret manifests, establishing an enterprise-grade least-privilege security posture.
Published Chart & Download Instructions
Customers entitled to BigHammer on AWS can pull the published chart using any of the following methods.
Prerequisites
- Kubernetes: Amazon EKS 1.28+ or Standalone K3s on AWS EC2
- Helm: v3.10+ (v3.17+ recommended)
- IAM Authentication:
- For EKS: AWS IAM OIDC Provider enabled on the EKS cluster.
- For EC2: AWS IAM Instance Profile attached to the EC2 host with IMDSv2 Hop Limit set to 2+.
- Secrets Management: External Secrets Operator (ESO) v0.18.x+ with ambient IRSA / Instance Profile → AWS Secrets Manager
- Ingress Controller: AWS Load Balancer Controller (ALB Ingress Class
alb) on EKS, or Traefik on K3s - Message Broker: RabbitMQ deployed via dedicated Helm release — RabbitMQ Broker
- Database: Amazon RDS PostgreSQL with
pgvector(or in-cluster PostgreSQL for standalone EC2 POCs)
Option 1: Download from Your Mirrored ECR (Recommended)
In production, pull the chart from your mirrored Amazon ECR (see Release Manifest & Distribution):
aws ecr get-login-password --region <your-aws-region> | \
helm registry login --username AWS --password-stdin \
<your-aws-account-id>.dkr.ecr.<your-aws-region>.amazonaws.com
helm pull oci://<your-aws-account-id>.dkr.ecr.<your-aws-region>.amazonaws.com/bh-helm-release/bighammer \
--version 1.0.13
tar -xzf bighammer-1.0.13.tgz
cd bighammer
Option 2: Pull Directly from BigHammer ECR Catalog
If your CI/CD runner is authorized to assume the BigHammer reader role (bh-artifact-reader-<customer-id>):
aws ecr get-login-password --region <bh-catalog-aws-region> | \
helm registry login --username AWS --password-stdin \
<bh-aws-account-id>.dkr.ecr.<bh-catalog-aws-region>.amazonaws.com
helm pull oci://<bh-aws-account-id>.dkr.ecr.<bh-catalog-aws-region>.amazonaws.com/aws/bh-helm-release/bighammer \
--version 1.0.13
tar -xzf bighammer-1.0.13.tgz
cd bighammer
Option 3: Source Checkout via Git
git clone --depth 1 https://github.com/bh-ai/bh-helm-charts.git
cd bh-helm-charts/incubator/bighammer
git checkout v1.0.13-bighammer-aws
helm dependency build .
Release Summary & Key Capabilities
1. Keyless Authentication Across EKS & EC2
- Amazon EKS (IRSA): Microservice pods authenticate via short-lived OIDC Web Identity Tokens projected automatically into pods (
sts:AssumeRoleWithWebIdentity). - AWS EC2 (Instance Profile): Pods running in K3s or Docker containers on EC2 automatically inherit ambient temporary credentials from the EC2 Instance Metadata Service (IMDSv2) via the attached IAM Instance Profile.
- Zero Static Keys: Neither deployment model requires static
AWS_ACCESS_KEY_IDorAWS_SECRET_ACCESS_KEYin environment variables or Secret objects.
2. External Secrets Operator (ESO) & AWS Secrets Manager Direct Sync
- Standardized
SecretStore(aws-secret-store) automatically resolves credentials:- On EKS: Via ServiceAccount JWT tokens (
spec.provider.aws.auth.jwt.serviceAccountRef). - On EC2: Via ambient Instance Profile credentials (omitting the
authblock inSecretStore).
- On EKS: Via ServiceAccount JWT tokens (
- All application secrets (database credentials, RabbitMQ passwords, JWT keys, Keycloak configs) are dynamically synced from AWS Secrets Manager into Kubernetes secrets.
3. Dynamic Cloud License Resolution (bh-catalog-api)
- BigHammer platform license and RSA verification public key are dynamically fetched from AWS Secrets Manager at container initialization (
USE_CLOUD_SECRETS_FOR_LICENSE: true). - Verifies license signatures without mounting local secret files or baking licenses into containers.
4. Resilient CloudFactoryService Ambient Fallback
- In-pod cloud SDK operations (such as migration credential persistence in
bh-migrate-apiand LLM configurations inbh-ai-agent) seamlessly fallback to ambientpod_rolecredentials if static keys are omitted. - Prevents runtime credential exceptions during project creation and dynamic tenant execution.
5. Multi-Region Compatibility
- The entire Helm deployment and underlying Python microservice suite is region-agnostic.
- Setting
AWS_REGIONin your values file dynamically configures Secrets Manager, STS, and Bedrock routing to the target region.
6. Full Backward Compatibility
- Existing clusters that still require static IAM access keys can retain them by setting:
This preserves zero-downtime upgrades for both keyless and legacy infrastructure.global:remoteSecrets:app:awsCredentials:enabled: true
Keyless Authentication on AWS EC2 (Instance Profile & K3s)
For environments running standalone K3s or Docker containers on an AWS EC2 instance (e.g., single-node POCs or dedicated VM deployments), BigHammer supports keyless authentication via the EC2 Instance Profile.
How to Configure EC2 Keyless Authentication
Step 1: Create and Attach the IAM Instance Profile to the EC2 Instance
- Create an IAM Role with trust policy allowing EC2:
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": "ec2.amazonaws.com"},"Action": "sts:AssumeRole"}]}
- Attach an IAM Policy granting access to BigHammer Secrets Manager secrets:
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["secretsmanager:GetSecretValue","secretsmanager:DescribeSecret"],"Resource": "arn:aws:secretsmanager:<AWS_REGION>:<AWS_ACCOUNT_ID>:secret:bh/*"},{"Effect": "Allow","Action": ["kms:Decrypt"],"Resource": "*"}]}
- Attach this IAM Role to your EC2 instance as an Instance Profile.
Step 2: Configure EC2 Instance Metadata Service (IMDSv2 Hop Limit)
By default, AWS EC2 IMDSv2 sets the HTTP response hop limit to 1. Because container runtimes (such as Docker or K3s Flannel) operate on an internal bridge network, packets originating from inside a container are at hop count 2.
To allow containers to reach the metadata service, increase the hop limit to 2:
aws ec2 modify-instance-metadata-options \
--instance-id <YOUR_EC2_INSTANCE_ID> \
--http-put-response-hop-limit 2 \
--http-endpoint enabled
Step 3: Use the Dedicated EC2 Values File
Deploy using values-k3s-ec2.yaml. In this overlay:
secretStore.accessKeyIDSecretRef.name: ""andsecretAccessKeySecretRef.name: ""are left empty, which instructs the External Secrets Operator to inherit the host's EC2 Instance Profile.- Service accounts do not specify
eks.amazonaws.com/role-arnannotations (as there is no EKS OIDC provider on EC2). - Pods natively query
http://169.254.169.254/latest/meta-data/to obtain short-lived AWS credentials.
EC2 Keyless Authentication: Potential Issues & Solutions
| Issue / Symptom | Root Cause | Solution |
|---|---|---|
NoCredentialsError / Unable to locate credentials inside pods (Host shell works, but pods fail) | IMDS Hop Limit is set to 1. The IP TTL expires when metadata responses transit the container bridge network. | Run aws ec2 modify-instance-metadata-options --instance-id <ID> --http-put-response-hop-limit 2. Verify connectivity inside a test pod: curl http://169.254.169.254/latest/meta-data/. |
SecretStore reports ValidationFailed or cannot authenticate | secretStore in Helm has lingering static secret references or invalid JWT config. | In values-k3s-ec2.yaml, leave accessKeyIDSecretRef and secretAccessKeySecretRef empty. ESO will automatically fall back to the EC2 Instance Profile without an explicit auth block. |
Connection Timeout to AWS Secrets Manager (EndpointConnectionError) | EC2 instance is located in a private subnet without internet access or VPC Endpoints. | Ensure the subnet routes through a NAT Gateway, or configure an AWS VPC Interface Endpoint for com.amazonaws.<region>.secretsmanager. |
AccessDenied on kms:Decrypt | Secrets in Secrets Manager are encrypted with a Customer Managed Key (CMK), but the EC2 IAM Role lacks KMS permissions. | Add kms:Decrypt for the CMK ARN to the EC2 Instance Profile IAM Policy. |
ClientError: 401 Unauthorized on IMDS token retrieval | IMDSv2 enforcement enabled without session token support. | BigHammer microservices use boto3 which natively handles IMDSv2 token acquisition (PUT /latest/api/token). Ensure hop limit is set to 2 so token requests succeed. |
Comparison: Amazon EKS vs AWS EC2
| Dimension | Amazon EKS Deployment | AWS EC2 (K3s / Standalone) |
|---|---|---|
| Authentication Mechanism | IAM Roles for Service Accounts (IRSA) | IAM Instance Profile (IMDSv2) |
| Credential Scope | Pod-level granularity (per ServiceAccount) | Host-level granularity (shared across pods) |
| OIDC Provider Required? | Yes (Cluster OIDC issuer) | No (Direct EC2 metadata) |
| Required IMDS Hop Limit | N/A (EKS injects web identity token) | http-put-response-hop-limit: 2 |
| Helm Values Overlay | values-release.yaml / values-dev.yaml | values-k3s-ec2.yaml |
| ServiceAccount Role Annotation | Required (eks.amazonaws.com/role-arn) | Omitted (Ambient host credentials) |
| Ingress Controller | AWS Load Balancer Controller (alb) | Traefik / NodePort |
Upgrading from v1.0.12 to v1.0.13
Scenario A: Upgrading on Amazon EKS (IRSA)
- Update IAM Role Trust Relationship: Ensure the IAM role trusts your EKS cluster's OIDC provider using
StringLikeevaluation:{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>:aud": "sts.amazonaws.com"},"StringLike": {"oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>:sub": ["system:serviceaccount:bh-control-plane:*","system:serviceaccount:default:external-secrets"]}}}]} - Deploy Helm Upgrade:
helm upgrade bighammer ./bighammer \--namespace bh-control-plane \-f values-<env>.yaml
Scenario B: Upgrading on AWS EC2 (Standalone K3s)
- Verify IMDS Hop Limit:
aws ec2 modify-instance-metadata-options \--instance-id <YOUR_EC2_INSTANCE_ID> \--http-put-response-hop-limit 2
- Verify EC2 Instance Profile:
Ensure the instance profile role has permissions to read
bh/*secrets from AWS Secrets Manager. - Deploy Helm Upgrade:
helm upgrade bighammer ./bighammer \--namespace bh-control-plane \-f values-k3s-ec2.yaml
Post-Upgrade Verification (Both EKS & EC2)
-
Check External Secrets Sync:
kubectl get secretstore,es -n bh-control-planeExpected Status:
SecretSynced: Truefor all 12 ExternalSecret resources. -
Verify Microservice Health:
kubectl get pods -n bh-control-planeAll microservice pods should be
Runningand passing readiness probes.
Related Documentation
| Guide | Description |
|---|---|
| IAM Role Authentication & ESO Setup Guide | In-depth architectural guide on IRSA, EC2 IMDS, and trust configurations |
| K3s Standalone POC Setup on EC2 | Step-by-step guide to installing BigHammer on an EC2 instance |
| Secrets Manager Secrets Checklist | List of all required secret keys and formats |
| AWS Platform Deployment | Complete end-to-end installation walkthrough on Amazon EKS |
| v1.0.12 Release Notes | Previous AWS baseline release documentation |