Přeskočit obsah

Terraform Provider pro MazeVault

MazeVault Terraform Provider umožňuje spravovat celou infrastrukturu MazeVault jako kód — projekty, tajné hodnoty, certifikáty, rotace, řízení přístupu a integrace s externími systémy.


Instalace

terraform {
  required_version = ">= 1.11"
  required_providers {
    mazevault = {
      source  = "MazeVault/mazevault"
      version = "~> 1.0"
    }
    random = {
      source = "hashicorp/random"
    }
  }
}

Konfigurace providera

provider "mazevault" {
  server_url = "https://vault.example.com"
  api_token  = var.mazevault_token   # nebo env: MAZEVAULT_API_TOKEN
}
Argument Env proměnná Popis
server_url MAZEVAULT_SERVER_URL Základní URL MazeVault serveru
api_token MAZEVAULT_API_TOKEN API token (doporučeno)
client_id MAZEVAULT_CLIENT_ID OAuth2 client ID servisního účtu
client_secret MAZEVAULT_CLIENT_SECRET OAuth2 client secret servisního účtu
timeout Timeout požadavků, např. 30s (výchozí)
skip_tls_verify Vypnutí TLS kontroly — pouze pro vývoj

Zacházení s přihlašovacími údaji

Nikdy nevkládejte přihlašovací údaje přímo do .tf souborů. Používejte proměnné prostředí nebo úložiště tajných hodnot v CI/CD. Nikdy necommitujte .tfvars soubory s tokeny nebo hesly.


Autentizace

API Token (doporučeno)

export MAZEVAULT_SERVER_URL="https://vault.example.com"
export MAZEVAULT_API_TOKEN="mv_pat_xxxxx"
terraform plan

Tokeny vytvoříte v Admin → API Tokeny nebo zdrojem mazevault_api_token.

Servisní účet (CI/CD pipeline)

provider "mazevault" {
  server_url    = var.server_url
  client_id     = var.client_id
  client_secret = var.client_secret
}

Příklad: nastavení externí CA

Použijte mazevault_ca_account.settings pro netajnou konfiguraci CA providera, kterou MazeVault potřebuje znovu použít při synchronizaci produktů, pollingu obnov a DCV kontrolách. API klíče, hesla a EAB HMAC klíče patří do dedikovaných citlivých atributů, ne do settings. provider_type nastavte na dokumentovanou hodnotu malými písmeny, například digicert, letsencrypt nebo acme; smíšená velikost písmen a okolní mezery jsou odmítnuty ještě před odesláním požadavku do MazeVaultu.

resource "mazevault_ca_account" "digicert" {
  organization_id = mazevault_organization.acme.id
  name            = "DigiCert Production"
  provider_type   = "digicert"
  api_key         = var.digicert_api_key
  base_url        = "https://www.digicert.com"

  settings = {
    organization_id       = var.digicert_organization_id
    server_platform_id    = "45"
    dcv_method            = "dns_txt"
    certificate_dcv_scope = "base_domain"
  }
}

Příklad: Správa tajných hodnot se synchronizací do Azure Key Vault

Vytvoří projekt, uloží databázové heslo a synchronizuje ho do Azure Key Vault s automatickou 30denní rotací.

resource "mazevault_organization" "acme" {
  name = "Acme Corp"
}

resource "mazevault_project" "backend" {
  organization_id = mazevault_organization.acme.id
  name            = "Backend Services"
  type            = "secret"
}

resource "mazevault_integration" "azure_kv" {
  project_id  = mazevault_project.backend.id
  name        = "Produkční Key Vault"
  type        = "azure_key_vault"
  environment = "production"
  config = {
    vault_url            = var.keyvault_url
    use_managed_identity = "true"
  }
}

ephemeral "random_password" "db" {
  length           = 40
  special          = true
  override_special = "_-+=@#"
}

resource "mazevault_secret" "db_password" {
  project_id  = mazevault_project.backend.id
  key         = "POSTGRES_PASSWORD"
  environment = "production"

  value_wo         = ephemeral.random_password.db.result
  value_wo_version = 1
}

