devops-automation kubernetes secretshashicorp vaultsecret management

Kubernetes Secret Management with HashiCorp Vault Guide

Master kubernetes secrets management with HashiCorp Vault integration. Learn best practices, implementation strategies, and security patterns for DevOps teams.

📖 11 min read 📅 May 13, 2026 ✍ By PropTechUSA AI
11m
Read Time
2.2k
Words
19
Sections

Managing secrets in Kubernetes environments presents a critical challenge for modern DevOps teams. While Kubernetes provides native secret objects, they lack the advanced features required for enterprise-grade security. HashiCorp Vault emerges as the gold standard for secret management, offering dynamic secrets, fine-grained access control, and comprehensive audit trails that native Kubernetes secrets simply cannot match.

Understanding the Kubernetes Secret Management Challenge

Kubernetes native secrets are stored as base64-encoded values in etcd, which creates several security vulnerabilities. This approach lacks encryption at rest by default, provides no secret rotation capabilities, and offers limited access control mechanisms. For organizations handling sensitive data—particularly in PropTech environments where [customer](/custom-crm) financial information and property data require stringent protection—these limitations become deal-breakers.

Native Kubernetes Secrets Limitations

The fundamental issues with Kubernetes secrets extend beyond simple encoding. Base64 encoding is not encryption, meaning anyone with etcd access can decode secrets instantly. Additionally, secrets are distributed to nodes and stored in tmpfs, creating multiple attack vectors. Version control challenges arise when secrets are embedded in YAML manifests, leading to potential exposure in Git repositories.

Modern applications require dynamic secrets with automatic rotation, centralized secret policies, and detailed access logging. Native Kubernetes secrets provide none of these capabilities, making them unsuitable for production environments handling sensitive data.

The HashiCorp Vault Advantage

HashiCorp Vault transforms secret management through its comprehensive security model. It provides true encryption at rest and in transit, dynamic secret generation with automatic expiration, and role-based access control with detailed audit logging. Vault's integration with Kubernetes authentication enables seamless secret injection without modifying application code.

The [platform](/saas-platform) supports multiple secret engines including database credentials, [API](/workers) keys, certificates, and cloud provider tokens. This versatility makes Vault particularly valuable for PropTech applications that integrate with multiple third-party services and require diverse credential types.

Core Components of Vault-Kubernetes Integration

Successful Vault integration requires understanding three primary components: the Vault Agent, the Vault CSI Driver, and the Vault Secrets Operator. Each component serves specific use cases and provides different levels of integration complexity and functionality.

Vault Agent Architecture

The Vault Agent acts as a client daemon that handles authentication and token renewal automatically. It runs as a sidecar container alongside application pods, managing the complete authentication lifecycle. The agent can template secrets into files or inject them into applications through various methods.

yaml
apiVersion: v1

kind: ConfigMap

metadata:

name: vault-agent-config

data:

config.hcl: |

vault {

address = "https://vault.company.com:8200"

}

auto_auth {

method "kubernetes" {

mount_path = "auth/kubernetes"

config = {

role = "proptech-api"

}

}

sink "file" {

config = {

path = "/vault/secrets/token"

}

}

}

template {

source = "/vault/config/database.tpl"

destination = "/vault/secrets/database.json"

perms = 0644

}

Vault CSI Driver Implementation

The Container Storage Interface (CSI) driver provides a Kubernetes-native approach to secret injection. It mounts secrets as volumes, ensuring they exist before application containers start. This method offers excellent security because secrets never traverse the Kubernetes API after initial authentication.

yaml
apiVersion: v1

kind: SecretProviderClass

metadata:

name: proptech-secrets

spec:

provider: vault

parameters:

vaultAddress: "https://vault.company.com:8200"

roleName: "proptech-api"

objects: |

- objectName: "database-password"

secretPath: "secret/data/proptech/database"

secretKey: "password"

- objectName: "api-key"

secretPath: "secret/data/proptech/external"

secretKey: "mls-api-key"

Vault Secrets Operator Benefits

The Vault Secrets Operator manages the complete lifecycle of Kubernetes secrets populated from Vault. It automatically syncs secret updates, handles rotation events, and maintains consistency between Vault and Kubernetes. This operator approach reduces operational overhead while providing enterprise-grade secret management capabilities.

