1. Yes. That's correct.
2. Right, the db_name links it to a database configuration.
3. I don't understand what you're asking. You'll make a GET request against /database/creds/[role]
4. I haven't used rotating root creds yet, sorry.
Here's an example of what we do for all the new databases we create. Hopefully it helps.
1 We have our secret backend mounted up on 'cloud/pc/postgres'
2 We take the application_name and use that as our base name.
3 We create an admin role and a staff role based on the application_name.
4. We create the database config based on the application_name as well. We do this all via terraform now but you'll get the idea.
resource "vault_database_secret_backend_connection" "postgres" {
backend = "${var.vault_backend}"
name = "${var.application_name}"
verify_connection = false
allowed_roles = ["${var.application_name}-admin", "${var.application_name}-staff"]
postgresql {
connection_url = "postgres://super_user:${var.password}@${var.database_host}:5432/${var.application_name}?sslmode=disable"
}
}
resource "vault_database_secret_backend_role" "admin" {
backend = "${var.vault_backend}"
name = "${var.application_name}-admin"
db_name = "${vault_database_secret_backend_connection.postgres.name}"
creation_statements = ["CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' inherit in role \"${var.application_name}_admin\" VALID UNTIL '{{expiration}}';"]
default_ttl = 7200
max_ttl = 2592000
}
resource "vault_database_secret_backend_role" "staff" {
backend = "${var.vault_backend}"
name = "${var.application_name}-staff"
db_name = "${vault_database_secret_backend_connection.postgres.name}"
creation_statements = ["CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';", "GRANT USAGE ON SCHEMA public TO \"{{name}}\";", "GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO \"{{name}}\";", "GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO \"{{name}}\";"]
default_ttl = 7200
max_ttl = 2592000
}