resource "mazevault_secret_link" "db_link" {
  secret_id      = mazevault_secret.db_password.id
  integration_id = mazevault_integration.azure_kv.id
  link_type      = "database"
  metadata = {
    db_user = "app_user"
    db_host = "db.prod.example.com"
    db_name = "appdb"
  }
}

resource "mazevault_rotation_config" "db" {
  secret_id             = mazevault_secret.db_password.id
  rotation_interval_days = 30
  enabled               = true
  notification_emails   = ["ops@example.com"]
}

# Doručení otočené hodnoty do Kubernetes secretu po každé rotaci.
resource "mazevault_secret_rotation_target" "k8s" {
  secret_id   = mazevault_secret.db_password.id
  target_type = "kubernetes_secret"
  priority    = 10
  enabled     = true
  config_json = jsonencode({
    namespace   = "production"
    secret_name = "app-db-credentials"
    secret_key  = "POSTGRES_PASSWORD"
    agent_id    = "uuid-vaseho-agenta"
  })
}

# Otočení hesla přímo na databázi.
resource "mazevault_secret_rotation_target" "postgres" {
  secret_id   = mazevault_secret.db_password.id
  target_type = "database_password"
  priority    = 20
  enabled     = true
  config_json = jsonencode({
    db_provider                = "postgres"
    host                       = "db.prod.example.com"
    port                       = 5432
    database                   = "appdb"
    username                   = "app_user"
    admin_credential_secret_id = "uuid-admin-secretu"
  })
}

Stavově bezpečné tajné hodnoty

Pro tajné hodnoty spravované Terraformem preferujte value_wo s Terraform 1.11+ ephemeral resources. Provider načte hodnotu z konfigurace během apply, odešle ji do MazeVaultu a neuloží ji do Terraform plánu ani stavu. Při odeslání nové write-only hodnoty navyšte value_wo_version.

ephemeral "random_password" "api" {
  length           = 48
  special          = true
  override_special = "_-+=@#"
}

resource "mazevault_secret" "api_password" {
  project_id       = mazevault_project.backend.id
  key              = "API_PASSWORD"
  environment      = "production"
  value_wo         = ephemeral.random_password.api.result
  value_wo_version = 1
}

Starší argument value zůstává podporovaný pro existující konfigurace, ale Terraform ukládá sensitive hodnoty do stavu. Pokud stav nesmí obsahovat plaintext, nečtěte tajné hodnoty zpět přes data source mazevault_secret.

Generování tajných hodnot na straně serveru

Místo zadání value přidejte blok generate { ... } a MazeVault vytvoří hodnotu za vás pomocí kryptograficky bezpečných znaků bezpečných pro DB/URL. Musí být nastaveno právě jedno z value, value_wo nebo generate. Vygenerovaný plaintext se nikdy nevrací do Terraformu (nikdy nevstoupí do stavu); v režimu Orchestrator je předán přímo externímu správci tajných hodnot.

resource "mazevault_secret" "api_key" {
  project_id  = mazevault_project.backend.id
  key         = "API_KEY"
  environment = "production"

  generate {
    length          = 48
    include_symbols = true
  }
}
Pole generate Výchozí Popis
length 40 Délka generované hodnoty
include_upper true Zahrnout velká písmena
include_lower true Zahrnout malá písmena
include_digits true Zahrnout číslice
include_symbols true Zahrnout symboly bezpečné pro DB/URL
excluded_chars Znaky, které se mají z výsledku vyloučit

Integrace Azure Key Vault a Entra

Kromě typovaných polí Azure DevOps azure_* přijímá mazevault_integration také obecnou mapu config (bez tajných hodnot) a mapu sensitive_config určenou pouze pro zápis (tajné hodnoty, které se ze serveru nikdy nečtou zpět) a interactive_auth_method. To umožňuje integrace s Azure Key Vault a Microsoft Entra.

resource "mazevault_integration" "kv" {
  project_id    = mazevault_project.backend.id
  name          = "prod-keyvault"
  type          = "azure_key_vault"
  provider_name = "azure_keyvault"
  environment   = "production"

  config = {
    vault_url   = "https://myvault.vault.azure.net/"
    auth_method = "client_secret"
    tenant_id   = var.tenant_id
    client_id   = var.client_id
  }

  sensitive_config = {
    client_secret = var.client_secret
  }
}

