fix: add Vault-managed DB credentials for Matrix Synapse
- Create dedicated 'matrix' PostgreSQL user (was using 'postgres' superuser) - Add Vault DB static role pg-matrix with 24h rotation - Add ExternalSecret matrix-db-creds syncing password from Vault - Add inject-db-password init container that patches homeserver.yaml with current Vault password on every pod start - Update dependency annotation to pg-cluster-rw.dbaas - Also updated Vault DB config to use pg-cluster-rw (was legacy postgresql.dbaas)
This commit is contained in:
parent
e064778c2c
commit
772f59d589
1 changed files with 60 additions and 0 deletions
|
|
@ -15,6 +15,41 @@ resource "kubernetes_namespace" "matrix" {
|
|||
}
|
||||
}
|
||||
|
||||
# DB credentials from Vault database engine (rotated every 24h)
|
||||
resource "kubernetes_manifest" "db_external_secret" {
|
||||
manifest = {
|
||||
apiVersion = "external-secrets.io/v1beta1"
|
||||
kind = "ExternalSecret"
|
||||
metadata = {
|
||||
name = "matrix-db-creds"
|
||||
namespace = "matrix"
|
||||
}
|
||||
spec = {
|
||||
refreshInterval = "15m"
|
||||
secretStoreRef = {
|
||||
name = "vault-database"
|
||||
kind = "ClusterSecretStore"
|
||||
}
|
||||
target = {
|
||||
name = "matrix-db-creds"
|
||||
template = {
|
||||
data = {
|
||||
DB_PASSWORD = "{{ .password }}"
|
||||
}
|
||||
}
|
||||
}
|
||||
data = [{
|
||||
secretKey = "password"
|
||||
remoteRef = {
|
||||
key = "static-creds/pg-matrix"
|
||||
property = "password"
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
depends_on = [kubernetes_namespace.matrix]
|
||||
}
|
||||
|
||||
module "tls_secret" {
|
||||
source = "../../modules/kubernetes/setup_tls_secret"
|
||||
namespace = kubernetes_namespace.matrix.metadata[0].name
|
||||
|
|
@ -89,6 +124,31 @@ resource "kubernetes_deployment" "matrix" {
|
|||
mount_path = "/extra-packages"
|
||||
}
|
||||
}
|
||||
init_container {
|
||||
name = "inject-db-password"
|
||||
image = "busybox:1.37"
|
||||
command = ["/bin/sh", "-c", <<-EOF
|
||||
# Update database config in homeserver.yaml with current Vault-managed password
|
||||
sed -i "s|host: .*dbaas.*|host: pg-cluster-rw.dbaas.svc.cluster.local|" /data/homeserver.yaml
|
||||
sed -i "s|user: .*|user: matrix|" /data/homeserver.yaml
|
||||
sed -i "s|password: .*|password: $DB_PASSWORD|" /data/homeserver.yaml
|
||||
echo "DB password injected"
|
||||
EOF
|
||||
]
|
||||
env {
|
||||
name = "DB_PASSWORD"
|
||||
value_from {
|
||||
secret_key_ref {
|
||||
name = "matrix-db-creds"
|
||||
key = "DB_PASSWORD"
|
||||
}
|
||||
}
|
||||
}
|
||||
volume_mount {
|
||||
name = "data"
|
||||
mount_path = "/data"
|
||||
}
|
||||
}
|
||||
container {
|
||||
image = "matrixdotorg/synapse:latest"
|
||||
name = "matrix"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue