76 lines
2.5 KiB
Terraform
76 lines
2.5 KiB
Terraform
terraform {
|
|
required_version = ">= 1.11.0"
|
|
|
|
required_providers {
|
|
vault = {
|
|
source = "hashicorp/vault"
|
|
version = "~> 5.7.0"
|
|
}
|
|
}
|
|
|
|
backend "s3" {}
|
|
}
|
|
|
|
provider "vault" {
|
|
address = var.vault_addr
|
|
skip_child_token = true
|
|
token = var.vault_token
|
|
}
|
|
|
|
locals {
|
|
migration_role_name = "auth-db-migration-dev"
|
|
operator_role_name = "postgres-operator-dev"
|
|
|
|
creation_statements = [
|
|
<<-EOT
|
|
CREATE ROLE "{{name}}" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';
|
|
GRANT "${var.auth_db_role}" TO "{{name}}";
|
|
EOT
|
|
]
|
|
|
|
revocation_statements = [
|
|
<<-EOT
|
|
REASSIGN OWNED BY "{{name}}" TO "${var.auth_db_role}";
|
|
DROP OWNED BY "{{name}}";
|
|
REVOKE "${var.auth_db_role}" FROM "{{name}}";
|
|
DROP ROLE IF EXISTS "{{name}}";
|
|
EOT
|
|
]
|
|
}
|
|
|
|
resource "vault_database_secret_backend_connection" "platform_postgres" {
|
|
allowed_roles = [local.migration_role_name, local.operator_role_name]
|
|
backend = var.database_mount_path
|
|
name = var.database_config_name
|
|
plugin_name = "postgresql-database-plugin"
|
|
verify_connection = true
|
|
|
|
postgresql {
|
|
connection_url = "postgresql://{{username}}:{{password}}@${var.postgres_host}:${var.postgres_port}/${var.postgres_database}?sslmode=${var.postgres_sslmode}"
|
|
password_authentication = "scram-sha-256"
|
|
password_wo = var.postgres_admin_password
|
|
password_wo_version = var.postgres_admin_password_version
|
|
username = var.postgres_admin_username
|
|
}
|
|
}
|
|
|
|
resource "vault_database_secret_backend_role" "auth_db_migration" {
|
|
backend = var.database_mount_path
|
|
creation_statements = local.creation_statements
|
|
db_name = vault_database_secret_backend_connection.platform_postgres.name
|
|
default_ttl = var.auth_db_migration_default_ttl_seconds
|
|
max_ttl = var.auth_db_migration_max_ttl_seconds
|
|
name = local.migration_role_name
|
|
revocation_statements = local.revocation_statements
|
|
}
|
|
|
|
resource "vault_database_secret_backend_role" "postgres_operator" {
|
|
backend = var.database_mount_path
|
|
creation_statements = local.creation_statements
|
|
db_name = vault_database_secret_backend_connection.platform_postgres.name
|
|
default_ttl = var.postgres_operator_default_ttl_seconds
|
|
max_ttl = var.postgres_operator_max_ttl_seconds
|
|
name = local.operator_role_name
|
|
revocation_statements = local.revocation_statements
|
|
}
|