Rotace přihlašovacích údajů Entra ID

post_rotation_actions je jediný zdroj pravdy pro doručení po rotaci. Pokud nedefinujete žádné bloky akcí, nic se nedoručí. Zápis zpět do Key Vault a obnovení Spring Boot se vyjadřují jako akce zde — nikoli jako samostatná pole nejvyšší úrovně. Atributy kv_integration_ids, secret_name, spring_endpoints a webhook_urls jsou nyní jen pro čtení a odvozené (mirror) z těchto akcí.

resource "mazevault_entra_rotation_config" "app" {
  credential_id               = var.entra_credential_id
  rotation_days_before_expiry = 30

  post_rotation_actions {
    type = "azure_keyvault"
    config = {
      integration_id = mazevault_integration.kv.id
      secret_name    = "app-client-secret"
    }
  }

  post_rotation_actions {
    type   = "spring_actuator_refresh"
    config = { actuator_url = "https://app.example.com/actuator/refresh" }
  }
}

Příklad: Automatizace životního cyklu certifikátů

Vydá TLS certifikát prostřednictvím CA účtu a nastaví automatické obnovení. mazevault_certificate_template je Project Template kategorie certificates: vytvoří se na úrovni organizace (odvozené z project_id) a zobrazí se ve frontendovém pohledu Project Templates pro projekty správy certifikátů (type = "certificate").

resource "mazevault_project" "pki" {
  organization_id = mazevault_organization.acme.id
  name            = "PKI"
  type            = "certificate"
}

resource "mazevault_ca_account" "digicert" {
  organization_id = mazevault_organization.acme.id
  name            = "DigiCert Production"
  provider_type   = "digicert"
  api_key         = var.digicert_api_key
  base_url        = "https://www.digicert.com"
}

Šablony certifikátů jsou Project Templates kategorie certificates

mazevault_certificate_template vytvoří Project Template s kategorií certificates na úrovni organizace (odvozené z project_id), takže se zobrazí v pohledu Project Templates. MazeVault automaticky vytvoří podkladovou šablonu certifikátu, dostupnou jako computed certificate_template_id. validity_period (např. 8760h) se převede na celé dny; type je subtyp certifikátu (např. ssl_tls).