yaml
apiVersion: secrets.hashicorp.com/v1beta1

kind: VaultStaticSecret

metadata:

name: proptech-database-creds

spec:

type: kv-v2

mount: secret

path: proptech/database

destination:

name: database-credentials

create: true

refreshAfter: 30s

vaultAuthRef: proptech-auth

Implementation Strategies and Code Examples

Implementing Vault integration requires careful planning around authentication methods, secret injection patterns, and application integration approaches. The following examples demonstrate production-ready configurations for common PropTech scenarios.

Kubernetes Authentication Setup

Establishing trust between Kubernetes and Vault begins with configuring the Kubernetes authentication method. This process involves creating service accounts, defining roles, and establishing policies that govern secret access patterns.

bash
vault auth enable kubernetes

vault write auth/kubernetes/config \

token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \

kubernetes_host="https://kubernetes.default.svc.cluster.local:443" \

kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

vault write auth/kubernetes/role/proptech-api \

bound_service_account_names=proptech-api \

bound_service_account_namespaces=production \

policies=proptech-read-policy \

ttl=24h

Dynamic Secret Configuration

Dynamic secrets represent the pinnacle of secret management security. Instead of storing static credentials, Vault generates unique credentials for each application instance. This approach significantly reduces the blast radius of potential credential compromises.

hcl
vault secrets enable database

vault write database/config/proptech-postgres \

plugin_name=postgresql-database-plugin \

connection_url="postgresql://{{username}}:{{password}}@postgres.company.com:5432/proptech?sslmode=require" \

allowed_roles="readonly,readwrite" \

username="vault-admin" \

password="secure-admin-password"

vault write database/roles/readwrite \

db_name=proptech-postgres \

creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO \"{{name}}\";"

default_ttl="1h" \

max_ttl="24h"

Application Integration Pattern

Applications must be designed to handle dynamic credentials gracefully. This requires implementing credential refresh logic and handling temporary authentication failures during rotation events. The following example demonstrates a robust integration pattern.

typescript
interface VaultCredentials {

username: string;

password: string;

lease_id: string;

lease_duration: number;

}

class VaultSecretManager {

private credentials: VaultCredentials | null = null;

private refreshTimer: NodeJS.Timeout | null = null;

async initializeCredentials(): Promise<VaultCredentials> {

const vaultToken = await this.authenticateWithVault();

const response = await fetch(

${process.env.VAULT_ADDR}/v1/database/creds/readwrite,

{

headers: {

'X-Vault-Token': vaultToken,

},

}

);

const data = await response.json();

this.credentials = data.data;

this.scheduleRefresh();

return this.credentials;

}

private scheduleRefresh(): void {

if (this.credentials && this.refreshTimer) {

clearTimeout(this.refreshTimer);

}

const refreshTime = (this.credentials!.lease_duration * 0.8) * 1000;

this.refreshTimer = setTimeout(() => {

this.initializeCredentials();

}, refreshTime);

}

async getDatabaseConnection(): Promise<DatabaseConnection> {

if (!this.credentials) {

await this.initializeCredentials();

}

return createDatabaseConnection({

username: this.credentials!.username,

password: this.credentials!.password,

host: process.env.DB_HOST,

database: process.env.DB_NAME,

});

}

}

💡
Pro TipAlways implement credential pre-refresh to avoid service interruptions. Refresh credentials when they reach 80% of their lease duration.

Monitoring and Observability

Production Vault deployments require comprehensive monitoring to track secret access patterns, identify potential security issues, and ensure high availability. Implementing proper observability helps teams maintain security posture while enabling rapid incident response.

yaml
apiVersion: v1

kind: ServiceMonitor

metadata:

name: vault-[metrics](/dashboards)

spec:

selector:

matchLabels:

app: vault

endpoints:

- port: vault-metrics

interval: 30s

path: /v1/sys/metrics

params:

format: [prometheus]

Best Practices and Security Considerations

Secure Vault integration extends far beyond basic configuration. Production environments require careful attention to network security, access patterns, secret lifecycle management, and disaster recovery procedures. These practices ensure robust secret management that scales with organizational growth.

Network Security and Access Control

