Vai al contenuto principale
Versione: 3.0.0-alpha (Diátaxis)

Come gestire utenti e database

Questa guida spiega come creare e gestire utenti, database, ruoli ed estensioni PostgreSQL su Hikube in modo dichiarativo tramite i manifesti Kubernetes.

Prerequisiti

  • kubectl configurato con il vostro kubeconfig Hikube
  • Un'istanza PostgreSQL distribuita su Hikube (o un manifesto pronto per il deployment)
  • (Opzionale) psql installato localmente per testare la connessione

Passaggi

1. Aggiungere utenti

Gli utenti sono dichiarati nella sezione users del manifesto. Ogni utente è identificato da un nome e possiede una password.

postgresql-users.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: my-database
spec:
replicas: 2
resourcesPreset: medium
size: 10Gi

users:
admin:
password: SecureAdminPassword
appuser:
password: AppUserPassword456
readonly:
password: ReadOnlyPassword789
replicator:
password: ReplicatorPassword
replication: true

Parametri utente:

ParametroTipoDescrizione
users[name].passwordstringPassword dell'utente
users[name].replicationboolConcede il privilegio di replica all'utente
nota

Il privilegio replication è necessario per gli utenti utilizzati da strumenti di Change Data Capture (CDC) come Debezium, o per la replica logica PostgreSQL. Attivatelo solo se ne avete bisogno.

2. Creare database con ruoli

I database sono dichiarati nella sezione databases. Ogni database può definire ruoli admin e readonly, che vengono assegnati agli utenti dichiarati in users.

postgresql-databases.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: my-database
spec:
replicas: 2
resourcesPreset: medium
size: 10Gi

users:
admin:
password: SecureAdminPassword
appuser:
password: AppUserPassword456
readonly:
password: ReadOnlyPassword789

databases:
myapp:
roles:
admin:
- admin
- appuser
readonly:
- readonly
analytics:
roles:
admin:
- admin
readonly:
- appuser
- readonly

Ruoli disponibili:

RuoloDescrizione
adminAccesso completo in lettura/scrittura sul database
readonlyAccesso in sola lettura sul database
suggerimento

Seguite il principio del minimo privilegio: concedete il ruolo admin solo agli utenti che ne hanno realmente bisogno. Usate readonly per i servizi di reporting o monitoring.

3. Attivare estensioni

Le estensioni PostgreSQL vengono attivate per database tramite il campo extensions:

postgresql-extensions.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: my-database
spec:
replicas: 2
resourcesPreset: medium
size: 10Gi

users:
admin:
password: SecureAdminPassword

databases:
myapp:
roles:
admin:
- admin
extensions:
- hstore
- uuid-ossp
- pgcrypto

Estensioni comuni:

EstensioneDescrizione
hstoreTipo di dati chiave-valore
uuid-osspGenerazione di identificatori UUID
pgcryptoFunzioni crittografiche (hashing, cifratura)

4. Applicare le modifiche

Combinate tutti gli elementi in un unico manifesto e applicatelo:

postgresql-complete.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: my-database
spec:
replicas: 2
resourcesPreset: medium
size: 10Gi

users:
admin:
password: SecureAdminPassword
replication: true
appuser:
password: AppUserPassword456
readonly:
password: ReadOnlyPassword789

databases:
myapp:
roles:
admin:
- admin
- appuser
readonly:
- readonly
extensions:
- hstore
- uuid-ossp
analytics:
roles:
admin:
- admin
readonly:
- appuser
- readonly
extensions:
- pgcrypto
kubectl apply -f postgresql-complete.yaml

5. Recuperare le credenziali

Le password degli utenti sono memorizzate in un Secret Kubernetes. Recuperatele con:

kubectl get secret postgres-my-database-credentials -o json | jq -r '.data | to_entries[] | "\(.key): \(.value|@base64d)"'

Risultato atteso:

admin: SecureAdminPassword
appuser: AppUserPassword456
readonly: ReadOnlyPassword789
nota

Se non specificate una password per un utente, l'operatore ne genera una automaticamente. Usate il comando qui sopra per recuperarla.

6. Testare la connessione

Aprite un port-forward verso il servizio PostgreSQL:

kubectl port-forward svc/postgres-my-database-rw 5432:5432

Connettetevi con psql:

psql -h 127.0.0.1 -U appuser myapp

Verificate gli utenti e i ruoli:

-- Elencare gli utenti
\du

-- Elencare i database
\l

-- Verificare le estensioni installate
\dx

Risultato atteso per \du:

                                 List of roles
Role name | Attributes
--------------------+------------------------------------------------------------
admin | Replication
appuser |
myapp_admin | No inheritance, Cannot login
myapp_readonly | No inheritance, Cannot login
analytics_admin | No inheritance, Cannot login
analytics_readonly | No inheritance, Cannot login
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS
readonly |

Verifica

La configurazione ha avuto successo se:

  • Gli utenti appaiono in \du con gli attributi corretti
  • I database sono elencati in \l
  • Le estensioni sono attive (verificabili con \dx in ogni database)
  • Ogni utente può connettersi con la propria password
  • Gli utenti readonly non possono modificare i dati

Per approfondire