ACME CA účty (Let's Encrypt / ZeroSSL / vlastní)

ACME provideři používají email a directory_url (a při použití External Account Binding také eab_kid / eab_hmac_key) místo api_key. Každý neinterní provider musí zadat přihlašovací údaje — provider to ověří na straně klienta a při jejich chybějícím zadání vrátí jasnou chybu ještě před voláním serveru. directory_url je povinné pro vlastní acme provider a pro letsencrypt a zerossl se doplní automaticky. ACME politika výzvy (challenge) se nastavuje na šabloně certifikátu přes challenge_type.

resource "mazevault_ca_account" "letsencrypt" {
  organization_id = mazevault_organization.acme.id
  name            = "Let's Encrypt"
  provider_type   = "letsencrypt"
  email           = "pki@example.com"
}

resource "mazevault_ca_account" "zerossl" {
  organization_id = mazevault_organization.acme.id
  name            = "ZeroSSL"
  provider_type   = "zerossl"
  email           = "pki@example.com"
  eab_kid         = var.zerossl_eab_kid
  eab_hmac_key    = var.zerossl_eab_hmac_key
}

resource "mazevault_ca_account" "internal_acme" {
  organization_id = mazevault_organization.acme.id
  name            = "Internal ACME"
  provider_type   = "acme"
  email           = "pki@example.com"
  directory_url   = "https://ca.internal.example.com/acme/acme/directory"
}

resource "mazevault_certificate_template" "acme_web" {
  project_id      = mazevault_project.pki.id
  name            = "ACME Web TLS"
  type            = "tls_server"
  validity_period = "2160h"
  # auto (výchozí) | dns-01 | http-01 | tls-alpn-01
  challenge_type  = "dns-01"
}

U externích komerčních CA, které vyžadují doménovou validaci (například SSLMarket), se metoda validace nastavuje na šabloně přes dcv_method (email, dns nebo file). Prázdná hodnota použije výchozí nastavení providera/účtu. dcv_method je ignorováno interními a ACME issuery.

resource "mazevault_certificate_template" "sslmarket_dv" {
  project_id      = mazevault_project.pki.id
  name            = "SSLMarket DV"
  type            = "ssl_tls"
  validity_period = "8760h"
  # email | dns | file (prázdné = výchozí providera/účtu)
  dcv_method      = "dns"
}

Interní kořenovou CA organizace lze spravovat zdrojem mazevault_ca. Každá organizace má nejvýše jednu interní CA; její parametry jsou neměnné (změna je nahrazuje novou CA) a zrušení zdroje ji měkce smaže — smazání je odmítnuto, dokud existují aktivní certifikáty vydané touto CA.

resource "mazevault_ca" "org_root" {
  organization_id = mazevault_organization.acme.id
  name            = "ACME Internal CA"
  valid_years     = 10
  key_size        = 4096
}
resource "mazevault_renewal_policy" "default" {
  organization_id  = mazevault_organization.acme.id
  name             = "30denní předstih"
  lead_days        = 30
  auto_approve     = true
  notify_emails    = "ops@example.com"
}

resource "mazevault_certificate_template" "web_tls" {
  project_id      = mazevault_project.pki.id
  name            = "Web TLS 1Y"
  type            = "ssl_tls"
  validity_period = "8760h"
  key_usage       = ["digitalSignature", "keyEncipherment"]
}

resource "mazevault_certificate" "api_tls" {
  common_name                = "api.example.com"
  ttl                        = "8760h"
  key_size                   = 2048
  organization_ca_account_id = mazevault_ca_account.digicert.id
}

output "api_cert_pem" {
  value     = mazevault_certificate.api_tls.certificate_pem
  sensitive = false
}

output "api_key_pem" {
  value     = mazevault_certificate.api_tls.private_key_pem
  sensitive = true
}

Vydání interní CA organizace a nasazení do Key Vaultu: certifikát lze vydat interní CA organizace (mazevault_ca), přiřadit k projektu a při obnově doručit do Azure Key Vaultu přes položku post_rotation_actions. Kompletní argumenty, atributy a příklady najdete v dokumentaci resourceů provideru: mazevault_ca, mazevault_certificate a mazevault_certificate_rotation_config.


Příklad: RBAC a servisní účet

Vytvoří CI/CD servisní účet s oprávněním jen pro čtení k určitému projektu.

resource "mazevault_role" "ci_readonly" {
  name        = "ci-readonly"
  description = "Přístup jen pro čtení pro deployment pipeline"
  permissions = ["secrets:read", "certificates:read", "projects:read"]
}

resource "mazevault_service_identity" "github_actions" {
  display_name = "GitHub Actions CI"
  description  = "Servisní účet jen pro čtení pro produkční deploymenty"
  owner_email  = "platform@example.com"
}

resource "mazevault_api_token" "ci_token" {
  name   = "github-actions-prod"
  scopes = ["secrets:read", "certificates:read"]
}

output "ci_client_id" {
  value = mazevault_service_identity.github_actions.client_id
}

output "ci_client_secret" {
  value     = mazevault_service_identity.github_actions.client_secret
  sensitive = true
}

Příklad: Synchronizační pravidla a šablony rotace

Průběžně načítejte tajné hodnoty z Azure Key Vault do projektu MazeVault a aplikujte sdílenou šablonu politiky rotace.

# Opakovaně použitelná šablona politiky rotace
resource "mazevault_rotation_template" "standard_90d" {
  name                   = "standardní-90-dní"
  description            = "Standardní 90denní rotace se 14denním předstihem pro certifikáty"
  rotation_interval_days = 90
  lead_time_days         = 14
  grace_period_days      = 3
  max_retry_attempts     = 3
  timeout_minutes        = 30
  is_default             = true
}

# Stahování tajných hodnot z Azure KV do produkčního prostředí
resource "mazevault_sync_rule" "azure_kv_pull" {
  name               = "azure-kv-produkce-pull"
  project_id         = mazevault_project.backend.id
  integration_id     = mazevault_integration.azure_kv.id
  target_environment = "production"
  source_path        = "secrets/app/"
  sync_direction     = "pull"
  sync_mode          = "incremental"
  conflict_strategy  = "external_wins"
}

# Akce po rotaci cílená na konkrétní gateway
resource "mazevault_rotation_workflow" "db_with_gateway" {
  secret_id             = mazevault_secret.db_password.id
  environment           = "production"
  rotation_interval_days = 90

  post_rotation_actions {
    type       = "azure_keyvault"
    order      = 1
    on_failure = "rollback"
    gateway_id = "gateway-eu-west-01"
    config = {
      vault_url   = "https://myvault.vault.azure.net"
      secret_name = "db-password"
    }
  }

  post_rotation_actions {
    type              = "spring_actuator_refresh"
    order             = 2
    on_failure        = "continue"
    target_environment = "production"
    config = {
      url = "https://api.example.com/actuator/refresh"
    }
  }
}

Příklad: Úrovně prostředí

Definujte úrovně prostředí pro organizaci. name a slug jsou neměnné — změna kteréhokoli z nich vynutí znovuvytvoření prostředí. V místě lze měnit pouze is_production a incident_auto_escalation.

resource "mazevault_environment" "production" {
  organization_id          = mazevault_organization.acme.id
  name                     = "production"
  slug                     = "prod"
  is_production            = true
  incident_auto_escalation = true
}

Příklad: Správa externích API tokenů

Mnoho externích systémů (Jira, Signi, …) vydává dlouhodobé API tokeny, které lze obnovit pouze ručně v jejich vlastním GUI. mazevault_token umožňuje takový token zaevidovat s povinným datem expirace, takže MazeVault vyvolá incident dříve, než token vyprší. Hodnota se ukládá šifrovaně (nebo je v Orchestrator Mode offloadována do vašeho správce tajemství). Tato funkce vyžaduje licenci PoC nebo Enterprise.

resource "mazevault_token" "jira" {
  name             = "jira-automation-token"
  token_provider   = "jira"                 # volný textový štítek; jira/signi mají v UI vlastní ikony
  description      = "CI automatizační token pro Jira Cloud"
  value_wo         = var.jira_token          # Terraform 1.11+; není v plánu ani stavu
  value_wo_version = 1                       # zvýšení hodnoty nahradí token
  expires_at       = "2027-01-01T00:00:00Z" # povinné
  lead_time_days   = 30                      # upozornit 30 dní před expirací
}

# Vypíše tokeny, které vstoupily do okna upozornění.
data "mazevault_tokens" "all" {}

output "tokens_needing_renewal" {
  value = [for t in data.mazevault_tokens.all.tokens : t.name if t.days_until_expiry <= t.lead_time_days]
}

Po obnově tokenu v externím systému aktualizujte jeho hodnotu přes renew flow v MazeVault UI/API (který zároveň znovu nasadí případné agentní cíle), nikoli v Terraformu. Změna value v Terraformu vynutí znovuvytvoření zdroje.

Zastaralý argument value zůstává dostupný pro existující konfigurace, Terraform jej ale ukládá do stavu. Nenahrazujte jej na existujícím resource automaticky za value_wo: změna vytvoří nový token, změní jeho ID a smaže jeho MazeVault deployment cíle. value_wo používejte pro nové tokeny. Při záměrné migraci nejprve inventarizujte všechny cíle a znovu je vytvořte v servisním okně. Úprava HCL neodstraní plaintext z historických verzí vzdáleného stavu; externí token vyrotujte a postupujte podle retenčního a purge procesu použitého state backendu.


Přehled zdrojů

Kompletní dokumentace atributů každého zdroje je dostupná na Terraform Registry.

Zdroj Popis
mazevault_organization Nejvyšší úroveň organizace
mazevault_project Projekt (hranice RBAC, sdružuje tajné hodnoty/certifikáty)
mazevault_project_settings Provozní nastavení projektu (retence, synchronizace, notifikace)
mazevault_secret Šifrovaná tajná hodnota s volitelnou rotací
mazevault_secret_link Propojí tajnou hodnotu s externí integrací pro zápis
mazevault_shared_secret Jednorázový sdílecí odkaz na tajnou hodnotu
mazevault_rotation_config Kompletní konfigurace rotační pipeline pro tajnou hodnotu (v2: rotation_interval_days nahrazuje ttl_hours/rotation_strategy)
mazevault_rotation_workflow Jednoduchý plán rotace pro tajnou hodnotu
mazevault_rotation_template Opakovaně použitelná šablona politiky rotace
mazevault_secret_rotation_target Strukturovaný deployment cíl v rotační pipeline tajné hodnoty (K8s, DB, Agent, DevOps, cloudový vault)
mazevault_certificate_rotation_config Konfigurace automatické rotace a obnovy pro konkrétní certifikát
mazevault_entra_rotation_config Plánování rotace přihlašovacích údajů Entra ID (dny před vypršením, staged rotace)
mazevault_sync_rule Synchronizační pravidlo mezi MazeVault a externím poskytovatelem tajných hodnot (KV, Azure KV, GitHub, …)
mazevault_certificate Certifikát vydaný nebo sledovaný v MazeVault
mazevault_certificate_template Opakovaně použitelná šablona pro vydávání certifikátů
mazevault_ca Interní kořenová CA organizace (jedna na organizaci)
mazevault_ca_account Integrace nebo reference CA účtu pro externí providery, self-hosted providery a interní CA účet
mazevault_renewal_policy Zásada automatického obnovení certifikátů
mazevault_integration Externí úložiště tajných hodnot / deployment cíl (Azure KV, AWS SM, K8s, …)
mazevault_integration_group Směrování integrací pro více prostředí
mazevault_consistency_group Monitoring shody tajných hodnot napříč prostředími
mazevault_role Vlastní RBAC role
mazevault_group_mapping Mapování skupiny externího IdP na roli MazeVault
mazevault_user Uživatelský účet
mazevault_user_role Přiřazení role uživateli v projektu
mazevault_service_identity Strojová identita (OAuth2 klient)
mazevault_api_token Rozsahový API token
mazevault_identity_provider SAML / OIDC / LDAP SSO provider
mazevault_environment Definice prostředí
mazevault_approval_policy Schvalovací workflow pro citlivé operace
mazevault_keytab Kerberos keytab pro autentizaci agenta
mazevault_token Externí API token (Jira, Signi, …) s povinným sledováním expirace
mazevault_deployment Bootstrap balíček pro deployment agenta
mazevault_config_template Konfigurační šablona pro injekci tajných hodnot

Přehled datových zdrojů

Datový zdroj Popis
mazevault_organization Vyhledání organizace podle ID
mazevault_project Vyhledání projektu podle ID
mazevault_secret Čtení tajné hodnoty (citlivé)
mazevault_certificate Čtení certifikátu podle ID
mazevault_project_certificates Seznam certifikátů v projektu
mazevault_project_cas Seznam CA účtů v projektu
mazevault_project_certificate_templates Seznam šablon certifikátů v projektu
mazevault_project_csrs Seznam čekajících CSR v projektu
mazevault_environments Seznam prostředí v organizaci
mazevault_ca_accounts Seznam CA účtů v organizaci
mazevault_users Seznam všech uživatelů
mazevault_roles Seznam všech RBAC rolí
mazevault_integrations Seznam integrací v projektu
mazevault_audit_logs Čtení záznamů audit logu
mazevault_rotation_executions Seznam záznamů o provedení rotace
mazevault_renewal_queue Seznam certifikátů čekajících na obnovení
mazevault_consistency_status Výsledek kontroly shody napříč prostředími
mazevault_rotation_resources Seznam všech zdrojů spravovaných rotací s jejich stavem
mazevault_rotation_resource_history Historie provedení rotace pro konkrétní zdroj
mazevault_project_rotation_configs Seznam všech konfigurace rotace v projektu
mazevault_tokens Seznam spravovaných externích API tokenů s jejich stavem expirace

Import existujících zdrojů

Přiveďte existující zdroje MazeVault pod správu Terraformu pomocí terraform import. UUID zdrojů jsou viditelné v URL v UI nebo přes GET /api/v1/....

terraform import mazevault_project.backend <project-uuid>
terraform import mazevault_secret.db_password <secret-uuid>
terraform import mazevault_certificate.tls <certificate-uuid>
terraform import mazevault_integration.azure_kv <integration-uuid>

Známá omezení

  • mazevault_role — Role nelze přes MazeVault API smazat. terraform destroy odstraní zdroj pouze z Terraform stavu; role v MazeVault zůstane.
  • mazevault_ca — Spravuje jedinou interní kořenovou CA organizace (organization_id). Všechny parametry jsou neměnné; změna kteréhokoli z nich nahradí CA. Zrušení zdroje interní CA měkce smaže, ale smazání je odmítnuto (HTTP 409), dokud existují aktivní (neodvolané, nevypršelé) certifikáty vydané touto CA. Atributy ocsp_url / crl_url jsou pouze ke čtení a odrážejí URL publikované pro vydané certifikáty.
  • mazevault_integration — Argument environment je povinný a při změně vynucuje znovuvytvoření zdroje. Backend nepodporuje změnu prostředí přes update; při změně prostředí vždy resource znovu vytvořte.
  • mazevault_secret_rotation_target — Argument config_json musí být platný JSON objekt. Použijte jsonencode() v Terraformu. Neplatný JSON způsobí diagnostickou chybu v době aplikace (apply). Operace čtení používá skenování seznamu (neexistuje přímý GET-by-ID endpoint). Smazání cíle, který byl externě odstraněn, je idempotentní a proběhne bez chyby.
  • mazevault_rotation_config (v2.0 BREAKING) — Argumenty environment, rotation_strategy, workflow_steps_json, scope a grace_period_minutes byly odstraněny. Nahraďte ttl_hours za rotation_interval_days. Při upgradu z v1.x spusťte terraform state rm a proveďte re-import.
  • mazevault_certificate_rotation_config — Neexistuje endpoint pro hard-delete. Destroy nastaví enabled = false a odstraní ze stavu.
  • mazevault_entra_rotation_config — Neexistuje endpoint pro hard-delete. Destroy nastaví rotation_enabled = false a odstraní ze stavu.
  • mazevault_token — Vyžaduje licenci PoC nebo Enterprise (funkce token_management); jinak API vrací HTTP 403. Pro štítek providera použijte token_provider. Nové resources mají používat value_wo spolu s value_wo_version; legacy value je citlivé, ale zůstává v Terraform stavu. Import spravuje pouze metadata. Obnova hodnoty na místě probíhá přes MazeVault UI/API. project_id je neměnné a každý Terraform replacement zároveň smaže MazeVault deployment cíle tokenu.

Doporučené postupy

  • Vzdálený stav — používejte Terraform Cloud, Azure Blob Storage nebo S3 se zamykáním stavu.
  • Citlivé výstupy — vždy nastavte sensitive = true u výstupů, které obsahují tajné hodnoty nebo privátní klíče.
  • Přihlašovací údaje přes proměnné prostředí — používejte MAZEVAULT_API_TOKEN nebo TF_VAR_ prefixované proměnné; nikdy necommitujte tokeny v .tfvars.
  • Fixujte verzi providera~> 1.0 povolí patch aktualizace a zablokuje neočekávané změny hlavní verze.
  • Skupiny konzistence — přidejte mazevault_consistency_group po provisioningu k detekci drift napříč prostředími dříve, než způsobí incident.
  • Plánování rotace — používejte rotation_interval_days a schedule (cron) pro nastavení kadence rotace (v2: ttl_hours/rotation_strategy byly odstraněny). Deployment akce po rotaci konfigurujte přes mazevault_rotation_workflow nebo podrobnějším zdrojem mazevault_secret_rotation_target (podporuje K8s, otáčení hesla databáze, synchronizaci agenta, DevOps proměnné a cloudové vaulty). Pro certifikáty použijte mazevault_certificate_rotation_config; pro přihlašovací údaje Entra ID použijte mazevault_entra_rotation_config.
  • Oddělený stav na prostředí — používejte workspaces nebo oddělené state backendy na prostředí, abyste zabránili nechtěným zápisům napříč prostředími.