Vault should never be exposed directly to the public internet. Implement network segmentation using Kubernetes NetworkPolicies to restrict Vault access to authorized pods only. Use TLS for all communications and implement certificate pinning where possible.

yaml
apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

name: vault-access-policy

spec:

podSelector:

matchLabels:

app: vault

policyTypes:

- Ingress

- Egress

ingress:

- from:

- namespaceSelector:

matchLabels:

vault-access: "true"

- podSelector:

matchLabels:

vault-client: "true"

ports:

- protocol: TCP

port: 8200

Secret Lifecycle Management

Establish clear policies for secret rotation, expiration, and emergency revocation. Dynamic secrets should have short lifespans with automatic rotation. Static secrets require regular rotation schedules and immediate revocation capabilities during security incidents.

⚠️
WarningNever store Vault tokens in container images or Kubernetes secrets. Use short-lived tokens and implement proper token renewal mechanisms.

Audit and Compliance

Vault's audit capabilities provide comprehensive logging of all secret access operations. Configure multiple audit devices for redundancy and integrate logs with your SIEM solution for real-time security monitoring.

bash
vault audit enable file file_path=/vault/logs/audit.log

vault audit enable syslog tag="vault" facility="LOCAL0"

For PropTech companies handling sensitive financial and personal data, these audit logs become crucial for compliance with regulations like GDPR, CCPA, and financial industry standards. The detailed audit trail helps demonstrate due diligence in data protection efforts.

High Availability and Disaster Recovery

Vault clusters should be deployed across multiple availability zones with automated failover capabilities. Implement regular backup procedures for both Vault data and unsealing keys. Test disaster recovery procedures regularly to ensure rapid service restoration.

yaml
apiVersion: apps/v1

kind: StatefulSet

metadata:

name: vault

spec:

serviceName: vault

replicas: 3

template:

spec:

affinity:

podAntiAffinity:

preferredDuringSchedulingIgnoredDuringExecution:

- weight: 100

podAffinityTerm:

labelSelector:

matchLabels:

app: vault

topologyKey: topology.kubernetes.io/zone

Scaling Vault Integration for Enterprise Environments

As organizations grow, Vault integration must evolve to support multiple teams, environments, and applications. This requires implementing namespace-based segregation, establishing governance policies, and creating self-service capabilities that maintain security while enabling developer productivity.

At PropTechUSA.ai, we've observed that successful Vault implementations begin with strong foundational policies and gradually expand to support diverse use cases. Our platform integration capabilities demonstrate how proper secret management enables secure, scalable PropTech solutions that handle millions of property transactions while maintaining strict data protection standards.

Multi-Tenancy and Governance

Implement Vault namespaces to provide logical separation between different teams or applications. This approach ensures that PropTech development teams can manage their secrets independently while maintaining overall security policies.

bash
vault namespace create proptech-api

vault policy write -namespace=proptech-api api-policy - <<EOF

path "secret/data/api/*" {

capabilities = ["create", "read", "update", "delete", "list"]

}

path "database/creds/api-role" {

capabilities = ["read"]

}

EOF

Establishing clear governance policies ensures consistent secret management practices across all teams. This includes standardized naming conventions, rotation schedules, and access review procedures that scale with organizational growth.

Vault's integration with Kubernetes RBAC creates powerful authorization models that align with existing organizational structures. Teams can maintain autonomy over their secrets while administrators retain oversight and compliance capabilities.

💡
Pro TipImplement secret scanning in CI/CD pipelines to prevent accidental secret commits. Tools like GitLeaks and TruffleHog can automatically detect potential secret exposures before they reach production.

The combination of HashiCorp Vault and Kubernetes creates a robust foundation for enterprise secret management. By implementing proper authentication patterns, dynamic secret rotation, and comprehensive monitoring, organizations can achieve security standards that exceed traditional secret management approaches. This integration becomes particularly valuable for PropTech companies handling sensitive customer data, where security breaches can result in significant financial and reputational damage.

Ready to implement enterprise-grade secret management in your Kubernetes environment? Start with a proof of concept using the patterns outlined in this guide, focusing on your most critical applications first. The investment in proper secret management pays dividends through improved security posture, simplified compliance, and enhanced developer productivity.

🚀 Ready to Build?

Let's discuss how we can help with your project.

Start Your Project →