Manual init and unseal — loop script (Approach 1)
Test cases(26 of 50)
Complete the OpenBao prerequisites before running these tests. Go to prerequisites
Seal migration — Shamir to Transit auto-unseal
Seal migration — Shamir to AWS KMS auto-unseal
Requires AWS KMS, IAM permissions, and credentials. Independent of transit auto-unseal (UNSEAL-002).
Enable and Use KV v2 Secrets Engine
KV v2 Metadata and Custom Metadata
KV Secret Rotation Pattern with CAS
Configure PKI Engine as Internal CA
Auto-Rotate TLS Certificates with cert-manager
Cross-Sign External CA with OpenBao PKI
Dynamic PostgreSQL Credentials
Dynamic MySQL/MariaDB Credentials
Add a lab MariaDB instance to namespace db-tests (created during TC-OPENBAO-DB-001), configure a second database connection on the same secrets engine, and verify dynamic MySQL credentials.
Prerequisites checklist
Confirm these before running steps:
- TC-OPENBAO-OCP-001Enable TLS end-to-end on OpenBao (OpenShift)
- TC-OPENBAO-DB-001Dynamic PostgreSQL Credentials
- Cluster can pull
mariadb:11(or adjust image in the Commands / YAML tab)
1Deploy lab MariaDB in namespace db-tests (full manifest in the Commands / YAML tab):
→ This will use an existing Namespace db-tests, and create a new Secret for credentials, ConfigMap for initial configuration, a Service and a Deployment.
2Wait for the deployment to be available
oc wait --for=condition=Available deployment/mysql -n db-tests --timeout=180s→ Deployment Available
3Configure the MySQL connection (second config on the same database/ mount)
bao write database/config/mysql plugin_name=mysql-database-plugin allowed_roles=mysql-readonly,mysql-readwrite connection_url='{{username}}:{{password}}@tcp(mysql.db-tests.svc.cluster.local:3306)/mydb' username=bao_admin password=adminP@ss→ Success! Data written to: database/config/mysql
4Create a readonly role with MySQL grant statements
bao write database/roles/mysql-readonly db_name=mysql creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'; GRANT SELECT ON mydb.* TO '{{name}}'@'%';" revocation_statements="REVOKE ALL PRIVILEGES, GRANT OPTION FROM '{{name}}'@'%'; DROP USER IF EXISTS '{{name}}'@'%';" default_ttl=1h max_ttl=24h→ Success! Data written to: database/roles/mysql-readonly
5Create a readwrite role
bao write database/roles/mysql-readwrite db_name=mysql creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO '{{name}}'@'%';" default_ttl=4h max_ttl=24h→ Success! Data written to: database/roles/mysql-readwrite
6Request dynamic credentials
bao read database/creds/mysql-readonly→ Returns unique
username and password7Test the dynamic credentials via oc exec into the MariaDB pod (see the Commands / YAML tab):
→
SELECT current_user shows the dynamic role; SELECT * FROM demo succeeds→
INSERT INTO demo ... fails with permission denied for readonly creds8Rotate the root credentials stored in OpenBao
bao write -f database/rotate-root/mysql→ Root password rotated in MariaDB and updated in OpenBao config
9Cleanup lab namespace
oc delete namespace db-tests --wait=true→ Namespace
db-tests removed (PostgreSQL from DB-001 and MariaDB from this testcase)Kubernetes Auth Method
OIDC Authentication with Keycloak/DEX
Raft Cluster Operations
Raft Snapshot and Restore
Full OpenBao Backup Strategy
Disaster Recovery Restore
TLS Certificates for OpenShift Routes via PKI
Dynamic PostgreSQL Credentials for Applications
Multi-Tenant Secret Isolation
Encryption as a Service - Transit Encryption for Application Data
External Secrets Operator with OpenBao
CSI Secrets Store Driver with OpenBao
OpenBao Agent Sidecar Injector
Sealed Secrets Migration to OpenBao