Poznámky k verzím¶
Historie verzí platformy MazeVault
Verze dokumentu: 1.0.61 Poslední aktualizace: 2026-10-28
Verze 1.0.61¶
Datum vydání: Nevydáno
Změny distribuce (vyžadují akci)¶
- Zařízení HSM typu PKCS#11 vyžadují
HSM_PKCS11_MODULES(nastavte před aktualizací) — Server nově načítá jen knihovny PKCS#11, které provozovatel uvede v nové proměnnéHSM_PKCS11_MODULES(čárkou oddělené absolutní cesty tak, jak je vidí kontejner backendu). Ve výchozím stavu je prázdná, což odmítne každé zařízení HSM typu PKCS#11: po aktualizaci test spojení, kontrola stavu i směrování klíčů hlásí takové zařízení jako nedostupné, dokud není jeho modul uveden, a log při startu vypíše dotčená zařízení. Zákazníci, kteří zařízení PKCS#11 používají, musí proměnnou nastavit (.env, Compose nebo Helmbackend.config) před aktualizací. - Politika verzí agenta nahrazuje proměnné prostředí s verzí agenta — Jakou verzi agenta který agent dostane, nově určuje politika verzí (Nasazení → Agenti → Politika verzí).
AGENT_VERSION,AGENT_MAX_ALLOWED_VERSIONaAGENT_ROLLOUT_PERCENTAGEjsou zastaralé: jednou při prvním startu primary naplní prázdnou politiku (pozdější změny jen zapíší varování o zastarání). Přišpendlené hodnoty se stanou cílovými verzemi a stropem, takže agentům s vyšší verzí bude nabídnut downgrade na ně — pokud to nechcete, smažte cíle/strop v politice nebo nastavte minimální verzi pro rollback. Gatewaye se řídí politikou z primary. Nová spodní hranice pro rollback agentamin_rollback_versionomezuje, jak daleko lze agenta vrátit; zrušit ji lze příkazemreset-min-rollback-version. - Image, Helm chart a Compose kit se přesouvají do MazeVault Harboru — Od tohoto releasu se MazeVault distribuuje jen z
registry.mazevault.com: imageregistry.mazevault.com/mazevault/mazevault-{backend,frontend,edge,docs,ocsp,init-certs}:vX.Y.Z, Helm chartoci://registry.mazevault.com/mazevault/mazevault-customer(verzeX.Y.Z) a Compose kit (instalátor, upgrade/rollback skripty,docker-compose.yml,.env.example,SHA256SUMS) jako OCI artefaktregistry.mazevault.com/mazevault/compose-kit:vX.Y.Z, který se stahuje přesoras pull(skripty spouštějte přesbash, ORAS nezachovává příznak spustitelnosti). Každý zákazník dostane robot účet jen pro čtení; GitHub token ani stahování zraw.githubusercontent.comuž nejsou potřeba.v1.0.60a starší zůstávají na GHCR (ghcr.io/mazevault); stávající instalace si ponechajíIMAGE_REGISTRY, dokud ho výslovně nezměníte (install-mazevault.sh --registrynebo hodnotyimage.repositoryv chartu). - Online instalátor používá
docker-compose.ymlz kitu —install-mazevault.shuž nezapisuje vlastní vloženou kopii compose souboru; nainstalujedocker-compose.yml, který leží vedle něj v Compose kitu (stejně jako už to dělalinstall-mazevault-offline.sh), a když chybí, skončí chybou, proto ho spouštějte z rozbaleného kitu. Online instalace znovu spuštěné s tímto releasem tak převezmou nastavení z kitu, např.MAZEVAULT_ENV_CANONICAL_ENFORCE(výchozífalse);MAZEVAULT_CUSTOMER_NAME,MAZEVAULT_CUSTOMER_EMAILaMAZEVAULT_COMPANY_IDmusí být v.envneprázdné (instalátor je generoval vždy). Compose soubor z kitu přebírá health check backendu z kopie v instalátoru a frontend startuje, až je backend zdravý. Nové přepínače pro automatizaci:MAZEVAULT_NO_SYSTEMD=1přeskočí systemd službu i všechna volánísystemctlaMAZEVAULT_COMPOSE_PROJECTpřepíše název projektu Compose (výchozímazevault). Nově vygenerovaná systemd jednotka předává název projektu (-p) příkazůmupidown; jednotka se generuje jen tehdy, když neexistuje, takže stávající/etc/systemd/system/mazevault.servicesi ponechá původní příkaz (pro přegenerování ji smažte a instalátor spusťte znovu). - Vygenerované stacky pro gateway stahují backend z
MAZEVAULT_IMAGE_REGISTRY(výchozí MazeVault Harbor) ve verzi primary a při instalaci vyžadujíMAZEVAULT_GATEWAY_ENVIRONMENT. - Customer Helm chart — prostředky External Secrets používají
external-secrets.io/v1(vyžaduje External Secrets Operator 0.16 nebo novější); backend za ingressem běží přes HTTP (MAZEVAULT_TLS_ENABLED=false); přístupový klíč Redisu je vREDIS_URLURL-kódovaný. - API pro nasazení agentů —
os_type: darwinaagent_mode: gateway|sidecarse odmítají s HTTP 400; podporovaní agenti jsou Linux a Windows. - Helm:
bffSharedSecretje povinný a ingress musí směrovat/api,/swaggera/healthna backend — Nové webové rozhraní potřebuje sdílené tajemství s backendem. Vytvořte ho v Key Vaultu (openssl rand -base64 48 | tr -d '\n/+=') a předhelm upgradezadejte jeho název doglobal.keyVault.secretKeys.bffSharedSecret; dokud jefrontend.enabledpravda, chart se bez něj nevykreslí. Frontend už neproxuje/api: ingress z chartu posílá/api,/swaggera/healthna backend a/na frontend (port kontejneru 3000, port Service zůstává 80); vlastní ingress musí dělat totéž. Pokud pody ingress controlleru nejsou v privátním rozsahu, nastavtebackend.config.TRUSTED_PROXIESna jejich CIDR. - Importovaný certifikát potřebuje svůj řetězec — Server webového rozhraní ověřuje backend přes
/certs/ca-bundle.crt.import-cert.sharenew-certs.shnově tento soubor skládají jako list plus řetězec CA a varují, když řetězec nebyl zadán (svazek je pak jen list a webové rozhraní backend neověří). Importujte znovu s řetězcem:./import-cert.sh cert.pem key.pem ca-chain.pem. Při startu kitu se existujícíca-bundle.crtzachová a chybějící se vytvoří zeserver.crt, i sMAZEVAULT_TLS_SKIP_INIT=truea ručně vloženým certifikátem. - Docker Compose: převezměte nový kit —
upgrade-mazevault.shpo zálohování nainstalujedocker-compose.ymlz kitu. Spusťte upgrade skript dodaný v novém kitu (oras pull registry.mazevault.com/mazevault/compose-kit:vX.Y.Z -o mazevault-kit, potésudo bash mazevault-kit/upgrade-mazevault.sh --version vX.Y.Z), u offline aktualizace předejte nový balík přes--offline(nainstaluje se i jehodocker-compose.yml); ne kopii v instalačním adresáři. Se staršímdocker-compose.yml(bez službyedge) se skript zastaví dřív, než cokoli změní, a vypíše správný příkaz. Ten přidává kontejneredge(viz Nové funkce) a znovu vytvoří síť Composefrontends pevnou podsítíMAZEVAULT_SUBNET(výchozí172.31.250.0/24), takže počítejte s krátkým výpadkem. Pokuddocker compose upzměněnou síť odmítne, spusťtedocker compose down(bez-v) a potédocker compose up -d. Pokud se aktualizace zastaví kvůli překryvu podsítě s jinou sítí Dockeru nebo trasou hostitele (původní stack dál běží: „The stack was not touched.“), nejprve nastavte v.envvolnouMAZEVAULT_SUBNET. Neověřitelná kontrola jen varuje „NOT checked“ a pokračuje. Skript se také zastaví před přepnutím, kdyžserver.crtinstalace neobsahujeNUXT_CORE_API_SERVERNAME(výchozíMAZEVAULT_DOMAIN), protože webové rozhraní by backend neověřilo; zpráva uvádí, jak to opravit. - Výchozí
TRUSTED_PROXIESv Docker Compose se zužuje na podsíť kitu — Externí load balancer před edge v jiném privátním rozsahu musí nastavitTRUSTED_PROXIESv.env; jinak se jehoX-Forwarded-Forignoruje a IP klienta v auditním logu a v rate limitech bude IP proxy. Výchozí hodnoty backendu a Helmu se nemění (loopback a privátní rozsahy). - Proměnné webového rozhraní — Kontejner frontendu čte
NUXT_CORE_API_URL(URL backendu),NUXT_BFF_SECRET(zBFF_SHARED_SECRET), volitelnouNUXT_CORE_API_SERVERNAME(název v certifikátu backendu, pokud se liší od hostitele v URL) aNODE_EXTRA_CA_CERTS(balík CA, kterým se backend ověřuje); viz Proměnné prostředí. VlastníFRONTEND_PORTsFRONTEND_URLbez tohoto portu vyvolá varování s přesným řádkemNUXT_PUBLIC_ORIGIN=<base>:<port>, který přidejte do.env(nenastavuje se automaticky: za proxy na 443 port správně chybí); oba instalátory při nové instalaci přidají port doFRONTEND_URLaALLOWED_ORIGINS(offline instalátor bereFRONTEND_PORTz prostředí).DOCS_URLje přejmenováno naNUXT_PUBLIC_DOCS_URL; kit pro tento release čte iDOCS_URL. IP adresa jakoMAZEVAULT_DOMAIN: BFF ověřuje certifikát backendu podleNUXT_CORE_API_SERVERNAME(výchozíMAZEVAULT_DOMAIN) a IP adresa odpovídá jen položce IP v certifikátu, proto instalátory aupgrade-mazevault.shpřidají do.envNUXT_CORE_API_SERVERNAME=localhostainit-certspřidá do nových certifikátůIP:<doména>(viz Konfigurace TLS).
Nové funkce¶
- Nové webové rozhraní (Nuxt) se serverovým BFF — Aplikaci React nahrazuje nové webové rozhraní s malým serverem (BFF) v kontejneru frontendu. Prohlížeč drží jen cookie
__Host-session(Secure,HttpOnly,SameSite=Strict); v prohlížeči není žádný JWT a BFF ke každému požadavku připojí serverovou relaci. Přihlášení: lokální, LDAP / AD, Kerberos (záložka se zobrazí, jen kdyžGET /api/v1/auth/sso/spnego/statushlásí dostupnost) a tlačítko SSO Entra ID; tlačítko Google zmizelo, protože backend pro něj nemá trasu. Po přihlášení s MFA stačí jedno pole pro TOTP nebo záložní kód; příliš mnoho pokusů nebo vypršelé čekající přihlášení vrátí na/logins upozorněním. Uživatel smust_change_passwdje přesměrován na/change-passworda relaci si ponechá. Vypršená relace pošle uživatele na/login?redirect=<stránka>a po dalším přihlášení zpět. Každá stránka kontroluje svoje oprávnění: bez něj zobrazí „Access Denied“ s chybějícím oprávněním a postranní menu položku skryje. Relace prohlížeče nejsou autentizační metodou API pro integrace. - Světlý a tmavý režim — Webové rozhraní se řídí světlým nebo tmavým vzhledem operačního systému a přepínač v horní liště ho může změnit; volba se pamatuje v prohlížeči.
- Šifrované názvy tajemství po lokálním přihlášení — Šifrované názvy tajemství se odemknou po lokálním přihlášení heslem (ne přes LDAP, Kerberos ani SSO). Neúspěšné odemknutí zanechá jedno varování („Encrypted secret names are unavailable in this session.“). Klíč drží pro každého uživatele service worker prohlížeče a po obnovení stránky se obnoví nejdéle na 2 hodiny; při vypršení relace se vymaže. Jde o šifrování názvů a hodnot tajemství dat v2 na straně klienta klíčem odvozeným z lokálního hesla, nikoli o úložiště se zero-knowledge: přihlášení posílá heslo serveru.
- Edge kontejner — Compose kit přidává kontejner
mazevault-edge(nginx). Ukončuje TLS na 443 a 80 (80 přesměrovává na HTTPS) a směruje/api/a/swaggerna backend a/(stránky a/bff) na frontend; frontend už TLS neukončuje. Edge je zabezpečený (no-new-privileges, všechny capabilities zrušeny, souborový systém jen pro čtení, výchozí 64 MB přesEDGE_MEMORY_LIMIT) a skripty pro certifikáty ho po importu nebo obnovení restartují. - OpenAPI 3.1 na
/swagger—/swaggerservíruje dokument OpenAPI 3.1 (/swagger/doc.json) se Swagger UI 5 (/swagger/index.html). Trasy, které v dokumentu nejsou typované (ACME, OCSP, SCEP, CRL, export certifikátu, websocket agenta, binární soubory ke stažení, health a samotný Swagger; celkem 28), jsou vypsány v popisu dokumentu.SWAGGER_ENABLEDaSWAGGER_HOSTplatí jako dosud. - Dlouhé operace mají dál limit 300 sekund — Požadavek přes webové rozhraní smí trvat 300 sekund (poté BFF odpoví 504
backend timeout;proxy_read_timeoutaproxy_send_timeoutna edge jsou 300 s směrem k backendu a čtení směrem k webovému rozhraní 310 s, aby 504 od BFF dorazila první; websocket agenta 3600 s, nahrávání do 50 MB). Selhání mezi BFF a backendem vrací 502 a BFF loguje jen kód příčiny. - Přidaná potvrzení — Webové rozhraní nově žádá o potvrzení před schválením nebo zamítnutím žádosti o heslo, obnovením certifikátu, schválením CSR na stránce Objevené certifikáty, vygenerováním klíče ACME EAB a exportem certifikátu se soukromým klíčem.
- Efektivní řetězec certifikátu: podřízené CA se exportují včetně rootu — Export podřízené CA (nebo jakéhokoliv certifikátu) importované bez řetězce vydavatelů nyní automaticky obsahuje vydávající CA i root, pokud je vydavatel přítomen v inventáři organizace. Nový
CertificateChainResolverje jediným zdrojem pravdy pro efektivní řetězec: řetězec zachycený na záznamu při importu nebo vydání se vrací byte po bytu a nikdy se nerozšiřuje; pouze certifikáty bez uloženého řetězce se doplňují z CA certifikátů spravovaných v téže organizaci (včetně interní CA a explicitní vazby záznamu na CA) a kandidát je přijat výhradně tehdy, když kryptograficky ověří podpis certifikátu — shoda Distinguished Name sama o sobě dva certifikáty nikdy nepropojí. Root se zahrnuje, archivovaní kandidáti se ignorují, revokovaný vydavatel se použije jen tehdy, když nic jiného neověří, a je hlášen jako varování; vydavatelé s nebezpečným podpisovým algoritmem jsou odmítnuti s varováním. Tentýž řetězec používá export API (include_chain=true, všechny formáty), detail certifikátu (záložkaChainnově zobrazuje původ — Stored with certificate / Resolved from inventory / No chain — plus úplnost k rootu a varování), seznam certifikátů pro agenta i Terraform data source, takže všichni konzumenti vidí identický materiál. Čtení nikdy nezapisuje do databáze; řetězec se persistuje jen tehdy, když import nebo adopce zapisuje tělo certifikátu bez řetězce. OdpověďGET /certificates/{id}získáváchain_source,chain_completeachain_warnings; data sourcemazevault_certificatezískáváchain_pem,chain_sourceachain_completea jeho atributcertificate_pem— dříve mapovaný na pole, které API nikdy nevracelo — je nyní naplněn zpublic_chain_pem. Nová Prometheus metrika:mazevault_certificate_chain_resolution_total{source,complete}. - Objevené certifikáty si uchovávají tělo; adopce dává nasaditelný certifikát — Discovery agentem nyní ukládá veřejný leaf certifikát a řetězec vydavatelů, který agent viděl (migrace
000199, sloupcecertificate_pem/chain_pemvdiscovered_certificates; pouze veřejný materiál, nikdy klíč). Adopce objeveného certifikátu proto vytvoří spravovaný certifikát s tělem, které lze exportovat, nasadit a ověřit; spravované certifikáty adoptované před touto verzí dostanou tělo automaticky při příštím skenu agenta přes stávající auto-link podle otisku, a nahlášený řetězec se ukládá tak, jak je (z inventáře se doplňuje jen tehdy, když agent žádný nenahlásil). Detail objeveného certifikátu (GET /discovered-certificates/{id}) vracícertificate_pem,chain_pemachain_certificates; seznamy tělo záměrně vynechávají, aby stránka Discovered Certificates zůstala rychlá. Identita (serial, otisky) se nyní odvozuje z DER certifikátu místo důvěry v hlášení agenta. - Tělo certifikátu ze synchronizace s CA a z ručního importu — Tělo se nyní uchovává i u certifikátů synchronizovaných z výpisu CA (HashiCorp Vault, DigiCert, ADCS, SSLMarket a lokální inventář pro ACME / I.CA / PostSignum):
ParseCertificateMetadatapřenáší normalizované PEM do objeveného záznamu, opakovaná synchronizace s CA doplní tělo záznamům vytvořeným dříve bez něj a spravovaný certifikát navázaný podle otisku, který tělo nemá, ho dostane stejně jako u agentní cesty. Navíc import samotného veřejného certifikátu (CRT/PEM/DER nebo PFX) nyní doplní spravovaný certifikát bez těla místo odmítnutí jako „již existuje“: import se spáruje podle otisku (nebo přiváže přesexpected_certificate_idz detailu certifikátu), tělo se uloží spolu s identitou a popisnými sloupci odvozenými z něj (kanonický serial, otisky, subjekt/vydavatel, platnost, algoritmy klíče a podpisu, key usage, SAN, typ certifikátu; stavactivese aktualizuje, revokovaný či čekající se nikdy nemění) a záznam bez řetězce se doplní z inventáře. Privátní klíč se u takového záznamu řídí schváleným pravidlem: klíč dodaný spolu s certifikátem se připojí, pokud záznam custody nemá; klíč shodný s existující custody je idempotentní opakovaný import; klíč, který neodpovídá, je odmítnut s explicitní chybou až po uložení těla — záznam nikdy nezůstane bez těla kvůli špatnému klíči. Lokálně uložený klíč, který při svém importu nešlo ověřit (záznam neměl tělo), se ověří při doplnění těla a pokud k certifikátu nepatří, je označen (metadata.private_key_mismatch, auditní událostcertificate.private_key_mismatch), ale nikdy nesmazán. Položky hromadného/souborového importu v tomto případě vracímessage: "existing certificate record completed with the uploaded certificate body"; detail certifikátu zobrazuje akci Complete certificate u záznamů bez těla a detail objeveného certifikátu vysvětluje ruční cestu. Discovery ingest, synchronizaci s CA, adopci i import nyní obsluhuje jedna sdílená implementace (applyCertificateBodyToManaged), takže každá cesta dává stejně kompletní záznam (dřívější cesta re-skenu nastavovala key usage jen v paměti a neukládala ho). - Nasazení do souborů přes agenta a allowlistované příkazy — Rotace certifikátu nyní umí nasazovat do souborů na hostiteli agenta (cíl
Agent File (PEM), krokagent_file_sync): agent zapíše leaf, řetězec, klíč a volitelný sloučený bundle (PEM nebo PKCS#12) podle content mode cíle (public_only,public_chain,full_chain_with_key,key_only), nastaví práva a vlastníka, původní soubory ponechá jako.BAK, nainstaluje řetězec do trust store platformy (je-li zapnuto) a spustí volitelný post-install příkaz. Kroky rotace, které potřebují příkaz na hostiteli (restart služby, WLST restart skript, Oracleorapki), nyní běží přes nový požadavek agentaagent_command, který spouští pouze příkazy odpovídající vestavěnému allowlistu agenta nebo regulárnímu výrazu vallowed_commandskonfigurace operátora. Cíle Oracle database wallet se nyní nasazují skutečně: PKCS#12 s jednorázovým heslem se připraví pod<wallet>/mazevault/, importuje přesorapki wallet import_pkcs12(auto-login nebo heslem chráněné wallety přeswallet_password_ref) a vždy se následně odstraní; heslo walletu i PKCS#12 jsou označena jako citlivá, takže je agent v auditním logu, odpovědi i případné chybě odmítnutí rediguje, a staging krok nenese idempotency klíč, aby opakovaná rotace soubor znovu připravila místo přehrání zastaralého výsledku.update_tns_namesarac_nodesjsou explicitně odmítnuty místo ignorování. Cíle WebLogic se nyní nasazují přes skutečný krokweblogic_deploy: leaf a klíč se nainstalují do custom identity keystore (JKS nebo PKCS#12, záloha přesbackup_enabled), řetězec vydavatelů se volitelně importuje do custom trust keystore (trust_store_path+ novétrust_store_type/trust_store_password_ref; každý vydavatel se připraví jako samostatný PEM pod<adresář-trust-store>/mazevault/, importuje přeskeytool -importcert -trustcacerts, již existující alias se počítá jako úspěch a připravený soubor se vždy odstraní) a managed server nebo cluster se volitelně restartuje přeswlst_script_pathoperátora (restart_modegraceful / force / rolling). Heslo trust store je označeno jako citlivé, takže ho agent všude rediguje, a administrátorské přihlašovací údaje se nikdy nedostanou na příkazový řádek — WLST skript musí používat uložené přihlašovací údaje;admin_url,server_nameacluster_namejsou odmítnuty, pokud obsahují shellové metaznaky, a režim restartu vyžadujeadmin_url. Strukturované požadavkyagent_command(keytool, orapki, WLST skript) agent spouští přímo s vektorem argumentů, bez shellu, takže heslo obsahující shellové metaznaky nemůže být shellem ani reinterpretováno, ani vypsáno zpět; citlivé hodnoty jsou navíc před odesláním z agenta vyčištěny z výstupu příkazu i textu chyby. Operátorem zadané post-install příkazy si zachovávají shellovou sémantiku. - Cíle nasazení se validují při uložení — Vytvoření nebo úprava cíle nasazení certifikátu se nyní validuje proti tomu, co systém skutečně umí provést, a vrací
400s důvodem místo přijetí konfigurace, která by později selhala nebo byla přeskočena: cíle přes agenta (agent_keystore,agent_file,database,weblogic) vyžadují agenta; cíl database wallet vyžadujewallet_path, provider Oracle (SQL Server, PostgreSQL, MySQL a MongoDB žádný wallet nemají — chyba uvede cíl Agent Keystore / Agent File, který se má použít místo něj) aupdate_tns_names=false; cíl WebLogic vyžadujekeystore_path, referenci na heslo pro svůj trust store a WLST skript pro jakýkoliv režim restartu; cíleweb_serveraload_balancerjsou odmítnuty s podporovanou alternativou, protože pro ně zatím neexistuje mechanismus nasazení. Stejnou validaci aplikuje builder workflow, takže zapnutý cíl, který nelze provést, rotaci ukončí chybou s ID cíle a důvodem místo tichého přeskočení. Vypnutí nebo změna priority existujícího cíle s neplatnou starší konfigurací je vždy povoleno, aby ho operátor mohl z rotace vyřadit; opětovné zapnutí vyžaduje opravu konfigurace. Editor cílů rotace v UI tato pravidla zrcadlí: Database Wallet vyžaduje agenta a je označen Oracle, ne-Oracle providery a přepínač Update TNS Names jsou zakázány s vysvětlujícím textem, Web Server se zobrazuje jako zatím nedostupné a Load Balancer je pro nové cíle z výběru skrytý (existující se stále otevře v režimu úprav s vysvětlením, aby šel vypnout nebo smazat — z API ani z kódu nebylo nic odstraněno), při odmítnutém uložení se zobrazí důvod z backendu a seznam cílů získal akci Zapnout / Vypnout, která mění pouze příznakenabled— cesta, jak starší cíl z rotace vyřadit bez smazání. - Zálohy rotace tajemství: retence, úklid a ruční obnova — Každá rotace tajemství pořizuje šifrovanou zálohu stavu před rotací a nyní ji sleduje explicitním životním cyklem (
pending→released/restored/recovery_required→acknowledged). Denní úklidová úloha maže pouze zálohy v terminálním stavu po vypršení retenčního okna, zatímco zálohy, u nichž selhal automatický rollback, jsou označenyrecovery_requireda nikdy se automaticky nemažou. Operátoři mohou zálohy vypsat, obnovit nebo odhalit hodnotu před rotací a potvrdit vyřešenou zálohu přes novérotationAPI endpointy:GET /rotation/backups,POST /rotation/backups/{id}/restore,POST /rotation/backups/{id}/revealaPOST /rotation/backups/{id}/acknowledge. Reveal a restore navíc v handleru vynucujísecret:readna prostředí daného tajemství a pro externě spravovaná (orchestrator mód /names_only) tajemství se lokálně žádná hodnota neukládá ani nevrací — operátor je odkázán na získání hodnoty z externího provideru pod vlastní identitou, takže API nemůže obejít řízení přístupu ke Key Vaultu. Retence je konfigurovatelná novou proměnnouMAZEVAULT_ROTATION_BACKUP_RETENTION_DAYS(výchozí 7). Byly přidány dvě metriky Prometheus:mazevault_rotation_backups_purged_totalamazevault_rotation_backups_recovery_required. - Preflight rotace nyní před spuštěním ověřuje připravenost gateway a agentů — Preflight engine rotace i orchestrátor nyní před povolením startu rotace vyhodnocují živou připravenost každého požadovaného cíle exekuce — gateway a post-action agentů — namísto pouhé kontroly konfigurace. Nová metoda
ProbeGatewayByIDprověří konkrétní gateway podle ID a nemutující cestaEvaluateReadinessposoudí, zda je rotační zdroj připraven, aniž by měnila jakýkoli stav. Preflight engine rozlišuje povinné a volitelné post-action agenty, takže rotace závislá na nedostupné gateway nebo nedostupném povinném agentovi je klasifikována a nahlášena předem (napájí výsledkyready/deferred/blocked/manual-review-required) místo selhání uprostřed běhu. Rotační plánovač v rámci této práce efektivněji klasifikuje chyby brány (gate). - Revoker milostivé lhůty pro service identity — Nová úloha na pozadí tvrdě revokuje tajemství klientů (service identit), jejichž lhůta milostivé doby (grace period) vypršela, a dokončuje tak cestu „soft revokace“, kterou
RotateClientSecretzahajuje při nakonfigurované grace period. Dříve se zrotované tajemství s grace oknem spoléhalo na to, že staré přihlašovací údaje zůstanou platné, ale nic je po vypršení okna durabilně nevyřadilo. Revoker běží periodicky z plánovače (výchozí jednou za minutu), materializuje vypršelé grace periody a pro každou tvrdou revokaci zapíše auditní záznam. - Správa životního cyklu agentů a evidence deployment záznamů — Registrované agenty lze nyní spravovat v celém životním cyklu řídicí roviny přímo v sekci Nasazení → Agenti a autentizace agentů je od začátku do konce lifecycle-aware. Nový route guard
RequireActiveAgentpři každém JWT-autentizovaném požadavku agenta znovu ověří aktuální stav agenta v databázi, takže agent, který byl odregistrován, revokován nebo smazán, už nemůže volat agentní routy s neexpirovaným tokenem; registrace ani legacy hostname-discovery cesta už neaktivují neaktivního ani revokovaného agenta a runtime konzumenti (resolvování rotačního sync-targetu, SSH deploy/revoke, keytab rotace) odmítnou směrovat práci přes neaktivního agenta. Konzoli obsluhují čtyři novéagent:adminendpointy:GET /api/v1/agents/:id/lifecycle-impactvrací orientační přehled závislostí (spravované certifikáty, vazby na projekty, rotační cíle, SSH klíče, čekající keytab práce, discovery/config/token reference) s best-effort varováními;POST /api/v1/agents/:id/unregistervyřadí agenta — zneplatní jeho mTLS identitu a recovery tokeny, deaktivuje vazby na projekty a označí čekající keytab práci jako selhanou — nebo povýší na bezpečnostní revokaci, pokud je kategorie důvoducompromised/lost_credential/stolen_host, přičemž nevyřešené blockery vyžadujíforce;POST /api/v1/agents/:id/reregistervyřadí starou identitu a vydá jednorázový 24hodinový náhradní bootstrap token; aPOST /api/v1/agents/:id/uninstallpožádá připojeného schopného agenta, aby se sám odinstaloval. Vzdálená odinstalace se vyjednává podle schopností v době požadavku a je podporována pro Linux balíčkové (systemd) instalace běžící jako root a Windows MSI service instalace: agent nejprve potvrdí přijetí, poté odpojená kopie agentní binárky (uniká z cgroup služby přessystemd-runna Linuxu,DETACHED_PROCESSna Windows) provede odstranění a před sebe-zničením nahlásí skutečný výsledek zpět přes health kanál — na Windows se per-build MSI ProductCode zjistí za běhu ze stabilního WiX UpgradeCode a odebere přesmsiexec, s fallbackemsc deletepro ne-MSI service rozložení. Vyřazení agenta se dokončí až po nahlášeném úspěchu; nahlášené selhání nechá agenta aktivního (uninstall_status = failed) pro opakování a chybějící report je zobrazen jako čekající na potvrzení. Nepodporovaná rozložení (nebalíčkové/ruční instalace, macOS, offline) vrátí jasný fallback na odregistraci s ručním odstraněním. Deployment (bootstrap) záznamy získaly soft-delete životní cyklus —DELETE /api/v1/deployments/:id(chráněnodeployment:write, scoped na organizaci) zneplatní enrollment token a instalační script bez dopadu na již registrované agenty a veřejné script/config endpointy pak vrací 404. Odpovědi list deploymentů používají dedikované DTODeploymentResponsebez tokenu s vypočteným příznakemusable, zatímco odpověď create vrací bootstrap token právě jednou přesDeploymentCreatedResponse(závisí na něm UI, Go SDK i Terraform provider). Záložka Nasazení → Agenti se stává operační konzolí (odregistrace s náhledem dopadu a důvodem, vzdálená odinstalace, přeregistrace s jednorázovým tokenem, viditelné chybové stavy) a Nasazení → Nasadit získává akce smazat, zobrazit script a fallback kopírování. Nakonecgo testsada modulu agenta nyní běží v PR, dev i release CI (dříve pouze cross-kompilace) a test invalidace filesystem-discovery politiky, který byl citlivý na běh pod rootem, byl zdeterminován. - Rotační šablony získávají políčka politiky a režim úschovy tajemství — Šablony konfigurace rotace nyní nesou
lead_time_days(dní před expirací pro zahájení obnovy certifikátu),grace_period_days(dní, po které zůstává předchozí hodnota platná pro rollback) asecret_custody_mode(local,transientnebodelegated). Tato pole jsou vystavena přes API rotačních šablon, Go SDK i Terraform resourcemazevault_rotation_templatea jsou end-to-end sladěna s perzistovaným katalogem (migrace000195). Schéma API rotačních šablon a jeho dokumentace Swagger byly aktualizovány, aby nová pole popisovaly. Šablona navíc vystavujeproject_id(volitelné omezení na projekt) aretry_delay_secondsa na Terraform resource jeorganization_idnyníOptional+Computed(rozřešeno serverem) s jednou sdílenou flatten cestou, takže create, read a update se nemohou rozejít; tyto přírůstky mapují již perzistované sloupce a nevyžadují novou migraci. - Objevené certifikáty: vyhledávání a režimy přiřazení — Stránka Objevené certifikáty přidává serverový filtr
searcha explicitní režimy přiřazení pro adopci objevených certifikátů do správy, včetně endpointu hromadné adopce (POST /discovered-certificates/bulk/adopt, chráněnodiscovered_cert:bulk) vedle single-item cesty adopce. Samostatná routa Certificate Discovery byla odstraněna a nyní přesměrovává na Objevené certifikáty. - Akční stav rotace na Dashboardu — Dashboard nyní pomocí nového navigačního resolveru rozřeší rotační položky na jejich akční cíl, takže záznamy stavu rotace odkazují přímo na plochu, kde s nimi lze pracovat.
- Nasazení sloučeno pod Enterprise Functions (chráněno PoC / Enterprise) — Configuration Management, SSH Management, KeyTab Management a Deployment nyní sídlí společně se Správou tokenů pod jednou navigační skupinou Enterprise Functions, která je čistě seskupovací hlavičkou — pouze se rozbaluje/sbaluje a sama nikam nenaviguje. Configuration, SSH a KeyTab už byly chráněny svými license featurami
config_management/ssh_management/keytab_management; Deployment je nyní chráněn stejně novou featuroudeployment_managementudělovanou licencím PoC a Enterprise (stav active, grace nebo expiring). Skupina správy/api/v1/deployments(create/list/delete) je vynucena na straně serveru přesFeatureLicenseMiddlewarea pro Small Business či nelicencované tenanty vrací HTTP 403; stránka Deployment místo záložek zobrazí upgrade banner. Uživatelé položku v menu stále vidí, pokud drží odpovídající RBAC oprávnění. Neautentizované, UUID-chráněné bootstrap endpointy agenta (/deployments/:id/script,/config,/agent-binary) zůstávají záměrně nechráněné, aby bezobslužné instalace agentů dál fungovaly, a endpointy správy agentů/gateway se nemění. - PDF zprávy o souladu se generuje na serveru — Nový
GET /api/v1/compliance/{type}/pdf(oprávněníaudit:read; typypci-dss,soc2,gdpr,iso27001, staršípciasox) vrací zprávu o souladu jako PDF přílohu (compliance-report-<framework>-<čas UTC>.pdf) se stejným obsahem a pořadím jako dřívější export v prohlížeči: souhrn se skóre, rozpis kontrol, statistiky certifikátů a rotací, politika hesel, doporučení a čísla stránek. Časy jsou v UTC a vložené písmo Inter správně zobrazí diakritiku. PDF vzniká při stažení, proto jeho čas „Generated“ odpovídá času stažení. - Filtr integrací organizace podle kategorie —
GET /api/v1/organizations/{id}/integrationspřijímá volitelný parametr dotazucategory(notification,log_stream,archive; přesná shoda) a pak vypíše jen integrace této kategorie. Bez něj je odpověď beze změny. - Audit nastavení reportu, spuštění reportu a změn kontaktů pro incidenty —
PUT /api/v1/reports/settings,POST /api/v1/reports/triggeraPUT /api/v1/organization/incident-contactsnyní zaznamenávajíUPDATE_REPORT_SETTINGS(entitaREPORT_SETTINGS, detail<n> recipients),TRIGGER_WEEKLY_REPORT(entitaWEEKLY_REPORT) aUPDATE_INCIDENT_CONTACTS(entitaORGANIZATION, id organizace, detail<n> contacts) s jednajícím uživatelem a IP. Záznamy nikdy neobsahují e-mailové adresy. - Audit změn governance reportů —
POST /api/v1/governance/reports,POST /api/v1/governance/reports/{id}/analyzeaDELETE /api/v1/governance/reports/{id}nyní zaznamenávajíUPLOAD_GOVERNANCE_REPORT(detailsource_type=<typ>, <n> bytes),ANALYZE_GOVERNANCE_DRIFT(detailoverall_score=<skóre>) aDELETE_GOVERNANCE_REPORT(entitaGOVERNANCE_REPORT, id reportu) s jednajícím uživatelem a IP. Záznamy nikdy neobsahují obsah reportu ani jeho název; odmítnuté volání (neznámý report) záznam nezanechá. - Limit seznamu rotací vyžadujících pozornost —
GET /api/v1/dashboard/rotation/actionablepřijímá volitelný parametrlimit(celé číslo alespoň 1), který ponechá jen první řádky seznamu; jiná hodnota vrací400Invalid limit. Bez něj se odpověď nemění.
Vylepšení¶
- Seznam integrací filtruje podle stavu zapnutí —
GET /api/v1/integrationspřijímá volitelný parametrenabled(true: jen zapnuté integrace,false: jen vypnuté); jiná hodnota vrací400invalid enabled. Bez něj se seznam nemění. Dashboard Entra jej používá místo filtrování na klientovi. - Stránkování auditního logu na serveru — Stránka auditního logu v konzoli nyní načítá vždy jednu stránku po 100 záznamech přes stávající
limit,offsetatotalendpointuPOST /api/v1/audit-logs/searcha zobrazuje celkový počet s navigací mezi stránkami; dřívější stránka načetla jednu pevnou stránku 100 záznamů a ke starším se nedostala. Filtry a stránka se drží v URL. API se nemění. - Doplnění privátního klíče k existujícímu certifikátu (vydanému z CSR nebo importovanému bez klíče) — Certifikáty podepsané z nahraného CSR jsou uloženy s custody klíče
none; operátor nyní může klíč MazeVaultu dodat dodatečně z Detail certifikátu → Overview → Import private key (PEM klíč, šifrovaný PEM klíč, PFX/P12 nebo vložený PEM) s lokální nebo secret-manager custody při respektování Orchestrator Mode. Nebyl zaveden žádný nový endpoint: dialog využíváPOST /certificates/import/filea nový volitelný parametrexpected_certificate_id(dostupný i naPOST /certificates/import) přiváže požadavek k jedinému certifikátu, takže cizí materiál je odmítnut místo vytvoření či změny jiného záznamu. Import více souborů nyní páruje samostatné.keysoubory s certifikátem přes backendové párovánípreview-multi(nové polekey_source_filev odpovědi náhledu) a odesílá certifikát s klíčem v jednom požadavku, takže zvlášť nahraný klíč dorazí k již spravovanému certifikátu. Vyhledání duplicity/cíle je nyní primárně podle SHA-256 otisku (serial + issuer zůstává jako legacy fallback, který odmítne řádky s odlišným uloženým otiskem), kontrola custody respektuje externí úložiště (externě uložený klíč není nikdy tiše nahrazen lokální kopií), import v rámci projektu už nemůže změnit certifikát patřící jinému projektu, doplnění klíče nikdy nemění nastavení obnovy certifikátu ani nedegraduje bohatší uložený řetězec a chyba „already exists“ nyní vysvětluje, jak klíč doplnit. - Nahraná CSR se validují vůči šabloně před kontaktováním CA — Nahraná CSR nyní selžou okamžitě při odeslání, pokud porušují explicitní politiku šablony: vlastní podpis musí být platný, velikost klíče musí být v
allowed_key_sizes, je-li nastaveno (dříve vynucováno jen interní CA, nikdy ADCS ani externími CA), a SAN položky musí vyhovět explicitnísan_config(allowed_san_types,san_validation_pattern,max_san_counta nový příznakrequire_san, který odmítne CSR pouze s CN). Výchozí chování je záměrně permisivní — šablony bezsan_configpřijímají každé CSR jako dosud — a systémové šablony (mTLS agentů/gateway) jsou vyjmuty. Požadované SAN a parametry klíče nahraného CSR se nyní zaznamenávají na požadavku pro auditovatelnost. - Požadavky vyžadující schválení správcem ADCS se sledují místo selhání — Vydání nového certifikátu přes ADCS CA vyžadující manager approval už nevrací HTTP 500, zatímco CA drží enrollment: požadavek přejde do
submitted_to_caa po schválení v CA jej automaticky dokončí poller externích objednávek. CA providery mohou implementovat nové volitelné rozhraníIssuedCertificateFetchervracející vydaný leaf podle ID objednávky; ADCS jej implementuje, čímž je opraven latentní defekt, kdy by poller uložil CA řetězec jako leaf. - Životní cyklus požadavku po selhání vydání — Automaticky schválený požadavek, jehož vydání selže, je nyní označen
failedse zaznamenanou chybou (místo setrvání vapprovedbez certifikátu) a ručně schválený požadavek se při selhání vrátí dopending, aby jej schvalovatel mohl zopakovat; pozdější úspěšné vydání zaznamenanou chybu vymaže. Enum stavu požadavku dokumentuje stavfaileda UI jej zobrazuje. - Kanonické kódování sériového čísla certifikátu —
certificates.serial_numberse konzistentně ukládá jako decimální řetězec big-integeru, který už používají OCSP, revokace a import. Vydání přes ACME a HashiCorp Vault, finalizace externích objednávek a rychlá cesta vestavěného ACME serveru dříve zapisovaly či dotazovaly hexadecimální serialy, což u těchto certifikátů rozbíjelo deduplikaci importu a indexované vyhledávání ACME serveru. Revokace a dotazy stavu ve Vaultu překládají kanonický serial zpět do Vaultem očekávaného colon-hex formátu, takže fungují legacy i normalizované řádky. Idempotentní backfill identity (BackfillCertificateIdentity) znovu odvodí serial a otisky z uloženého DER; běží na pozadí při startu primary a je součástíPOST /admin/certificates/backfill, který nyní vracíidentity_normalized. - Editor šablon už nepřepíná „Allow Additional SANs“ —
allow_additional_sansv API pro vytvoření/úpravu šablony certifikátu nyní rozlišuje přítomnost (vynechané zachová uloženou hodnotu; explicitnífalseje respektováno). Dříve update bez tohoto pole — které editor šablon nikdy neposílá — hodnotu resetoval nafalse. - Rozřešení scope integračních skupin pro RBAC — Nový
IntegrationGroupScopeMiddlewarerozřeší samostatné ID integrační skupiny na její vlastnící aktivní projekt ještě před vyhodnocením projektového RBAC a odmítne požadavky na skupiny, jejichž projekt je archivovaný nebo chybí. Díky tomu lze endpointy integračních skupin autorizovat konzistentně se zbytkem projektového RBAC modelu. - Životní cyklus revokace SSH authorized-key — Agenti mohou dotazovat čekající revokace authorized-key (
GET /agent/authorized-keys/pending-revocations) a potvrdit jejich dokončení (POST /agent/authorized-keys/:id/confirm-revocation) a operátoři mohou authorized-key revokovat (POST .../authorized-keys/:id/revoke) i opakovat selhané nasazení SSH klíče (PUT /ssh-keys/:id/deploy). Zastavenou nebo částečně selhanou exekuci rotace lze obnovit přesPOST /rotation/executions/:id/resume. Potvrzovací zpráva u rotace SSH klíče byla rovněž zpřesněna. - Runtime cíle rotace směrují jen přes aktivní agenty — Když rotace deleguje práci na agenta (například nasazení keytab nebo SSH), runtime nyní rozřeší navázaného agenta a odmítne směrovat přes agenta, který je neaktivní, revokovaný nebo soft-smazaný, a vrátí jasnou chybu místo proxování na mrtvý cíl.
- Validace číselných polí rotačních šablon — Číselná pole rotačních šablon (
rotation_interval_days,lead_time_days,grace_period_days,max_retry_attempts,retry_delay_seconds,timeout_minutes) jsou nyní validována jako nezáporná celá čísla napříč backend API, frontendem i Terraform providerem, se strukturovanými aplikačními chybami místo nesrozumitelných selhání. Poleretry_delay_seconds— již perzistované a vystavené přes API, SDK i Terraform resource — je nyní editovatelné i ve formuláři rotační šablony v UI, takže jej lze nastavit a zobrazit z konzole. Hromadná adopce certifikátů zobrazuje uživatelsky přívětivé zprávy pro částečná selhání. - Elegantní vypnutí backendu při SIGTERM — API server nyní při obdržení SIGTERM vyprázdní probíhající požadavky přes
http.Server.Shutdown— s lhůtou pro vyprázdnění drženou pod terminační grace period Kubernetes — a poté před ukončením zastaví služby log-stream a audit-archive na pozadí, místo aby byl při rolloutech tvrdě zabit uprostřed požadavku.http.ErrServerClosedje považován za normální ukončení. - Vynucení vlastnictví SSH authorized-key — Výpis, nasazení, revokace a odstranění SSH authorized-key (a výpis párů klíčů) nyní konzistentně vynucují vlastnictví páru klíčů — jednající uživatel musí pár klíčů vlastnit nebo mít
ssh:admin— v souladu s kontrolami vlastnictví již uplatňovanými u get, export a delete. Neadmin už nemůže vypsat inventář klíčů jiného uživatele ani nasazovat/revokovat/odstraňovat klíče, které nevlastní; producentská revokace a odstranění plus agentní potvrzení revokace nyní zapisují auditní záznamy s kontextem request-ID. - Obnova rotace vyžaduje autentizovaného aktéra —
POST /rotation/executions/:id/resumenyní odmítne požadavek bez autentizovaného principalu s HTTP 401 ještě před během orchestrátoru a zaznamenává úspěšné i neúspěšné obnovy s plným auditním kontextem request-ID. - Stabilita recovery tokenu agenta (bez zamčení při re-registraci) — Re-registrace agenta již při každém volání nerotuje stále platný recovery token. Nový recovery token se razí pouze tehdy, když se agent bootstrapuje/přeinstaluje deployment tokenem nebo nemá použitelný token v evidenci; agent, který se autentizuje svým aktuálním recovery tokenem, si jej ponechává. Ve spojení s atomickou, pádu-odolnou perzistencí stavu agenta — zrotovaný token i identita se připraví a do paměti potvrdí až po úspěšném durabilním zápisu a nahrazení dočasného souboru je nyní atomické i na Windows (
MoveFileExs nahrazením existujícího), nejen na POSIX — už agent, který spadne nebo neuloží zrotovaný token, nemůže být trvale zamčen. Jde pouze o behaviorální zpevnění — žádná změna schématu ani API kontraktu. - Seznam projektů a souhrn archivu přijímají volitelné filtry —
GET /api/v1/projects/přijímá volitelné parametry dotazusearch(název projektu obsahuje text, bez ohledu na velikost písmen) atype(secret,keynebocertificate, přesná shoda).GET /api/v1/archived/summarypřijímá volitelnéarchived_fromaarchived_to(RFC 3339, včetně krajních hodnot, podlearchived_at) aexpiring_within_days(celé číslo alespoň 0, ponechá položky, jejichždays_until_deletionje nejvýše tato hodnota); filtrují archivované projekty, tajemství a certifikáty, nikdy ne uživatele, atotal_countpočítá vypsané položky. Neplatná hodnota vrací400. Bez parametrů jsou obě odpovědi beze změny a konzole je nově posílá místo filtrování v prohlížeči. - Porovnání secretů podle klíče na backendu —
POST /api/v2/secrets/comparepřijímá volitelný query parametrby:blind_index(výchozí, beze změny) nebokey, který porovná secrety s klíčem (starší, legacy) obou prostředí podle klíče a vrátí každý výsledek s polemkey(blind_indexzůstává prázdný), seřazené podle klíče. Jiná hodnota vrací400. Záložka Secrets toto porovnání dosud prováděla v prohlížeči. - Seznamy certifikátů filtrují, řadí a stránkují na backendu —
GET /api/v1/certificates/přijímá volitelné parametry dotazusearch(běžné jméno, primární DNS jméno, DN vydavatele nebo subjektu, název projektu, sériové číslo, DNS jméno ze SAN nebo štítek obsahuje text, bez ohledu na velikost písmen),statusatype(přesná shoda),expiring_within_days(celé číslo alespoň 0, ponechá aktivní certifikáty, kterým vyprší platnost nejpozději za tolik dnů),sort(common_name,primary_dns_name,issuer,expiry_date,days_until_expiry,san_countneboproject_name) sorder(asc, výchozí, nebodesc) alimit(nejvýše 500) soffset.GET /api/v1/projects/{id}/certificatespřijímásearch,status(efektivní stav včetněrolling outadeployment failed),type,environment,tag,sort(common_name,serial_number,certificate_type,expiry_datenebostatus),order,limitaoffset;environmentje zároveň prostředí, ve kterém se požadavek posuzuje. Filtry se použijí na certifikáty, které smí uživatel číst, stejné řádky se řadí podle id, aby se hranice stránky nepřesouvala, a hlavičkaX-Total-Countnese počet řádků, které filtry ponechají. Neplatná hodnota vrací400. NovéGET /api/v1/certificates/analyticsvrací agregaci pro dashboard (součty podle stavu, brzy expirující, podle typu a algoritmu klíče, 8 nejčastějších vydavatelů a projektů, časová osa expirací na dalších 6 měsíců UTC) pro stejné certifikáty. Bez parametrů jsou seznamy beze změny a konzole je nově posílá místo filtrování a počítání v prohlížeči. - Potvrzení před akcemi s přihlašovacími údaji, nasazením a rotací — Webové rozhraní se nyní zeptá, než zobrazí uloženou hodnotu spravovaného tokenu, exportuje soukromý klíč SSH, stáhne keytab, nasadí nebo odebere autorizovaný klíč SSH, podepíše klíč SSH, okamžitě synchronizuje cíl nasazení tajemství nebo certifikátu, obnoví běh rotace, vytvoří identitu služby (její klientské tajemství se zobrazí jen jednou) a smaže šablonu rotace nebo keytab. Každé spuštění rotace, rotace systémového klíče (potvrzuje se zadáním účelu klíče) a dosavadní potvrzení smazání, obnovení a odpojení si ponechávají své znění. Zkušební běhy (dry run) jsou jen pro čtení a nepotvrzují se; vytvoření tokenu, import keytabu nebo klíče SSH a uložení konfigurace či šablony rotace zůstávají běžným odesláním formuláře.
- Kontrola oprávnění stránek SSH, keytabů, tokenů a identit služeb — Stránky SSH Management, KeyTab Management, Token Management a Service Identities neměly vlastní kontrolu oprávnění, takže uživatel bez přístupu dostal hlášení 403 u každého požadavku stránky. Nyní zobrazí stránku s odepřeným přístupem, pokud uživatel nemá oprávnění jejich položky v postranním panelu (
ssh:read,keytab:read,token:read,service_identity:read); Rotation Templates vyžadujerotation:reada Rotation Problemsdashboard:read. Bez licenční funkce zobrazí stránky SSH, keytabů a tokenů upozornění na upgrade a nic nenačítají. - Vyhledávání uživatelů na backendu —
GET /api/v1/rbac/userspřijímá volitelný parametr dotazusearch: uživatel odpovídá, když je oříznutý text obsažen v celém jméně nebo e-mailu bez ohledu na velikost písmen; prázdné hledání nic nemění a bez shody je odpovědí[]. Dialog přiřazení klíče SSH hledá jeho pomocí, místo aby filtroval celý adresář uživatelů v prohlížeči. - Správa konfigurací: odstraněna nefunkční tlačítka — Nová konzole už nezobrazuje tlačítka Preview a Adopt v Configuration Management → Discovered Configurations ani Restore to Pending ve Staging Area: nic nedělala. Ignorovat (vyžaduje
config:write, ptá se na potvrzení) zůstává beze změny a Staging Area nemá sloupec Akce. - Fakturace: odstraněny ukazatele využití — Panel Usage Limits na stránce
/billingzobrazoval ukazatele vyplněné pevně na 50 % a 20 %, které neodpovídaly žádnému skutečnému využití. Nová konzole zobrazuje u projektů a tajemství jen limity (UnlimitedneboLimit: N). - Fakturace: Renew License a Activate vyžadují billing:write —
/billingvyžadujebilling:read, ale tlačítko Renew License a formulář Update License (Activate) zobrazoval každému, kdo stránku otevřel; obnovení i aktivace vyžadujíbilling:write, takže kliknutí uživatele jen pro čtení skončilo403. Obojí se nyní zobrazí jen sbilling:write; údaje licence, limity využití a upozornění na omezený režim zůstávají viditelné sbilling:read. - Konzole: méně zbytečných požadavků, neúspěšná čtení jako chyby — Dialog gatewaye Assign Environments ukazoval neúspěšné čtení prostředí (například bez
env:read) jako „No environments found“; nyní ukáže chybu s Retry. Úprava a obnovení licence se po chybě serveru nebo ztrátě spojení už neposílají znovu (každé volání se audituje). Projekt certifikátů nebo klíčů už nečte integrace projektu (záložku Entra Apps mohou mít jen projekty tajemství) a seznamy projektů v konzoli se čtou jen sproject:readv některém projektu, místo aby vracely403. - Upozornění na aktualizaci pro uživatele s
system:read— Nová konzole zobrazí upozornění, když je k dispozici novější verze MazeVault (Update Available, u kritické verze Critical Update Available), s aktuální a nejnovější verzí, začátkem poznámek k vydání a odkazem ke stažení. Zobrazí se a stav aktualizace se načítá jen uživatelům s oprávněnímsystem:read, které vyžadují routy aktualizací. Zavření ho skryje na dobu relace záložky prohlížeče; Re-check se znovu zeptá aktualizačního serveru a při selhání zobrazí chybovou zprávu. - Potvrzení před akcemi nasazení, gateway a Entra — Webové rozhraní se nyní zeptá také předtím, než vygeneruje nasazení (vytvoří bootstrap token), znovu zaregistruje agenta (náhradní token), vyžádá vzdálenou odinstalaci agenta, uloží politiku verzí agentů (platí pro všechny nasazené agenty), uloží přiřazení prostředí gateway (podle něj se směrují úlohy gateway), přidá přihlašovací údaj k aplikaci Entra (vytvoří tajemství v Entra ID), synchronizuje integraci Entra (Sync from Entra přepíše uložené aplikace a přihlašovací údaje) a použije nahraný systémový certifikát. Smazání přihlašovacího údaje Entra si ponechává své znění; odregistrování agenta si ponechává svůj dialog s důvodem a dopadem a změna aktualizačního kanálu jednoho agenta se nepotvrzuje.
Opravy chyb¶
- Linuxový agent neběžel na hardened hostitelích ani na RHEL 8 — Linuxového agenta na zákaznických hostitelích zastavovaly dvě nezávislé chyby. (1) Binárka agenta v release byla sestavená se zapnutým cgo, byla tedy dynamicky linkovaná proti glibc sestavovacího stroje a na RHEL/Rocky/AlmaLinux 8 selhala s
/lib64/libc.so.6: version `GLIBC_2.34' not found; agent se nyní sestavuje sCGO_ENABLED=0 -trimpath, je linkován staticky a běží s libovolnou verzí glibc. (2) Nasazovací instalační skript ukládal binárku do/var/lib/mazevault/bin; na hostitelích s/varpřipojenýmnoexec(CIS/STIG baseline) systemd selhal sestatus=203/EXECv nekonečné restartovací smyčce. Instalátor i balíček rpm/deb nyní instalují binárku do/opt/mazevault-agent/bin(vlastník uživatel agenta, adresář vReadWritePaths, aby dál fungoval self-update, SELinuxbin_t). Instalátor byl přepracován pro hardened hostitele:set -euo pipefail, preflight (kontrolanoexecadresáře binárky přesfindmnt, detekce SELinuxu, potřebné nástroje), už žádný fallbackcurl -k(s CA MazeVault ji stažení použije a při neúspěchu přejde na systémové úložiště důvěryhodných certifikátů, nikdy na nezabezpečený režim), při neúspěšném stažení se vypíše HTTP stav a tělo chybové odpovědi serveru (např.503 agent binary downloads not configured), selhánícurlpo HTTP 200 (useknutý přenos) se počítá jako neúspěšné stažení a podepsaná binárka se připraví jakomazevault-agent.newa spustí jakomazevault-agent(version) dříve, než nahradí nainstalovanou binárku a než se zapíše unita, takženoexecpřipojení, zamítnutí SELinuxem nebo nesoulad glibc instalátor zastaví se srozumitelnou hláškou, dříve nainstalovaného agenta nechá nedotčeného a nikdy nezpůsobí restartovací smyčku,agent.yamlse zapisuje s právy0640, používá sesystemctl restart, aby opakované spuštění aktualizovalo běžícího agenta, hostitelé instalovaní s předchozím rozložením se migrují (stará binárka odstraněna, drop-in přepisyExecStartodstraněny, ostatní drop-iny zachovány) a návratové kódy jsou2preflight /3stažení či ověření /4služba neběží (stav a journal se vypisují s redigovanými tokeny a UUID). Pokud server nemá nakonfigurovanou CA, instalátor už nezapisuje prázdnýca.crta vygenerovanýagent.yamlnecháváserver_ca_fileprázdné, takže agent ověřuje server systémovým úložištěm důvěryhodných certifikátů; instalátor pro Windows obdobně prázdnou CA nezapisuje ani neimportuje. Self-update agenta a runner vzdálené odinstalace nyní volí adresář, který je zapisovatelný a není nanoexecpřipojení (adresář binárky, stavový adresář, poté dočasný adresář), místo předpokladu, že/tmpumožňuje spouštění, a pokud žádný nevyhovuje, vypíší odmítnuté adresáře. Vzdálená odinstalace rozpozná hostitele instalované skriptem (bez balíčku rpm/deb): unita, drop-iny a adresáře agenta se odstraní přímo místo selhávajícíhorpm -ea zastavení služby, odstranění unity a odstranění/opt/mazevault-agentjsou povinné kroky, jejichž selhání se serveru nahlásí místo falešného úspěchu,/opt/mazevault-agentse odstraní jen tehdy, když v něm binárka skutečně je, a požadavek na roota je vysvětlen v chybové hlášce. Nová volitelná proměnnáMAZEVAULT_CA_FILE(release kit, instalátory,check-config.sh, hodnoty Helm, dokumentace) určuje CA vkládanou do instalačních skriptů; Compose kit pro ni připojujeCUSTOM_CERT_DIRdo backendu jako/custom-certs. Operátoři, kteří203/EXECobešli drop-inem ukazujícím na/usr/local/bin, pouze znovu spustí instalační skript. - Výpadek backendu už uživatele neodhlásí — Když kontrola relace webového rozhraní selže chybou serveru, brány nebo sítě, rozhraní nyní uživatele ponechá přihlášeného a trezor odemčený (backend, který neodpoví do 15 sekund, se počítá jako taková chyba); při prvním načtení zobrazí „MazeVault is not reachable. Try again in a moment.“ a „Back to home“ kontrolu zopakuje. Na přihlašovací stránku vede jen vypršelá nebo chybějící relace (HTTP 401). Odmítnuté volání kontroly na pozadí (například stavu šifrování po přihlášení) zobrazí jen svou jednu zprávu místo dvou.
- Zpráva o chybném starém hesle už neobsahuje interní text — Změna hesla se špatným současným heslem (
POST /api/v1/auth/password) stále vrací HTTP 400, ale zpráva je nyní jenUNAUTHORIZED: invalid old password; interní text porovnání hash hesla se už v odpovědi neobjevuje. - Připravený sekundární údaj Entra se vytvoří jen jednou — Dvě souběžná volání
POST /api/v1/entra/credentials/{id}/staged-secondary(dvojklik, klient s opakováním nebo volání pro dva přihlašovací údaje téže aplikace) prošla kontrolou „jeden připravený sekundární údaj na aplikaci“ a každé vytvořilo v Entra živé klientské tajemství a čekající sekundární údaj. Aplikace má nyní najednou jen jeden připravený cyklus: volání zabere svůj údaj, zatímco je aplikace zamčená, dřív než požádá Microsoft Graph (nebo bránu) o tajemství, a vrátí409bez zásahu do Entra, pokud jiný údaj aplikace právě rotuje nebo čeká připravený sekundární údaj (a staged secondary credential is already in progress for this application; …,a credential of this application is rotating; …). Připravený sekundární údaj ani vyřazovaný bývalý primární údaj nemůže spustit připravený cyklus (409) a údaj, jehož běžná rotace čeká na ověření (stavpending_verification), se počítá jako rotující. Smazání aplikace počká na probíhající zabrání, místo aby selhalo na zablokování databáze. Zabrání se uvolní na konci volání, i když selže; pokud se server uprostřed volání zastaví, uvolní ho po 30 minutách hlídač zaseknutých rotací. - Změny přihlašovacích údajů Entra se auditují — Smazání přihlašovacího údaje Entra (
DELETE /api/v1/entra/credentials/{id}) nezanechalo záznam auditu, uložení jeho konfigurace rotace (POST …/rotation-config) jen záznam bez uživatele a suchý běhPUT …/rotation-configžádný. Nyní zaznamenávajíDELETE_ENTRA_CREDENTIAL,ENTRA_ROTATION_CONFIGURED(se zapnutím, dny předstihu a odkladu a počtem akcí po rotaci) aENTRA_DRY_RUN_PREFLIGHTs uživatelem, až když změna uspěje, jeden záznam na uložení (dodatečný záznam bez uživatele,entra.rotation.configured/entra.rotation.disabled, se už nezapisuje); odmítnuté volání nezaznamená nic. - Aktivace gatewaye, přiřazení prostředí, DR failover a bootstrap tokeny se auditují — Aktivace a deaktivace gatewaye, přiřazení jejích prostředí, aktivace DR a failback a vydání bootstrap tokenu gatewaye nebo agenta nezanechávaly záznam auditu. Nyní zapisují
ACTIVATE_GATEWAY/DEACTIVATE_GATEWAYaUPDATE_GATEWAY_ENVIRONMENTS(entitaGATEWAY, id gatewaye; prostředí a jejich režimy),ACTIVATE_GATEWAY_DR/FAILBACK_GATEWAY_DR(entitaENVIRONMENT, prostředí),CREATE_GATEWAY_BOOTSTRAP(entitaGATEWAY, id nové gatewaye a její název) aCREATE_AGENT_BOOTSTRAP_TOKEN(entitaDEPLOYMENT) s uživatelem a IP adresou. Žádný záznam neobsahuje token; odmítnuté volání nezapisuje nic. - Připravený sekundární údaj Entra se ověří a povýší jen jednou — Souběžná volání
POST /api/v1/entra/credentials/{id}/verify-secondaryneboPOST …/promote-primary(dvojklik, klient s opakováním) mohla uspět všechna: sekundární údaj se povýšil dvakrát a jeho dřívější primární údaj se dvakrát snížil, s počtem rotací zvýšeným za každé volání. Přechod nyní nejprve zabere údaj v jeho aktuální fázi: jedno volání uspěje, ostatní vrátí409a nic nezmění. - Trasy přihlašovacích údajů Entra už nevracejí interní text chyby —
POST /api/v1/entra/credentials/{id}/staged-secondaryaPOST …/promote-primaryodpovídaly na každé selhání409s jeho textem, včetně selhání Microsoft Graph nebo databáze a konfigurace, kterou nešlo dešifrovat (credential not found: decryption failed: …);PUT …/rotation-config,POST …/dry-runaGET /api/v1/entra/subjects/{id}vkládaly interní text chyby do své odpovědi500. Odmítnutý přechod stavu dál vrací409se zprávou (připravený sekundární údaj už probíhá, údaj je primární, není způsobilý nebo ještě neuplynulo jeho ověřovací okno); jakékoli jiné selhání nyní vrací500{"error": "Internal server error"}a příčina je v logu serveru. - Zkušební běh Entra neukazuje interní text chyby — Neúspěšná kontrola zkušebního běhu přihlašovacího údaje Entra (
POST /api/v1/entra/credentials/{id}/dry-run,PUT …/rotation-configsdry_run) nesla vchecksa v uloženémdry_run_last_resultinterní chybu, například chybu dešifrování konfigurace integrace. Neúspěšná kontrola nyní nese pevný důvod (credential not found or not readable,app registration not accessible,integration not found,integration configuration is invalid,cannot connect to Entra ID); příčina se zapíše do logu serveru. - Uložení konfigurace rotace Entra jako zkušební běh nic neuloží —
POST /api/v1/entra/credentials/{id}/rotation-config(dialog Configure Rotation) ignorovaldry_runa konfiguraci uložil, přestože Dry Run Mode dialogu slibuje jen kontroly preflight. Stejně jakoPUTnyní vrací{"dry_run": true, "preflight": {…}}s preflightem jen pro čtení, nic neuloží a zapíšeENTRA_DRY_RUN_PREFLIGHT. API klient, který posílaldry_run: truea spoléhal na uložení, musí příznak vynechat. - Dialog rotace Entra ukazuje výsledek zkušebního běhu — Se zapnutým Dry Run Mode se dialog Configure Rotation přihlašovacího údaje Entra zavřel, jako by konfiguraci uložil. Jeho tlačítko nyní zní Run Dry Run; dialog zůstane otevřený, ukáže výsledek preflightu (stav, zprávu a každou kontrolu) a nic neuloží. Přepínač platí jen se zapnutou automatickou rotací, kde se zobrazuje.
- Úprava konfigurace rotace Entra zachová akce po rotaci, které posílá —
PUT /api/v1/entra/credentials/{id}/rotation-config(používá homazevault_entra_rotation_configprovidera Terraform při každé úpravě) ignorovalpost_rotation_actionsv těle: nahradil je akcemi odvozenými ze starších polí, a jakmile byly nastavené pokročilé akce, odmítal každou úpravu. Poslané akce se nyní uloží (prázdný seznam je smaže); bez tohoto pole platí starší pole jako dosud. - Neplatná nastavení rotace Entra vracejí 400 —
POST /api/v1/entra/credentials/{id}/rotation-config(dialog rotace Entra) odpovídal na neplatnou akci po rotaci (nepodporovaný typ, chybějící pole, nepodporovanéon_failure) a na zapnutou rotaci bezpost_rotation_actions, když jsou nastavené pokročilé akce,500internal erroraPUT …/rotation-config(provider Terraform) odpovídal na tyto případy a nasoak_window_hoursmenší než 1500se zprávou. Nyní vracejí400se zprávou (napříkladpost_rotation_actions[0]: unsupported Entra post-rotation action type "ftp_upload"); nic se neuloží. - Změny aplikací Entra se auditují — Vytvoření, úprava a smazání registrace aplikace Entra, přidání přihlašovacího údaje, označení aplikace jako spravované MazeVaultem a synchronizace aplikací integrace z Entra měnily MazeVault i Entra bez záznamu v auditu. Nyní po změně zapisují
CREATE_ENTRA_APP,UPDATE_ENTRA_APP(změněná pole),DELETE_ENTRA_APP,ADD_ENTRA_CREDENTIAL(typ a zobrazovaný název; nikdy tajemství),MARK_ENTRA_APP_MANAGEDaSYNC_ENTRA_APPS; odmítnuté nebo neúspěšné volání a označení aplikace, která už spravovaná je, nic nezapisuje. - Přidání certifikátu k aplikaci Entra vrací 400 —
POST /api/v1/entra/apps/{id}/credentials(dialog Add Credential aplikace Entra, který nabízí Certificate) odpovídalo nacredential_typejiný nežclient_secretkódem500internal error, protože tam lze vytvořit jen tajný klíč klienta. Nyní vrací400unsupported credential type "certificate": only client_secret credentials can be addeddřív, než se cokoli načte nebo odešle do Entra. - Čtení aplikace Entra už nevrací interní text chyby —
GET /api/v1/entra/apps/{id}odpovídalo na každé selhání404s textem chyby, i na selhání databáze nebo konfiguraci integrace, kterou nešlo dešifrovat (decryption failed: …), aGET /api/v1/entra/{integrationId}/subjectsvkládalo text databáze do své odpovědi500. Chybějící aplikace dál vrací404 record not found; jakékoli jiné selhání nyní vrací500bez interního textu (čtení{"code": "INTERNAL_ERROR", "message": "internal error"}, subjekty{"error": "Internal server error"}) a příčina je v logu serveru. - Interval synchronizace kratší než jedna minuta se uloží jako jedna minuta — V Nastavení projektů → Nastavení synchronizace i v Nastavení projektu → Konfigurace synchronizace se interval kratší než 1 minuta (například záporné číslo) ukládal tak, jak byl zadán. Nyní se uloží jako 1 minuta, v souladu s nápovědou „minimum 1 minute“. Prázdné pole nebo 0 se nadále nahradí 5 minutami.
- Úprava výchozí šablony konfigurace zachová příznak Výchozí; odmítnuté uložení nechá průvodce otevřený — V Nastavení projektů → Šablony konfigurace uložení úpravy šablony označené jako výchozí už příznak výchozí nezruší (průvodce posílal
is_default: false) a uložení, které backend odmítne, zobrazí jeho zprávu uvnitř průvodce místo jeho zavření. - Navrhnout pravidla v editoru politiky pojmenování tajemství skutečně přidá navržená pravidla — V Nastavení projektů → Šablony konfigurace tlačítko Navrhnout pravidla (Suggest Rules) v editoru politiky pojmenování tajemství četlo pole odpovědi, které backend nikdy neposílá (
suggested_rulesmístosuggestions), a proto nikdy žádné pravidlo nepřidalo. Nyní přidá navržená pravidla, která politika ještě nemá, jako zapnutá varování, a při selhání požadavku zobrazí zprávu backendu. Pole Exact Values, Project Scope, Environment Scope a Subscription Scope v editoru politiky viditelnosti zdrojů přijímají při psaní čárku na konci, takže lze zadat druhou hodnotu. - Nesplněné podmínky failoveru vracejí 409, neplatné prostředí 400 —
POST /api/v1/admin/failover/{environment}/activate-dra…/failbackvracely500, když failover nešlo provést: chybí DR standby gateway, primární gateway je stále aktivní nebo primární gateway neexistuje. Tyto cesty jsou dokumentované API operátora pro DR a stav, který musí operátor nejdřív změnit, není chyba serveru. Nyní vracejí409se stejnou zprávou (napříkladprimary gateway … is still active for environment NPR; deactivate primary first to prevent split-brain), neplatné prostředí vrací400a selhání databáze500 Internal server error. - Cesty gateway už nevracejí text interních chyb — Administrační cesty gateway (
/api/v1/admin/gateways…,GET /api/v1/admin/failover/{environment},GET /api/v1/admin/gateway-health), cesty úloh pro gateway (/api/v1/gateway/tasks…,GET /api/v1/gateways/{id}/tasks), podpis CSR gateway (POST /api/v1/gateways/csr, které vraceloFailed to submit CSR: …) aGET /api/v1/gateways/{id}/healthvkládaly do odpovědi500text chyby služby nebo databáze. Nyní vracejí{"error": "Internal server error"}a příčina je v logu serveru. - Cesty agentů už nevracejí text interních chyb — Cesty životního cyklu agenta (
GET /api/v1/agents/{id}/lifecycle-impact,POST /api/v1/agents/{id}/unregister,POST /api/v1/agents/{id}/reregister,POST /api/v1/agents/{id}/uninstall) a žádosti agenta o heslo (POSTaGET /api/v1/agents/me/password-requests) vkládaly do odpovědi500text chyby služby nebo databáze, napříkladagent has no organization; cannot issue a replacement token. Nyní vracejí{"error": "Internal server error"}a příčina je v logu serveru. - Ignorování a převzetí výsledku discovery konfigurací opět funguje —
POST /api/v1/discovery-results/{id}/ignore(akce Ignorovat v Configuration Management → Discovered) aPOST /api/v1/discovery-results/{id}/adoptvracely při každém volání500s prázdným tělem: handlery četly ID uživatele ve špatném tvaru. Nyní výsledek ignorují nebo převezmou, vracejí{"status": "ignored"}nebo nový konfigurační soubor a zapisují záznamy audituIGNORE_CONFIG_DISCOVERY_RESULTaADOPT_CONFIG_DISCOVERY_RESULT. - Neexistující konfigurační soubory a výsledky discovery vracejí 404, převzatý výsledek 409 —
GET /api/v1/config-files/{id}aPOST /api/v1/discovery-results/{id}/adoptvracely pro neexistující ID500 Internal server erroraPOST /api/v1/discovery-results/{id}/ignorevracelo200 {"status": "ignored"}, aniž by cokoli změnilo. Nyní vracejí404(configuration file not found,discovery result not found) a převzetí již převzatého výsledku vrací místo500odpověď409 discovery result already adopted. - Cesty nasazení už nevracejí text interních chyb —
POST,GETaDELETE /api/v1/deployments…a anonymní instalační cestyGET /api/v1/deployments/{id}/scripta…/configvkládaly do odpovědi500text chyby služby nebo databáze (napříkladno trusted agent signing keys: install scripts cannot verify the agent binary). Nyní vracejí{"error": "Internal server error"}a příčina je v logu serveru; odpovědi400,404,410a422se nemění. - Bezpečnost: převzetí výsledku discovery konfigurací se posuzuje v cílovém projektu —
POST /api/v1/discovery-results/{id}/adoptvytvořilo konfigurační soubor v projektuproject_idz těla požadavku a sextract_secretsdo něj uložilo tajemství ze souboru, aniž by tento projekt ověřilo: kdokoli sconfig:writemohl zapisovat do libovolného projektu, i do projektu jiné organizace nebo neexistujícího. Volající nyní potřebujeconfig:writev tomto projektu (role omezená na projekt může převzít výsledek do něj, a jen do něj) a pro extrakci tajemstvísecret:writev prostředídevprojektu, kam se extrahovaná tajemství ukládají. Projekt, do kterého volající nesmí zapisovat, vrací403; neexistující projekt nebo projekt jiné organizace vrací404 Project not found. - Cesty pojmenovacích konvencí vracejí pro neznámou šablonu 404 a skrývají interní chyby —
POST /api/v1/naming-conventions/{id}/render,…/parse,…/provision,…/terraforma…/cross-validatevracely500s textem chyby služby nebo databáze (napříkladnaming convention template not found: record not found). Neznámá šablona nyní vrací404 {"error": "naming convention template not found"}, typ prostředku bez vzoru v šabloně nebo název prostředku bez kódu projektu400s touto zprávou a jakákoli jiná chyba{"error": "Internal server error"}s příčinou v logu serveru. - Seznamy synchronizačních událostí už nevracejí text interních chyb —
GET /api/v1/sync/events(replikační peer) aGET /api/v1/sync-dashboard/eventsvkládaly do odpovědi500text chyby databáze. Nyní vracejí{"error": "Internal server error"}a příčina je v logu serveru. - Bezpečnost: pojmenovací konvence se posuzují ve své organizaci, šablony konfigurace neznámé organizace vracejí 404 —
POST /api/v1/naming-conventions/{id}/render,…/parse,…/provision,…/terraforma…/cross-validatečetly šablonu libovolné organizace a…/provisionvytvořilo projekt v organizaciorganization_idz těla požadavku, aniž by ji ověřilo: držitelconfig:readneboconfig:writeomezený na jednu organizaci mohl číst pojmenovací konvence jiné organizace a vytvářet projekty v jiné organizaci. Organizace šablony a při provisioningu i organizace z těla nyní vyžadují oprávnění v této organizaci (jinak403); neznámá organizace v těle vrací404 Organization not found. Cesty šablon konfigurace…/organizations/{id}/config-templates…nyní pro neznámou organizaci také vracejí404 Organization not found(seznam vracel prázdný seznam). - Změny šablon konfigurace a projekty vytvořené provisioningem se auditují — Vytvoření, úprava a smazání šablony konfigurace (
…/organizations/{id}/config-templates…) nezapisovaly záznam auditu, stejně jako projekt vytvořený přesPOST /api/v1/naming-conventions/{id}/provision. Nyní zapisují záznamyCREATE_CONFIG_TEMPLATE,UPDATE_CONFIG_TEMPLATE(s poli, která úprava použila; úprava, která nepoužije žádné, nezapíše nic) aDELETE_CONFIG_TEMPLATEaCREATE_PROJECTs pojmenovací konvencí a prostředkem, ze kterých projekt vznikl. - Vytvoření šablony konfigurace ignoruje serverová pole v těle —
POST /api/v1/organizations/{id}/config-templatespřevzalo z těla požadavkuid,created_ataupdated_at, takže klient mohl zvolit ID nové šablony (a kolidovat s existující) nebo ji antedatovat. Server je nyní nastavuje sám;organization_idse již brala z cesty. Úprava již přijímala jen vlastní pole šablony. - Bezpečnost: náhled šablony konfigurace se posuzuje ve své organizaci —
POST /api/v1/organizations/{id}/config-templates/previewna rozdíl od ostatních cest šablon konfigurace posuzoval v organizaci z cesty jenorg:admin. Nyní nejprve vyžadujeconfig:writev této organizaci (jinak403) a neznámá organizace vrací404 {"error": "Organization not found"}(dříve403z kontrolyorg:adminnebo404 Project not found). - Bezpečnost: návrhy pravidel pojmenování se posuzují ve své organizaci —
GET /api/v1/organizations/{id}/secret-naming-policy/suggestanalyzuje klíče secretů organizace z cesty. Nyní i v handleru vyžadujeconfig:readv této organizaci (jinak403) a neznámá organizace vrací404 {"error": "Organization not found"}místo200bez návrhů. - Náhled šablony konfigurace už nevrací text selhaného volání Azure — Když Microsoft Graph nebo Azure Resource Manager odmítl volání
POST /api/v1/organizations/{id}/config-templates/preview, odpověď502nesla vdetailstext chyby tohoto volání včetně těla, které Azure vrátil. Nyní nese pevnédetails(Microsoft Graph API request failedneboAzure API request failed) stejně jako cesty pro vyhledávání v Azure a příčina se zapíše do serverového logu s ID požadavku. - Neznámá pravidla synchronizace, konflikty a projekty vracejí 404 —
PUTaDELETE /api/v1/projects/sync-rules/{ruleId},GET …/{ruleId}/conflicts,POST …/{ruleId}/sync,POST /api/v1/projects/sync-conflicts/{conflictId}/resolveaGET,PUTaDELETE /api/v1/projects/{id}/sync-settingsodpovídaly na neexistující id kódem500(record not found,Failed to get project, …),200 [],202 Sync triggerednebo204, aniž by cokoli změnily. Nyní vracejí404s{"error": "Sync rule not found"},"Sync conflict not found"nebo"Project not found". - Pravidlo synchronizace bez platného cílového prostředí vrací 400 —
POST /api/v1/projects/{id}/sync-rulesodpovídalo na pravidlo typu pull nebo bidirectional beztarget_environment(target_environment is required for pull sync rules) a natarget_environment, které není identifikátorem prostředí (invalid target_environment "…": …), kódem500. Obojí může volající opravit, takže nyní vrací400se stejnou zprávou. - Cesty pravidel synchronizace už nevracejí text interních chyb —
GETaPOST /api/v1/projects/{id}/sync-rules,PUTaDELETE /api/v1/projects/sync-rules/{ruleId},GET …/{ruleId}/conflictsaPOST /api/v1/projects/sync-conflicts/{conflictId}/resolvevkládaly do odpovědi500text selhaného volání databáze nebo poskytovatele (napříkladERROR: invalid input syntax for type booleanu hodnoty špatného typu). Nyní vracejí{"error": "Internal server error"}a příčina je v logu serveru; zprávy400u odmítnutého vstupu se nemění. - Vytvoření pravidla synchronizace ignoruje serverová pole v těle —
POST /api/v1/projects/{id}/sync-rulespřevzalo z tělacreated_at,updated_at,last_sync_atalast_sync_status, takže klient mohl pravidlo antedatovat nebo mu podstrčit smyšlenou neúspěšnou synchronizaci, kterou pak zobrazila stránka Synchronization Problems. Vytvoření je nyní nastavuje samo (aktuální čas, žádná poslední synchronizace); id už předtím generoval server. - Bezpečnost: nastavení synchronizace organizace se posuzuje ve své organizaci —
GETaPUT /api/v1/organizations/{id}/sync-settingsnyní posuzují organizaci ze své cesty stejně jako ostatní cesty organizace:org:read(u úpravyorg:admin) musí platit v této organizaci (jinak403) a neznámá organizace vrací404 {"error": "Organization not found"}; dříve čtení vracelo500 Failed to get organizationa úprava200 Sync settings updated, aniž by cokoli změnila. - Bezpečnost: potvrzení selhání synchronizace a zablokovaného seedu se posuzuje tam, kam patří —
POST /api/v1/dashboard/sync/failures/{ruleId}/acknowledgeaPOST /api/v1/dashboard/sync/blocked-seeds/{incidentId}/acknowledgese posuzovaly jen v prostředí požadavku: kdokoli ssync:writemohl potvrdit selhání a zablokované seedy všech projektů, i v prostředích, která jeho role nepokrývá, a role omezená na projekt nemohla potvrdit žádné. Nyní se posuzují v projektu a cílovém prostředí pravidla, resp. v organizaci, projektu a prostředí incidentu (jinak403), takže role omezená na projekt potvrdí ta ze svého projektu; neznámé pravidlo nebo incident vrací404(Sync rule not found,Incident not found; dříve500 Failed to acknowledge sync failure,400 Failed to acknowledge blocked seed). - Bezpečnost: pravidla synchronizace se posuzují ve svém cílovém prostředí —
PUTaDELETE /api/v1/projects/sync-rules/{ruleId},GET …/{ruleId}/conflicts,POST …/{ruleId}/syncaPOST /api/v1/projects/sync-conflicts/{conflictId}/resolvese posuzovaly v projektu pravidla, ale v prostředí požadavku, takže role omezená nadevmohla změnit, smazat, spustit pravidlo synchronizující doprodnebo vyřešit jeho konflikty a mohla pravidlo zdevpřesměrovat doprod. Nyní se posuzují i v cílovém prostředí pravidla; úprava, která nastavujetarget_environment, se posuzuje i v nové hodnotě (prázdná hodnota znamená všechna prostředí), aPOST /api/v1/projects/{id}/sync-rulesv prostředí, do kterého nové pravidlo míří (jinak403 insufficient permissions for environmenta nic se nezmění). Pravidlo bez cílového prostředí (pravidlo typu push) vyžaduje roli, která není omezená na některá prostředí. - Bezpečnost: pravidlo synchronizace se posuzuje v prostředí své integrace —
POST /api/v1/projects/{id}/sync-rulesaPUT /api/v1/projects/sync-rules/{ruleId}, pokud měníintegration_id, neposuzovaly integraci, přes kterou pravidlo synchronizuje: role omezená nadevmohla vytvořit pravidlo prodevnad integrací zproda pravidlo typu pull pak načte hodnoty tajemství z úložištěproddodev. Nyní navíc vyžadujíintegration:readv prostředí integrace (jinak403 insufficient permissions for environmenta nic se nezmění). - Bezpečnost: každá změna a spuštění pravidla synchronizace se posuzuje v prostředí jeho integrace — Existující pravidlo pro
devnad integrací zprod(vytvořené rolí oprávněnou vprod) se při úpravě, smazání, spuštění a vyřešení jeho konfliktu posuzovalo jen v cílovém prostředí. Role omezená nadevjej tak mohla přepnout na push, a zapsat tak hodnoty zdevdo úložištěprod.PUTaDELETE /api/v1/projects/sync-rules/{ruleId},POST …/sync-rules/{ruleId}/syncaPOST /api/v1/projects/sync-conflicts/{conflictId}/resolvenyní navíc vyžadujíintegration:readv prostředí integrace pravidla (jinak403a nic se nezmění). - Změny nastavení synchronizace a pravidel synchronizace se auditují —
PUT /api/v1/organizations/{id}/sync-settings,PUTaDELETE /api/v1/projects/{id}/sync-settings,POST /api/v1/projects/{id}/sync-rules,PUTaDELETE /api/v1/projects/sync-rules/{ruleId}aPOST …/{ruleId}/syncnezapisovaly žádný auditní záznam. Nyní zapisujíUPDATE_ORG_SYNC_SETTINGS(entitaORGANIZATION, nové hodnoty),UPDATE_PROJECT_SYNC_SETTINGS(entitaPROJECT, změněná pole),RESET_PROJECT_SYNC_SETTINGS,CREATE_SYNC_RULE(entitaSYNC_RULE, název, směr a cílové prostředí),UPDATE_SYNC_RULE(pole, která úprava použije; žádná, žádný záznam),DELETE_SYNC_RULE(název) aTRIGGER_SYNC_RULE; odmítnuté volání nezapíše nic. - Bezpečnost: seznam a mazání nasazení posuzují organizaci —
GET /api/v1/deployments?organization_id=aDELETE /api/v1/deployments/{id}?organization_id=nyní posuzují uvedenou organizaci stejně jako ostatní cesty organizací: jiná organizace než volajícího vyžaduje oprávnění k nasazením v ní (jinak403 insufficient permissions for organization) a neexistující organizace vrací404 Organization not foundmísto prázdného seznamu nebo404 deployment not found. - Bezpečnost: vytvoření nasazení posuzuje organizaci —
POST /api/v1/deployments/nyní posuzujeorganization_idz těla stejně jako seznam a mazání: jiná organizace než volajícího vyžadujedeployment:writev ní (403) a neexistující organizace vrací404 Organization not foundmísto500. Bootstrap token nasazení zapisuje agenty do této organizace, takže už jej nelze vydat pro organizaci, kterou volající nesmí spravovat. - Bezpečnost: politiku viditelnosti prostředků nelze bez org:admin převést —
PUT /api/v1/organizations/{id}/config-templates/{templateId}kontrolovalorg:adminjen pro typ, který by šablona měla po úpravě. Držitelconfig:writebezorg:admintak mohl poslat{"template_type": "parser", …}pro existující politiku viditelnosti prostředků, a vypnout tak pravidla viditelnosti organizace. Úprava nyní vyžadujeorg:admin, je-li politikou viditelnosti stávající šablona nebo nový typ (jinak403a nic se nezmění), stejně jako už mazání. - Licence organizace vrací 404 pro neexistující organizaci —
GET /api/v1/organizations/{id}/licensepro neexistující organizaci vracelo500(nebo, byla-li nainstalována licence backendu, tuto licenci) aPUTověřilo klíč a odpovědělo, jako by byl uložen. Obě cesty nyní vracejí404 Organization not founda posuzují organizaci z cesty: role omezená na jinou organizaci dostane403. - Neznámé gatewaye vracejí 404; selhání licence a politiky agentů neukazují interní text —
POST /api/v1/admin/gateways/{id}/activatea…/deactivatevracely pro neznámou gatewayi500; nyní vracejí404 gateway <id> not foundstejně jako čtení gatewaye.PUT /api/v1/organizations/{id}/licensevracel při selhání uložení klíče text chyby databáze jako400; neplatný klíč dál vrací400s důvodem, selhání uložení nyní obecnou500. Odpovědi500uPOST /api/v1/entra/credentials/{id}/verify-secondary, uložení a čtení politiky verzí agentů a kanálu aktualizací agenta nyní znějíInternal server errora příčinu zapisují do logu serveru. - Nahrání systémového certifikátu a změny licence se auditují — Nahrání systémového TLS certifikátu (
POST /api/v1/system/certificate), změna licenčního klíče organizace (PUT /api/v1/organizations/{id}/license) a žádost o obnovení licence (POST /api/v1/license/renew) měnily systém bez záznamu v auditu. Nyní zapisujísystem_certificate.uploaded(sériové číslo, subjekt a platnost certifikátu),license.key_updated(typ licence; samotný klíč se nikdy nezapisuje) alicense.renewal_requested(výsledný stav). - Systémové, licenční a zdravotní cesty už nevracejí text interních chyb; certifikát, který nepatří ke klíči, je 400 —
GET /api/v1/health/databasepři selhání kontroly vracelo v odpovědi503text chyby (nyní vrací{"error": "Database health check failed"}) aGET /api/v1/license/status,POST /api/v1/license/renew,GET /api/v1/organizations/{id}/licenseaGET /api/v1/system/updates/checkvkládaly do odpovědi500text chyby služby nebo databáze; nyní vracejíInternal server errora příčina je v logu serveru. Nahrání systémového certifikátu (POST /api/v1/system/certificate), jehož privátní klíč k certifikátu nepatří, vracelo500; nyní vrací400se stejnou zprávou (Failed to apply certificate: invalid certificate/key pair: …) a selhání uložení nebo zápisu certifikátu vrací500 Internal server error. - Interval a plán rotace SSH se ukládají — Dialog rotace SSH posílal požadavky na
/api/ssh/rotation…, které neexistuje, takže plán rotace SSH nešlo vytvořit ani změnit, a úprava intervalu na kartě SSH Rotation volalaPUT /ssh/rotation-configs/{keyPairId}, které také neexistuje. Dialog nyní používá/api/v1/ssh/rotationa interval se ukládá přesPUT /api/v1/ssh/rotation/{id}(interval_days,status), má-li pár klíčů konfiguraci rotace, jinak přesPOST /api/v1/ssh/rotation(key_pair_id,interval_days). - Karta Identities v Access Control vytváří funkční identity služeb — Karta Identities v Access Control posílala
name,client_idarole, což backend vždy odmítl (display_nameaowner_emailjsou povinné), a zobrazovala pole, která identita služby nemá. Karta nyní zobrazuje stejný seznam a formulář jako stránka Service Identities a vyžadujeservice_identity:read. - Uložení rotační konfigurace tajného klíče se auditují —
PUT /api/v1/secrets/{id}/rotation-configměnilo rotaci tajného klíče (zapnutí, interval, plán, e-maily pro upozornění, cílové prostředí), aniž zanechalo záznam v auditu. Nyní zapisujerotation_config_updateds novým nastavením; úprava integrace agenta zaznamenává uložené nastavení. - Rotační cesty tajného klíče už nevracejí databázové chyby a neexistující objekty jsou 404 — Rotační konfigurace, propojení, cíle nasazení a seznam integrací projektu při selhání databáze vracely text její chyby a neexistující tajný klíč, integrace nebo integrace agenta končily jako 500 (
PUT /secrets/{id}/rotation-config,POST /secrets/{id}/linksa/rotation/targetsselhaly na cizím klíči a vrátily jeho SQL text;PUT /agent-integrations/{id}vracelo 500). Nyní vracejí pevné tělo „Internal server error“, 404 pro neexistující tajný klíč, integraci či integraci agenta a 409, pokud je tajný klíč propojen se stejnou integrací dvakrát. - Neplatné prostředí při úpravě integrace agenta je 400 —
PUT /api/v1/agent-integrations/{id}s prostředím, které není platný slug, vracelo 500 „An unexpected error occurred“. Nyní vrací 400 s důvodem. - Účty ADCS vytvořené ve webovém rozhraní umí vydávat — Webové rozhraní ukládá adresu pro vydávání, režim vydávání, konfigurační řetězec CA, agenta, adresu služby, Verify SSL a časový limit účtu Microsoft ADCS spolu s přihlašovacími údaji, ale poskytovatel ADCS je četl jen z nastavení účtu, takže takový účet vydával bez adresy a každé vydání, načtení certifikátu CA i synchronizace šablon selhaly. Poskytovatel teď tyto hodnoty bere z přihlašovacích údajů všude, kde je nastavení nemá (hodnota v nastavení má dál přednost); stávající účty fungují bez úprav.
- Změny rotační konfigurace a neúspěšná obnova zálohy či rotace systémového klíče se auditují —
PUT /rotation/configs/{id}měnil plán, interval a prostředí rotace tajného klíče bez záznamu v auditu. Nyní zapisujerotation_config_updateds nastavenými hodnotami. Obnova zálohy rotace, která selže poté, co začala, zapisujeROTATION_BACKUP_RESTOREsoutcome=failed, a rotace systémového klíče, která selže poté, co ji propustila brána publikace, zapisujeROTATE_ENCRYPTION_KEYsoutcome=failed(typ a účel, nikdy klíč). Pole, která může požadavek nastavit na rotační konfiguraci, jsou explicitní seznam (povoleno, interval, cílové prostředí). - Rotační cesty odpovídají na neznámé objekty 404 a nikdy neukazují chyby databáze —
POST /rotation/configs/{id}/preflightpro neznámou konfiguraci odpovídal500 record not found,POST /rotation/configspro neznámý tajný klíč selhal na cizím klíči (500 s textem databáze),GET /rotation/executions/{id}odpovídal 404 na jakékoli selhání včetně nefunkční databáze a cesty rotací, záloh a systémových klíčů dávaly do odpovědí 500 text selhávající služby nebo databáze. Pro neznámou konfiguraci, tajný klíč nebo zálohu nyní odpovídají 404 a každá 500 nese jenInternal server error(příčina je v logu serveru).POST /admin/rotation/rotates typem klíče, který server nezná, odpovídá400 unsupported key typemísto 500. - Spouštění rotace nikdy neukazuje chyby databáze ani služeb — Selhané spuštění rotace (
/rotation/configs/{id}/trigger,/rotation/resources/{kind}/{id}/trigger,/secrets/{id}/rotate,/certificates/{id}/rotation/trigger) vkládalo do odpovědi500text selhané služby, poskytovatele nebo databáze (napříkladFailed to trigger rotation: …,Sync failed: …). Každá odpověď500nyní nese jenInternal server error(příčina je v logu serveru). Cíl nasazení, který nelze přečíst, vrací500místo404a neznámý Entra credential vrací404 Entra credential not foundmísto textu databáze. - Selhané spuštění rotace se audituje — Ruční spuštění rotace, které začalo a pak selhalo (
500), nezanechalo žádný auditní záznam, přestože poskytovatel, agent nebo gateway už mohli něco provést. Nyní zapisuje svůj obvyklý záznam (rotation_triggered, u cíle nasazenírotation_deployment_sync_triggered) soutcome=faileda bez textu chyby. Spuštění, které odmítne publish gate, nebo odmítnuté jako neznámé či konfliktní, se jako spuštění neaudituje. - Obnovená rotace přežije zavřenou záložku prohlížeče —
POST /rotation/executions/{id}/resumespouštěl zbývající kroky na spojení požadavku: když klient odešel (zavřená záložka, timeout proxy), kroky se zastavily uprostřed rotace a zámek běhu nešlo uvolnit, takže každé další obnovení vracelo až 10 minut409„already in progress“. Obnovení nyní doběhne do konce a uvolní svůj zámek bez ohledu na spojení. - Seznam běhů rotace ukazuje nejnovější běhy organizace —
GET /rotation/executionsnačetl 100 nejnovějších běhů celé instalace a teprve pak ponechal běhy organizace volajícího, takže organizace, jejíž běhy nepatřily mezi 100 nejnovějších celkově, viděla zkrácený nebo prázdný seznam. Organizace se nyní filtruje před limitem: seznam obsahuje 100 nejnovějších běhů organizace (a z nich čitelná prostředí). - Podepsání SSH klíče bez uživatele odpovídá 401 —
POST /api/v1/ssh/signpro principála bez uživatele odpovídal500(vydavatel certifikátu je cizí klíč na uživatele). Nově odpovídá401 authentication requiredstejně jako create-and-deploy. - Export soukromého SSH klíče vrací PEM a rotace SSH klíče zachovává typ klíče — Export RSA klíčového páru vytvořeného přes create-and-deploy vracel surová binární data místo PEM soukromého klíče; každý export nově vrací PEM (starší uložené klíče se převádějí při čtení, nové se ukládají jako PEM). Rotace SSH klíčového páru vždy generovala RSA 4096; nově zachovává typ (RSA, Ed25519 nebo ECDSA) i velikost klíčového páru.
- Šablony rotací fungují s API tokeny — Trasy šablon rotací (
/api/v1/rotation/templates) četly organizaci jen z UI session, takže každý API token (Terraform, CLI, SDK) dostal403 record not found. Token nově funguje ve své organizaci stejně jako session a šablony jiné organizace zůstávají404. - Rotation Problems zobrazují incident a informaci o nahrazení — Pole
incident_id,incident_statusasuperseded_atvGET /api/v1/dashboard/rotation/failuresse nikdy nevyplňovala: dotaz používal neplatné SQL a jeho chyba se zahazovala. Nově obsahují navázaný incident selhané rotace a dokončení pozdější úspěšné rotace a selhání dotazu odpoví500místo tichého vynechání. - Podepsání SSH klíče funguje a vytvoření s nasazením pro Ed25519 i import Ed25519 klíče ve formátu OpenSSH už nepadá —
POST /api/v1/ssh/signvždy odpovídal500(certifikát se ukládal bez vydavatele),POST /api/v1/ssh/keys/create-and-deployodpovídal500pro nabízený typ Ed25519 aPOST /api/v1/ssh/keys/importodmítal klíč Ed25519 ve formátu OpenSSH, který zapisujessh-keygen. Všechny tři nově uspějí; nečitelný veřejný klíč odpovídá400, neznámý projekt404a každé podepsání se zapisuje do auditu (SIGN_SSH_KEY). - Trasy SSH klíčů už nevracejí databázový text a pro neznámý nebo duplicitní vstup odpovídají 404/409 — Vytvoření klíčového páru bez
project_idnebo pro neznámý projekt, import klíče, jehož otisk už existuje, nasazení autorizovaného klíče na neznámého agenta a každé další selhání čtení či zápisu tras SSH klíčů a autorizovaných klíčů odpovídalo500(nebo400) s textem databázové chyby. Nově odpovídají400(chybějícíproject_id, nepodporovaný typ klíče),404(neznámý projekt, uživatel nebo agent) a409(klíč už je naimportován); ostatní selhání odpovídají500 Internal server errora jsou zalogována. - Export neexistujícího soukromého SSH klíče odpovídá 404 —
POST /api/v1/ssh/keys/{id}/exportodpovídal pro neexistující id (i pro volajícího bezssh:admin)500s databázovou chybou. Nově odpovídá404a403; odpověď zůstává necachovatelná a jediný auditní záznamssh_key.exporteviduje výsledek a nikdy samotný klíč. - Šablony rotace: vytvoření z konzole už nekončí chybou — Uložení nové šablony rotace s poli, která formulář odesílá (název, popis, číselné hodnoty politiky, příznak výchozí), končilo odpovědí
500, protože seznamy upozornění a kroků workflow se ukládaly jako null. Nově se ukládají prázdné a šablona se vytvoří (201). - Žádost o certifikát: pole Stát/Kraj se nově použije — Hodnota zadaná do pole State/Province ve formuláři žádosti se odesílala jako
province, které backend ignoruje, takže se nikdy nedostala do subjektu certifikátu. Nově se odesílá jakostatea objeví se v požadovaném subjektu. - OCSP odpovídá i pro nezneplatněné certifikáty — Responder hledal vydávající CA ve sloupci, který neexistuje, takže každé sériové číslo bez záznamu o zneplatnění dostalo HTTP 500 a odpovídalo se jen na zneplatněné certifikáty. Certifikát vydaný CA nyní dostane stav
good; sériové číslo, které CA nikdy nevydala, stále vracírevoked(certificateHold). - ACME klienti mohou opět posílat POST na ACME server — Kontrola CSRF odmítala každý ACME POST (
new-account,new-order,finalize, ...) s 403CSRF token mismatch, protože ACME klienti jako cert-manager neposílají prohlížečový token./api/acme/je nyní vyňato, stejně jako/api/v1/scep/; každý ACME požadavek je dále ověřen podpisem JWS. - Inicializace nebo smazání interní CA již nemůže zablokovat server — Zámek operací s interní CA držel pro každý čekající požadavek jedno databázové spojení, zatímco držitel zámku potřeboval další, takže dostatek souběžných volání vyčerpal pool spojení a zablokoval všechny požadavky. Pár klíčů se nyní generuje před zámkem a vše pod zámkem běží v jedné transakci; souběžná volání pro jednu organizaci stále vytvoří právě jednu CA (ostatní vrátí 409).
- Zablokované HSM zařízení se testuje jednou, ne při každém cyklu — Monitor zdraví vzdal sondu, která neodpověděla do 30 sekund, a označil zařízení jako nedostupné, ale další cyklus zahájil další sondu téhož zařízení, zatímco první stále visela; zařízení, které zůstalo zablokované, tak každou minutu přidalo vlákno (u PKCS#11 modulu vlákno operačního systému), dokud serveru nedošla vlákna. Zařízení, jehož předchozí sonda neskončila, se přeskočí a zůstane nedostupné; znovu se testuje, jakmile volání skončí.
- Interní CA: neznámá organizace vrací 404, parametry jsou omezené, souběžná inicializace vytvoří jednu CA — Čtení interní CA neznámé organizace vracelo
204a její inicializace500poté, co vygenerovala CA, na kterou nic neodkazovalo; obojí nyní vrací404a nic nevytváří.validity_yearsnad 100, RSAkey_sizenad 8192 (server byl dlouho zaneprázdněn generováním klíče) acommon_namedelší než 255 znaků vrací400. Inicializace, oprava (initialize-ca) a smazání interní CA jedné organizace probíhají postupně, takže dvě současné inicializace už nevytvoří dvě kořenové CA (jedna vrátí201, druhá409) a smazání se neopakuje. - ACME EAB přihlašovací údaje: chyby vracejí 400 nebo 404 místo 500 a vytvoření i zneplatnění se auditují — Vytvoření údajů bez
project_id(400), s neznámým projektem či šablonou (404) nebo s popiskem delším než 255 znaků (400) vracelo500s textem databázové chyby; každá chyba nyní vrací pevný text bez databáze. Vytvoření i zneplatnění zapisuje auditní záznamyCREATE_EAB_CREDENTIALaREVOKE_EAB_CREDENTIAL(jednorázový HMAC klíč v nich není). Zneplatnění již zneplatněných údajů vrací409místo200. - Navazující úpravy certifikátů: kontrola stavu používá nastavení účtu, přepínače TLS vyžadují přihlašovací údaje — Plánovaná kontrola stavu externě vydaných certifikátů nově čte nastavení účtu stejně jako synchronizace (dříve použila výchozí hodnoty poskytovatele). Změna
verify_ssl,insecure_skip_tlsnebotls_configúčtu CA vyžaduje opětovné zadání přihlašovacích údajů, stejně jako změna URL. Převzetí objeveného certifikátu, který odpovídá více spravovaným, nově preferuje i certifikát bez projektu ve stejném prostředí. Výpis zařízení HSM při chybě vrací prostou500bez textu chyby a s identifikátorem požadavku v logu. - Nedostupné zařízení HSM už nezastaví ani neshodí kontrolu stavu — Kontrola stavu procházela zařízení postupně bez časového limitu a bez ochrany proti panice: zařízení, které neodpovědělo (zablokované volání PKCS#11), zastavilo kontrolu všech ostatních, a provider, který zpanikařil, shodil celý server. Každá kontrola má nově limit 30 sekund a vlastní obnovu; zařízení, které vyprší nebo zpanikaří, se označí jako nezdravé a kontrola pokračuje.
- Vstupy účtu CA jsou omezené a duplicitní jméno vrací 409 — Interval synchronizace účtu CA je omezen na rok (525600 minut) a předstih obnovy na 3650 dní: větší hodnoty přetékaly čas příští synchronizace, takže plánovač synchronizoval při každém taktu. Zobrazované jméno delší než 255 znaků vrací
400a připojení nebo přejmenování účtu na jméno, které už používá účet téže organizace a téhož typu poskytovatele, vrací409; obojí dříve vracelo500. - Synchronizace účtu CA používá jeho nastavení — Synchronizace účtu CA (tlačítko Synchronizovat i plánovač) ignorovala nastavení účtu, takže účet SSLmarket s jinou
base_urlse vždy synchronizoval proti produkčnímu API: tlačítko vracelo500a účet se označil jako chybný. Synchronizace nyní inicializuje poskytovatele stejným nastavením jako objednávání a synchronizace produktů. - Změny zařízení HSM a politik obnovy se auditují na volajícího — Vytvoření, úprava a smazání zařízení HSM se zapisovalo pod systémového uživatele bez adresy volajícího a změny politik obnovy se nezapisovaly vůbec. Každá změna je nově záznam auditu uživatele, který ji provedl, s adresou (konfigurace zařízení se v něm nikdy neobjeví).
- Chyby politik obnovy neobsahují text databáze — Vytvoření politiky obnovy pro neexistující organizaci vrací
404(dříve500s cizím klíčem databáze); selhání výpisu, vytvoření, úpravy a smazání vrací obecné500. - Test zařízení HSM nevrací text chyby poskytovatele — Tlačítko Test vracelo v
errorsurový text chyby poskytovatele (s adresou, kterou server volal, a tím, co odpovědělo). Nyní vrací pevný text (zařízení nelze zkontaktovat nebo má neplatnou konfiguraci; zařízení neodpovědělo na výpis klíčů) a podrobnosti jdou do logu serveru. - Odmítnutí zařízení HSM jsou srozumitelná místo textu databáze — Vytvoření nebo přejmenování zařízení HSM na jméno, které už v organizaci existuje, vrací
409(dříve400s názvem omezení databáze), vytvoření pro neexistující organizaci404a neočekávané selhání500bez textu. Smazaná zařízení si jméno ponechávají. - Zařízení HSM typu PKCS#11 s nenačitelným modulem už nezhroutí test ani kontrolu stavu — Test zařízení PKCS#11, jehož knihovnu modulu nelze načíst, dereferencoval nil ukazatel: tlačítko Test vracelo
500a kontrola stavu na pozadí (která se z paniky neobnovuje) mohla zastavit celý server. Zařízení se nyní hlásí jako nedostupné. - Úprava prostředí nebo funkčních skupin zařízení HSM už nepadá —
PUT /api/v1/organizations/{id}/hsm-devices/{deviceId}senvironmentsneboapplies_to(tato pole posílá Go SDK) vracel400s textem databáze a nic neuložil. Seznamy se nyní ukládají, prázdný seznam znamená vše aapplies_tose ověřuje jako při vytvoření (400„invalid scope tag“). - Chyby vstupu účtu CA vracejí 400 nebo 404 místo 500 — Připojení nebo úprava účtu CA s přihlašovacími údaji či nastavením, které CA odmítne, s nepodporovaným typem poskytovatele nebo neplatným
ca_authority_idvracely500„Failed to connect account“ nebo „Failed to update account“; stejně dopadlo připojení s neplatným ID organizace v cestě aGET /api/v1/ca-providers/{type}/schemapro neznámý typ poskytovatele. Nově vracejí400(„The connection to the CA failed: check the credentials and settings“, „unsupported provider type: …“, „Invalid ca_authority_id“, „Invalid organization ID“) a404(„CA provider not found“). Odpověď CA není nikdy součástí odpovědi (může pocházet z libovolného hostitele, na který nastavení ukazuje) a do logu se zapisuje bez hodnot přihlašovacích údajů. - Synchronizace produktů účtu CA už nehlásí chybu —
POST /api/v1/organizations/{id}/ca-accounts/{accountId}/products/sync(i starší/api/v1/ca-accounts/{id}/sync) vracelo500u každého poskytovatele, který uvádí velikosti klíčů nebo algoritmy, a stejně selhalo i čtení uložených produktů: povolené velikosti klíčů a algoritmy se do polí v PostgreSQL ukládaly jako text JSON. Nově se ukládají a čtou jako pole, takže se katalog produktů načte a formulář žádosti produkty nabídne. - Import certifikátů už neposílá interní text chyb a špatný privátní klíč vrací 400 — Routy importu (
POST /api/v1/certificates/import,/import/bulk,/import/file,/import/preview-multi) vracely500se surovým textem chyby serveru (například hláškou databázového omezení) a položky hromadného importu nebo importu souboru jej nesly v odpovědi200. Nově vracejí500s obecnou zprávou (příčina jde do logu serveru s ID požadavku) a takovou položku označíFailed to import certificate. Privátní klíč, který neodpovídá certifikátu, soubor obsahující jen klíč a certifikát, který nepatří k cílovému, jsou chyby vstupu a vracejí400s důvodem místo500. - Odeslání žádosti o certifikát se vstupem, který server odmítne, vrací 400 nebo 404 —
POST /api/v1/certificates/csrvracelo500(„Failed to submit CSR“) pro CSR, které nelze přečíst, má neplatný podpis nebo porušuje pravidla šablony pro velikost klíče či SAN, pro nepodporovanýcsr_source_mode, neexistující šablonu a neexistující přepsání CA účtu. Nově vrací400s důvodem u prvních tří a404pro neexistující šablonu nebo CA účet; stejné texty se objeví i u projektové routy pro CSR. - Rozhodnutí o neexistující nebo už rozhodnuté žádosti o certifikát vrací 404 nebo 409 — Schválení, zamítnutí nebo archivace žádosti o podpis certifikátu (
POST /api/v1/certificates/csr/{id}/approve,/reject,/archive) vracely500, pokud žádost ve vaší organizaci neexistovala, už byla schválena, zamítnuta nebo archivována (například ze zastaralého seznamu), nebo ji ve stejnou chvíli rozhodl někdo jiný. Nově vracejí404pro neexistující žádost a409pro žádost, která už není čekající (nebo je již archivovaná), nic se nezmění a dva schvalovatelé rozhodující o téže žádosti současně vydají certifikát jen jednou. - Import privátního klíče objeveného certifikátu už neukazuje databázové chyby —
POST /api/v1/discovered-certificates/{id}/import-keyvracel400se surovým textem chyby selhávajícího čtení nebo zápisu do databáze (například text SQL chyby) stejně jako u nečitelného nebo neodpovídajícího klíče. Selhání čtení nebo uložení certifikátu či zápisu do auditního logu nově vrací500s obecnýmInternal server errora příčina jde do logu serveru; chyby samotného klíče (není PEM klíč, špatné heslo, klíč neodpovídá certifikátu) dál vracejí400s důvodem. - Změny objevených certifikátů se auditují — Přiřazení, adopce, ignorování a archivace objeveného certifikátu, import jeho privátního klíče a hromadné přiřazení, adopce a ignorování (
/api/v1/discovered-certificates/...) zapisovaly jen do certifikátového auditu služby, takže auditní log o nich nic neukazoval. Každé úspěšné volání nově zapíše i jeden auditní záznam (discovered_certificate_assigned,_adopted,_ignored,_archived,_key_imported,discovered_certificates_bulk_assigned,_bulk_adopted,_bulk_ignored) s uživatelem, certifikátem a u přiřazení nebo adopce i projektem. Odmítnuté volání, neznámý certifikát a hromadná adopce, která nic nepřijala, nezapíší nic, a import klíče nikdy nezaznamenává klíč ani jeho heslo. - Obnovení a trvalé smazání odmítnou archivovaný objevený certifikát nebo žádost o certifikát, který je neznámý nebo není archivován — Obnovení nebo trvalé smazání archivovaného objeveného certifikátu či žádosti o certifikát (
/api/v1/archived/discovered-certificates/{id}/restore,/permanenta/api/v1/archived/certificate-requests/{id}/restore,/permanent), který neexistuje nebo byl mezitím obnoven, vracelo500s textem chyby. Nově vrací404(record not found) pro neznámý řádek a409(discovered certificate is not archived,certificate request is not archived) pro řádek, který není archivován, a nezapíše záznam do auditu. Trvalé smazání nově řádek zamkne a v transakci znovu ověří, takže obnovení, které se potvrdí dřív, vyhraje a řádek se nesmaže; ostatní selhání vrací obecnéInternal server error. - Neznámé a zastaralé objevené certifikáty vracejí 404 a 409 místo 500 — Přiřazení, ignorování, archivace nebo import klíče u objeveného certifikátu, který už neexistuje nebo byl mezitím archivován (
/api/v1/discovered-certificates/{id}/assign,/ignore,/archive,/import-key), vracely500 record not found, stejně tak ignorování už spravovaného certifikátu (invalid state transition). Nově vracejí404 Certificate not found, nebo409, když stav změnu nedovoluje nebo je certifikát už archivován. Hromadné přiřazení a ignorování nejdřív zkontrolují všechny certifikáty, takže požadavek s neznámým nebo spravovaným certifikátem nezmění žádný z nich (dříve se změnily ty uvedené před ním). - Routy objevených certifikátů už neposílají interní text chyby — Když selhala databáze, přiřazení, ignorování nebo archivace objeveného certifikátu (
POST /api/v1/discovered-certificates/{id}/assign,/ignore,/archive), hromadné přiřazení a ignorování, statistiky objevování a seznam archivovaných certifikátů vracely500se surovým textem chyby služby. Nově vracejí500s obecnýmInternal server errora příčina jde do logu serveru s ID požadavku. - Režim orchestrátoru vrací 409 pro zápisy, které nelze provést — Import secretů projektu (
POST /api/v1/projects/{id}/secrets/import) v režimu orchestrátoru a uložení hodnoty přesPUT /api/v2/secrets/{id}neboPOST /api/v2/secrets/migrateu secretunames_onlyvracely500. Nyní vracejí409s důvodem (například „import is not supported in Orchestrator Mode“) a migrace odmítne dřív, než změní jakýkoli secret, stejně jako už rollback a kopírování. - Úprava poskytovatele identity mohla přepsat uložené tajemství —
PUT /api/v1/identity-providers/{id}ukládal tajná pole konfigurace tak, jak přišla. Předchozí konzole posílala zpět zobrazenou masku****, která nahradila skutečnýclient_secretEntra ID a rozbila přihlášení, a úprava, která tajemství vynechala nebo nechala prázdné, je smazala. Úprava nyní ponechá uloženýclient_secret,bind_password,api_tokenatoken, pokud je nová hodnota prázdná, chybí, je__MASKED__nebo začíná****; jiná hodnota jej nahradí. U poskytovatele, u kterého už byla maska uložena, je třeba tajemství zadat znovu. - Akce v archivu nad neexistující nebo aktivní položkou končily interní chybou — Obnovení nebo trvalé smazání uživatele, který už neexistuje (například jej mezitím odstranil jiný administrátor), a trvalé smazání uživatele, který není smazaný, vracely
500naPOST /api/v1/archived/users/{id}/restoreaDELETE /api/v1/archived/users/{id}/permanent; totéž platilo pro archivaci, obnovení a trvalé smazání neexistujícího projektu (/api/v1/projects/{id}/archive,/restore,/permanent), kde obnovení neexistujícího projektu dokonce vracelo200. Nyní vrací404(record not found) pro neexistujícího uživatele nebo projekt a409pro aktivního uživatele, se stejnými texty chyb. - Vytvoření uživatele s neplatným heslem nebo již existujícím e-mailem končilo interní chybou —
POST /api/v1/rbac/usersvracel500s obecnou zprávou, když heslo nesplňovalo politiku hesel nebo uživatel se stejným e-mailem již existoval, takže stránka Řízení přístupu mohla zobrazit jen obecné selhání. Nyní vrací400s textem politiky (napříkladpassword must be at least 8 characters long) a409(user already exists). - Politiky schvalování nešlo vytvořit bez podmínek —
POST /api/v1/projects/{id}/approval-policiesvracel500(cannot unmarshal array into Go value of type map[string]interface {}), kdykoli požadavek neobsahovalconditions, což posílá Go SDK i resourceapproval_policyTerraform provideru, takže každé takové vytvoření selhalo. Chybějícíconditionsse nyní nastaví na prázdný objekt a politika se vytvoří. - Schválení nebo zamítnutí již vyřízené žádosti o schválení končilo interní chybou —
POST /api/v1/projects/approval-requests/{requestId}/approvea/rejectvracely500, když žádost už nebyla ve stavu čekající, když uživatel u žádosti vyžadující více schvalovatelů už hlasoval (tlačítko Schválit zůstává v takovém případě viditelné), nebo když žádost neexistovala. Nyní vrací409(request is not pending,already voted) a404(record not found) se stejnými texty chyb. - Štítky projektu a webhooky notifikací nešly uložit —
PUT /api/v1/projects/{id}/settingsvracel500s textem databázové chyby, kdykolitagsnebonotification_webhooksobsahovaly alespoň jednu položku, protože se seznamy zapisovaly ve špatném formátu pro sloupce typu JSON (prázdný seznam se ukládal jako objekt místo pole). Oba seznamy se nyní ukládají jako pole JSON aGET /api/v1/projects/{id}/settingsje vrací beze změny. Projekt, u kterého se prázdný seznam už uložil ve starém formátu, nešlo dále otevřít a jeho přítomnost rozbíjela seznam projektů v celé instanci; migrace000211takové projekty při aktualizaci opraví. - Změna stavu prostředí končila interní chybou —
PATCH /api/v1/projects/{id}/environments/{env}/statevracel500pro každé prostředí, které má nastavení, protože změna se zapisovala pro neexistujícího (nil) uživatele, což porušuje cizí klíčlast_modified_by. Změna se nyní zapisuje na přihlášeného uživatele (i do auditního logu aktualizace nastavení prostředí), takže zapnutí, vypnutí nebo označení prostředí jako neexistujícího funguje. Volání autentizovaná tokenem service identity nadále selhávají, protoželast_modified_byodkazuje pouze na uživatele. - Compose kit nenastartoval: databáze bez TLS, dokumentace bez HTTPS — Při výchozím
MAZEVAULT_ENV=productionbackend odmítá připojení k databázi bez TLS, ale PostgreSQL dodávaný s kitem běžel bez TLS (sslmode=disable), takže backend se nikdy nestal zdravým; kontejner dokumentace naslouchal jen na portu 80, zatímco kit publikoval a kontroloval HTTPS. PostgreSQL v kitu nyní používá TLS s certifikátem z volumecertsa backend i OCSP responder se připojují ssslmode=require; kontejner dokumentace obsluhuje HTTPS na portu dokumentace kitu (DOCS_PORT, výchozí 8088), je-li připojen certifikát, jinak prosté HTTP na portu 80 (Helm beze změny). Stávající Compose instalace změnu převezmou spuštěním instalátoru z nového kitu, který nainstaluje jehodocker-compose.ymla ponechá stávající.envi datové volumy (stejně takupgrade-mazevault.shz nového kitu). - Stažení CRL ve formátu DER vracelo prázdné tělo —
GET /api/v1/ca/{id}/crl(výchozíformat=der) odpovídal200s hlavičkami pro DER, ale bez obsahu; CRL vracel jenformat=pem. Endpoint nyní vrací CRL v kódování DER, dekódovaný z uloženého PEM. - Vestavěné role ztrácely oprávnění přidaná při upgradu — Backend při každém startu přepsal oprávnění vestavěných rolí starším pevným seznamem, takže oprávnění přidaná migracemi zmizela po prvním restartu:
report:read/report:write,keytab:read(User, Secret Manager),dashboard:write,agent:admin,audit:read,config:readaproject:write(Certificate a Secret Manager) atoken:read. Stejně se přepisovaly i úpravy vestavěných rolí provedené zákazníkem. Backend nyní pouze zakládá chybějící role a existující nemění; migrace000207_restore_system_role_permissionsobnoví zamýšlená oprávnění. Zároveň přidělítoken:read/token:write/token:deleterolím Project Admin a Secret Manager (migrace000193je přidělovala rolím, které už neexistují). Migrace oprávnění pouze přidává a žádná neodebírá, takže stávající přiřazení rolí i úpravy zákazníka zůstávají zachovány. - Nasazení do keystore přes agenta posílalo balíček, který agent neuměl přečíst — Orchestrovaný krok
agent_keystore_syncpředával agentovi jediný blobexported_data, zatímco agentůvCertificateSyncBundleočekávácertificate_pem,private_key_pemachain_pem; každá rotace do JKS / PKCS#12 / Windows store proto na agentovi selhala sfailed to decode certificate PEMa řetězec CA se nikdy nedostal do trust store. Všichni konzumenti nasazení (Kubernetes secret, Key Vault, agent keystore, agent file, Oracle wallet) nyní rozdělují export jediným sdíleným helperem — první certifikát = leaf, další certifikáty = řetězec vydavatelů, klíč zvlášť — který přijímá i base64 podobu po průchodu gateway, a keystore krok posílá přesně ta pole, která agent deserializuje (včetněpost_install_command, dříve vnořeného na špatném místě). Jde o opravu pouze na straně backendu/gateway, kompatibilní s již nasazenými agenty. - Kroky rotace
agent_commandkončily timeoutem u každého agenta — Krok přeposílal HTTP požadavek přes typ proxy zprávy, který agent nikdy neimplementoval, takže restarty služeb a další příkazové kroky čekaly 30 s a selhaly. Krok nyní používá požadavek agentaagent_command(vynucený allowlist) a respektujetimeout_seconds. - Cíle Agent File, WebLogic a Oracle wallet se nedaly provést —
agent_file_sync,agent_file_backupaweblogic_restartbuilder workflow generoval, ale nikdy nebyly registrovány (unknown step type), a registrované krokyweblogic_deploy/oracle_wallet_deployvracely executed, aniž by kontaktovaly jakýkoliv hostitel. Tyto cíle nyní běží přes skutečné registrované kroky (viz Nové funkce); sloučené typy krokůweblogic_restartaagent_file_backupjsou odmítnuty s pokynem znovu vytvořit cíl nasazení místo hlášení falešného úspěchu. - Cíle Web Server a Load Balancer byly tiše přeskakovány — Builder workflow neměl větev pro cíle
web_serveraload_balancer, takže rotace s takovým cílem hlásila úspěch, aniž by cokoliv nasadila. Nyní jsou při uložení odmítnuty a u již existujících selže sestavení workflow s explicitním důvodem (viz Cíle nasazení se validují při uložení). - Cíl Database Wallet šel vytvořit bez agenta — UI označovalo Database Wallet jako cíl nevyžadující agenta, přestože nasazení spouští
orapkina databázovém hostiteli přes agenta; takové cíle se nikdy nemohly provést. UI i API nyní pro tento typ cíle agenta vyžadují a aktualizace cílů posílané jako JSON dokumenty se explicitně serializují na každém databázovém driveru (GORM u map-based update nespouští serializátory polí; driver Postgres strukturu shodou okolností zakódoval, SQLite ji odmítla). - Cíl Windows
windows_rootimportoval privátní klíč do úložiště důvěryhodných kořenů — Windows keystore installer sestavoval PFX s privátním klíčem pro každé úložiště a jako cestu k úložišti používal surový typ keystore (windows_root), což není platný název Windows store. Cílewindows_rootawindows_canyní instalují pouze veřejné certifikáty (leaf do určeného úložiště, řetězec klasifikovaný doRoot/CA),windows_mydostává PFX leaf + klíč bez řetězce a typy keystore se mapují na skutečné názvy úložišťMy/Root/CA. Backend tomu odpovídá: krokagent_keystore_syncuž prowindows_root/windows_canevyžaduje privátní klíč (CA certifikát bez klíče lze nyní nasadit do trust store) aprivate_key_pempro tato úložiště do bundle nikdy nevkládá, ani když ho export obsahuje; JKS / PKCS#12 /windows_mybez klíče nadále selžou rychle. Hodnota UIWindows Cert Store(keystore_type: windows) nikdy neodpovídala ničemu, co agent přijímá; editor nyní nabízí explicitně Windows — Personal (My), Trusted Root CAs a Intermediate CAs (bez cesty, aliasu a hesla úložiště pro Windows store), uložené cíle se starší hodnotouwindowsse při provádění kanonizují nawindows_mya cíleagent_keystorese validují při uložení (JKS / PKCS#12 potřebujíkeystore_path; neznámé typy úložiště jsou odmítnuty). - Starší záznamy mohly exportovat jako leaf špatný certifikát — Certifikáty importované před zavedením
leaf_certificate_pemmají vraw_certificate_pempřesně to, co bylo nahráno — může jít o bundle „root, leaf“; nový resolver řetězce zpočátku četl toto surové pole dříve nežpublic_chain_pem(vždy leaf-first), takže by takový záznam exportoval, zobrazoval a nasazoval CA certifikát jako leaf (a hlásil prázdný, úplný řetězec). Leaf se nyní vybírá podle uloženého SHA-256 thumbprintu záznamu bez ohledu na pozici v uloženém materiálu; bez thumbprintu platí dosavadní pořadí (vyhrazené pole leaf → první blokpublic_chain_pem→ surový upload → DER). Kryto regresním testem s root-first surovými bundly pro end-entity i CA záznamy. - Discovery slučovala více end-entity certifikátů z jednoho souboru — Agent hlásí jeden záznam na každý end-entity certifikát nalezený v PEM souboru, ale jako tělo posílá celý soubor; backend bundle normalizoval heuristikou „první ne-CA blok“, takže soubor se dvěma end-entity certifikáty (starý + obnovený, server + klient) oba reporty sloučil do prvního certifikátu a druhý se nikdy nezaznamenal. Nahlášený fingerprint nyní vybírá leaf uvnitř bundle, sourozenecké end-entity certifikáty jsou z řetězce tohoto leafu vyloučeny a heuristika se použije jen tehdy, když žádný blok neodpovídá.
- Nasazení do osobního úložiště Windows vyžadovalo heslo keystore, které neexistuje — Úložiště Windows
Myžádné heslo keystore nemá; agent ho potřebuje jen k zabalení dočasného PFX, který na hostiteli importuje a smaže, a PowerShell prázdnou hodnotu odmítne. Cíle typuwindows_mybez nakonfigurovaného hesla proto při instalaci selhávaly. Krokagent_keystore_syncnyní vygeneruje jednorázové náhodné heslo PFX, pokud žádné není nakonfigurováno (nikdy se neloguje ani nepersistuje a heslo zadané operátorem je nadále respektováno), takže pro Windows úložiště není třeba zakládat žádný bezvýznamný secret. Na agentovi se heslo PFX předává PowerShellu přes prostředí procesu místo vkládání do skriptu, takže heslo s uvozovkami nebo$nemůže import rozbít ani být vypsáno zpět v chybě. Pokud nasazení běží přes gateway, odvozuje se jednorázové heslo z idempotency klíče kroku, takže opakovaný pokus předloží identický bundle a agent dokončenou instalaci přehraje místo jejího odmítnutí jako jiné operace. Názvy Windows úložišť agent řeší jedním sdíleným pravidlem:Mya jakýkoliv prostý název LocalMachine úložiště nalezený nebo nakonfigurovaný na hostiteli (např.WebHosting, výchozí úložiště IIS na současném Windows Serveru) jsou identity úložiště, která dostanou PFX;Root,CA,AuthRoot,TrustedPublisheraDisallowedjsou trust-anchor úložiště, která dostanou pouze veřejné certifikáty — privátní klíč se do nich nikdy neimportuje, a to ani cestou obnovy či starších metadat; bundle, který pro trust-anchor úložiště nese privátní klíč, je odmítnut s explicitní chybou místo poloviční instalace (obnovený klíč by se jinak tiše ztratil). Názvy, které by mohly změnit PowerShell skript, jsou odmítnuty. Funguje s již nasazenými agenty (samotná změna backendu instalaci opraví). - Kandidáti vydavatelů z inventáře nebyli identifikováni podle thumbprintu — Vyhledávání vydavatelů v resolveru řetězce nenačítalo
thumbprint_sha256u kandidátních CA záznamů, takže výběr leafu podle thumbprintu zavedený výše se na ně nevztahoval a starší podřízená CA uložená root-first se jako vydavatel nikdy nenabídla (řetězec zůstal neúplný — bezpečné, ale doplnění neproběhlo). Sloupec se nyní načítá a regresní test pokrývá kandidáta uloženého root-first. - Import privátního klíče přijal libovolný klíč k certifikátu bez těla —
POST /discovered-certificates/{id}/import-keypřeskakoval kontrolu shody klíče a certifikátu, když spravovaný certifikát neměl uložené tělo (podoba, kterou před touto verzí produkovala každá adopce), takže se mohl tiše uložit nesouhlasící klíč a selhat až při nasazení. Import nyní takový požadavek odmítne s explicitní chybou, dokud tělo neexistuje. - Připojení klíče ke spravovanému certifikátu bez těla ho nechalo bez těla — Update cesta importu připojila klíč, ale na záznamy bez těla neuložila leaf PEM / DER; nyní tělo připojí, zachová bohatší uložený řetězec a chybějící řetězec doplní z inventáře.
- Import certifikátu bral identitu z prvního PEM bloku — Bundly v pořadí
root, intermediate, leaf(jak je vydávají některé nástroje) byly zaznamenány s common name, serialem a otiskem rootu, zatímco uložené tělo byl leaf. Identita a metadata se nyní odvozují z normalizovaného leafu bez ohledu na pořadí bloků. - Import více souborů zahazoval samostatné soubory s klíčem — Nahrání certifikátu spolu se samostatným
.keysouborem klíč tiše zahodilo (UI tvrdilo, že byl spárován při náhledu) a importovalo pouze certifikát, takže opakovaný import spravovaného certifikátu za účelem doplnění klíče vždy skončil chybou „already exists“. Klíč se nyní páruje na backendu a importuje společně s certifikátem. - Rotace tajemství už neselhává na cizím klíči zálohy — Každá rotace tajemství padala v ságe na pozadí s
insert or update on table "rotation_backups" violates foreign key constraint "rotation_backups_execution_id_fkey". Záloha před rotací vznikala dříve, než existoval řádek exekuce rotace, a nikdy nenastavilaexecution_id, takže nenulový cizí klíč insert odmítl a žádná rotace nemohla proběhnout. Záloha se nyní vytváří uvnitř exekuce (po runtime probe, před prvním mutujícím krokem) s platnýmexecution_ida rozřešení organizace je ověřeno předem. Regrese byla neviditelná, protože testovací harness SQLite nevynucuje cizí klíče a omezení existuje jen v SQL migraci; reálnou insert cestu nyní pokrývá test s vynuceným cizím klíčem. - Migrace rotačních šablon korektně zpracují nová pole politiky — Perzistenční cesta rotačních šablon a její migrace byly opraveny tak, aby nově přidaná pole politiky (
lead_time_days,grace_period_days,secret_custody_mode) konzistentně kolovala mezi API, SDK, providerem a uloženým katalogem. - Aktualizace rotační šablony už nepadá při částečných úpravách — Dekodér požadavku create/update rotační šablony dereferencoval typované nil ukazatele, takže jakýkoli požadavek, který vynechal volitelné pole — běžný případ u úpravy jediného pole, například změny pouze intervalu — způsobil paniku a vrátil HTTP 500. Dekodér nyní rozlišuje přítomnost: vynechaná pole se přeskočí, explicitní
0nebofalsese zachová jako zamýšlená hodnota aproject_idlze nastavit, změnit nebo vymazat (explicitnímnull) bez dopadu na ostatní pole. - Vyřazení agenti se mohou znovu zaregistrovat autorizovaným náhradním tokenem — Re-registrace odregistrovaného nebo revokovaného agenta byla rovnou odmítnuta, takže vyměněný host se nemohl vrátit ani s jednorázovým tokenem vydaným přes
reregister. Re-enrollment vyřazeného agenta je nyní povolen pouze účelově vydaným náhradním tokenem — rozlišeným novým diskriminátorempurposena deployment tokenech — zatímco zastaralé deployment tokeny ani recovery tokeny jej stále nemohou vzkřísit; při úspěchu se vyčistí markery vyřazení agenta a jednorázový token se spotřebuje. - Vzdálená odinstalace selže čistě a hlásí selhání spuštění runneru — Vzdálená odinstalace nyní předem odmítne host bez podporovaného správce balíčků (
apt-get/rpm) jako nepodporovaný, místo aby hlásila úspěch po best-effort úklidu, zatímco balíček zůstal nainstalovaný. Pokud se odpojený odinstalační runner nepodaří spustit, agent nyní toto terminální selhání nahlásí zpět přes health kanál — a smíří již přijatou operaci — místo pouhého lokálního zalogování. - Rotace keytab selže bezpečně (fail-closed) při chybě dotazu na stav agenta — Chyba databáze při zjišťování stavu agenta u keytab cíle již není považována za „neaktivní“ (což tiše přeskočilo nasazení, ale rotaci hlásilo jako dokončenou). Rotace nyní při chybě dotazu selže bezpečně a přeskočí pouze potvrzeně neaktivního agenta.
- Potvrzení zálohy rotace omezeno na stav recovery_required —
POST /rotation/backups/{id}/acknowledgenyní přepíná pouze zálohu, která je skutečně ve stavurecovery_required, a vrací404pro neznámé id a409pro jakýkoli jiný stav životního cyklu, místo tichého přepsání zálohy v libovolném stavu. - Import Terraform
mazevault_deploymentobnoví organizaci —Readresource deploymentu nyní znovu naplníorganization_idze serveru, takže importovaný deployment lze zničit; dříve delete volání posílalo prázdnou organizaci a bylo odmítnuto s400. - Zákaznický Helm chart používá Redis místo tichého přechodu na paměťovou cache — Zákaznický Helm chart měl ve výchozím stavu
externalRedis.connectionQuery: abortConnect=false, což je volba StackExchange.Redis (.NET), kterou Redis klient Go backendu odmítá (redis: unexpected option). Backend proto přecházel na paměťovou cache, stav gatewaye nemohl používat Redis a OCSP responder při startu padal do restartovací smyčky. Výchozí hodnota je nyní prázdná a chart odmítne vyrenderovat, pokudconnectionQueryobsahujeabortConnect— zákazníci, kteří ho mají ve vlastních values, ho musí odstranit. Backend ani OCSP responder navíc při selhání parsování nebo připojení k Redisu už nelogují heslo: URL v chybách připojení jsou redigovány a chyby parsování URL už neopakují původní URL. - Poznámka u certifikátu odmítnuta pod zobrazeným limitem 256 znaků — Uložení Poznámky (Note) u certifikátu selhávalo i u textu výrazně kratšího než inzerovaných 256 znaků, pokud obsahoval ne-ASCII znaky (například českou diakritiku), a detail certifikátu neposkytl žádnou zpětnou vazbu. Backend vynucoval limit v UTF-8 bajtech, zatímco počítadlo v UI, validátor požadavku i sloupec
VARCHAR(256)počítají znaky — dvoubajtový znak jakořtak spotřeboval dvě jednotky kvóty (u běžného českého textu byl efektivní strop ≈240 znaků). Stejná bajtová kontrola se týkala i tagů certifikátu (64) a dokumentační URL (500). Všechny tři limity jsou nyní na každé vrstvě vynucovány v Unicode znacích, editor poznámky počítá a ořezává po code pointech (emoji se počítá jako jeden znak) a plných 256 znaků lze uložit bez ohledu na písmo. Sekce Tagy / Dokumentace / Poznámka navíc již nepolyká chyby API: validační chyby i chyby oprávnění se zobrazují přímo u pole, editor ponechá rozepsaný text otevřený k opravě a probíhající uložení nelze odeslat dvakrát. Import certifikátu nyní aplikuje stejnou normalizaci tagů (ořez mezer, deduplikace, limity 64 znaků / 50 tagů) jako editor v detailu. Tělo požadavkuPUT /certificates/{id}(UpdateCertificateRequest) je nyní popsáno v OpenAPI specifikaci. Změna schématu není potřeba. - Spravované tokeny nešlo v Orchestrator módu uložit do Azure Key Vault — Vytvoření nebo obnova spravovaného tokenu (
POST /tokens,POST /tokens/{id}/renew) v Orchestrator módu selhávalo s500 failed to offload token value to external provider, pokud byl cílem offloadu Azure Key Vault. Obecná offload cesta pojmenovala každou hodnotu bez certifikačních metadatmazevault-keys/key-<unix-timestamp>— cestový identifikátor navržený pro HashiCorp Vault, který Key Vault odmítá, protože názvy secretů smí obsahovat jen[0-9a-zA-Z-](400 BadParameter: Method PUT does not allow operation 'key-…'). Stejný identifikátor používaly keytaby a privátní klíče importované přes discovery (mazevault-keys/<cn>-<serial>, s tečkami z CN), takže i tyto offloady na Azure selhávaly. Identifikátor se nyní generuje podle providera: Key Vault dostane plochý, čitelný a kolizím odolný název (mazevault-token-<název-tokenu>-<id>,mazevault-keytab-<principal>-<id>,mazevault-<cn>-<serial>), který se validuje proti kontraktu Key Vaultu ještě před odesláním požadavku; HashiCorp Vault a AWS Secrets Manager zachovávají historické uspořádánímazevault-keys/…beze změny. Samotná hodnota tokenu se nikdy nemění — je base64 kódována pro přenos přesně jako dřív a vrací se byte-po-bytu (pokryto testem s shell metaznaky, bílými znaky i Unicode). Tvrdý limit Key Vaultu na jeden secret (25 600 bajtů zakódovaného payloadu, ≈19 200 raw bajtů) se nyní kontroluje předem a hlásí jako400s přesným limitem a velikostí odeslané hodnoty místo obecné500z Azure; explicitní název secretu porušující vzor Key Vaultu je rovněž odmítnut jako400, nikoli tiše přepsán. Společně bylo opraveno několik latentních vad ve stejné cestě: token service předávala tenanta pod špatným metadata klíčem (org_idmístoorganization_id), takže se offload integrace vybírala napříč celým systémem — první povolená secret-manager integrace jakékoli organizace — a reveal / delete tokenu řešily integraci bez jakéhokoli tenant scope; výběr integrace je nyní scopovaný projekt → organizace a nikdy se nerozšíří na vault jiného tenanta (explicitně zvolenéintegration_id, které chybí nebo je vypnuté, je odmítnuto místo nahrazení jiným); obnova tokenu mazala předchozí externí hodnotu dřív, než byla zapsána nová, takže neúspěšný offload nechal token bez hodnoty — pořadí je nyní zapsat → persistovat → odstranit starou, neúspěšná obnova ponechá předchozí hodnotu netknutou a neúspěšný insert metadat odstraní právě odloženou hodnotu; uložená Azure reference s verzí by při aktualizaci vytvořila nový secret pojmenovaný GUIDem verze — holý název secretu se nyní extrahuje správně; asynchronní worker pro offload secretů dotazoval neexistující sloupecis_activenaproject_integrations(skutečný příznak jeenabled); custody události tokenů a keytabů nyní odkazují na vlastnící záznam, typ klíče a jednajícího uživatele místo náhodného UUID; a sériové číslo certifikátu kratší než osm znaků už nezpůsobí panic generátoru názvů. Není potřeba databázová migrace, změna API ani konfigurace. - Provisioning přes SCIM vytvořil nejvýše jednoho uživatele nebo skupinu — Vytvoření uživatele nebo skupiny přes SCIM (
POST /api/v1/auth/scim/{providerID}/Usersa/Groups) uložilo identitu bez id, takže první dostala id ze samých nul a každá další selhala s500(external_identities_pkey). Uživatel bezexternalId(ve SCIM nepovinného a Okta ho neposílá) byl navíc považován za předchozího a odpovídal500 user already exists. Identity nyní dostávají vygenerované id a uživatel bezexternalIdse identifikuje podleuserName. - Provisioning přes SCIM odpovídá na duplicitního uživatele 409 a na neznámého uživatele či skupinu 404 — Vytvoření SCIM uživatele, kterého poskytovatel už má (
POST /api/v1/auth/scim/{providerID}/Users), odpovídalo500 user already existsa úprava neznámého uživatele (PUT .../Users/{id}) nebo patch neznámé skupiny (PATCH .../Groups/{id}) odpovídaly500 record not found. Nyní odpovídají409,404 User not founda404 Group not found, jak SCIM klienti očekávají a jak už odpovídaly čtecí cesty. - Export do Terraformu vrací 404 a 400 pro neznámé a nevalidní id —
GET /api/v1/terraform/export/project/{id}a.../organization/{id}vracely HTTP 500 pro id, které nepatří žádnému projektu ani organizaci, nebo není UUID. Nově vracejí 404 (project not found,organization not found) a 400 (Invalid Project UUID,Invalid Organization UUID). - Název skupiny integrací musí být v projektu jedinečný (409) —
POST /api/v1/projects/{id}/integration-groupsaPUT /api/v1/integration-groups/{id}odpovídaly HTTP 500 s chybou databáze, když projekt už skupinu s tímto názvem má. Nyní odpovídají409an integration group with this name already exists in the project. - Výpis skupin integrací odpovídá 404 pro neexistující projekt —
GET /api/v1/projects/{id}/integration-groupsodpovídal200s prázdným seznamem pro projekt, který neexistuje. Nyní odpovídá404project not found. - Název skupiny integrací delší než 255 znaků odpovídá 400 —
POST /api/v1/projects/{id}/integration-groupsaPUT /api/v1/integration-groups/{id}odpovídaly HTTP 500 s chybou databáze pro název, který sloupec nepojme. Nyní odpovídají400name must be at most 255 characters. - Vytvoření skupiny integrací odpovídá 404 pro neexistující projekt —
POST /api/v1/projects/{id}/integration-groupsodpovídal HTTP 500 s chybou cizího klíče z databáze, když projekt neexistuje. Nyní odpovídá404project not found. - Skupinu integrací lze uložit bez mapování —
POST /api/v1/projects/{id}/integration-groupsaPUT /api/v1/integration-groups/{id}odpovídaly HTTP 500, když tělo neobsahovalomappings(sloupec nepřijímánull). Skupina bez mapování se nyní uloží s prázdným seznamem a aktualizace bezmappingsmapování vymaže. - Chyby zjišťování v Azure už nevracejí interní text chyby — Selhání
GET /api/v1/azure/keyvaults/discoverneboPOST /api/v1/azure/keyvaults/check-access(například u uživatele, který není přihlášen přes Entra ID) posílalo interní příčinu vdetailsa routes pro SQL servery Azure a souhrn oprávnění posílaly text neúspěšného volání Azure s kódem502. Selhání nyní vrací pevnou zprávu a příčinu ponechává v logu serveru. Selhání vyhledání projektu nebo politiky viditelnosti v databázi uGET /api/v1/azure/app-registrationsa/azure/subscriptions/{subscriptionId}/keyvaultsvracelo400s textem databáze; nyní vrací500PROJECT_LOOKUP_FAILEDneboVISIBILITY_POLICY_FAILEDbez něj. - Vytvoření a úprava integrace organizace odpovídají 400 pro odmítnutou URL —
POST /api/v1/organizations/{id}/integrationsaPUT /api/v1/organizations/integrations/{integrationId}odpovídaly500 Internal server error, když kontrola interních adres odmítla URL (napříkladhttp://127.0.0.1/…). Nyní odpovídají400s důvodem (invalid integration config: field "url": …) a nic neuloží. - Náhled rozsahu Entra funguje s maskovanými tajemstvími uložené integrace — Protože tajemství projektové integrace se vracejí jako
********, náhled rozsahu Entra v režimu úprav průvodce integrací posílal masku jako client secret a seznam aplikací nenačetl, dokud uživatel tajemství nezadal znovu.POST /api/v1/entra/projects/{id}/scope-previewpřijímá volitelnéintegration_iduložené integrace Entra ID (stejný projekt): tajná pole poslaná jako********nebo vynechaná se vezmou z ní, pokud se její pole koncového bodu (tenant_id,client_ida ostatní pole koncového bodu) nezměnila; změněný koncový bod vyžaduje znovu zadaná tajemství (400invalid integration config), stejně jako integrace jiného projektu. Uložená integrace se posuzuje sentra:readve vlastním prostředí a projektu (403,404pro neznámou). Bezintegration_idse nic nemění. - Vytvoření projektové integrace a navázání agenta vracejí 4xx pro opravitelný vstup —
POST /api/v1/projects/{id}/integrationsodpovídal500na tělo nesprávného tvaru, chybné id projektu a název, který prostředí už používá; nyní odpovídá400s chybou vazby,400Invalid Project UUIDa409se zprávou o duplicitním názvu; konfigurace Entra ID, kterou její autentizace na pozadí nemůže použít (napříkladbackground_auth_methodclient_secretbezclient_secret), vrací400s touto zprávou, stejně jako úprava.POST /api/v1/projects/{id}/integrations/agentsodpovídal500na neplatnéenvironment, neznámého agenta a agenta, kterého projekt už má navázaného; nyní odpovídá400,404Agent not founda409. - Úprava integrace projektu a cesty relací vracejí 400 pro vstup, který může volající opravit —
PUT /api/v1/projects/integrations/{integrationId}vracel500, když nové konfiguraci integrace Entra ID chybělo, co potřebuje její autentizace na pozadí (napříkladclient_secretproclient_secret); nyní vrací400s touto zprávou. Cesty databázových relací (…/sessions,…/sessions/terminate,…/sessions/drain) vracejí pro integraci jiného typu400integration is not a database integrationmísto500. - Test připojení on-behalf-of bez jednotného přihlášení Entra ID už nekončí 500 —
POST /api/v1/projects/{id}/integrations/test-connections autentizací on-behalf-of na serveru bez služby jednotného přihlášení Entra ID požadavek shodil (500). Nyní vrací200sesuccess: falseaOBO authentication is configured but Entra SSO service is not available, stejně jako test uložené integrace. - Smazání integrace projektu archivuje osiřelá tajemství až po smazání —
DELETE /api/v1/projects/integrations/{integrationId}?archive_orphans=truearchivoval tajemství, která přišla o poslední integraci, uvnitř databázové transakce mazání: každá archivace čekala na druhé databázové spojení, zatímco transakce jedno držela, a archivace zůstaly i tehdy, když mazání poté selhalo. Tajemství se nyní archivují až po potvrzení smazání a neúspěšné smazání nic nearchivuje. - Úprava a smazání integrace organizace odpovídají 404 pro neznámou integraci —
PUT /api/v1/organizations/integrations/{integrationId}odpovídal500aDELETEodpovídal204(a zapsal auditní záznamDELETE_ORG_INTEGRATION) pro id, které neoznačuje žádnou integraci. Oba nyní odpovídají404integration not founda nic neauditují. - Patch SCIM skupiny aplikuje operace s velkými písmeny a odmítá, co nelze provést —
PATCH /api/v1/auth/scim/{providerID}/Groups/{id}porovnával název operace s rozlišením velikosti písmen, takžeAddaRemove, které posílá Entra ID, nic neměnily, a člen bezvalueshodil úpravu, což se spolklo a odpovědělo204bez provedené změny. Názvy operací jsou nyní bez rozlišení velikosti písmen (RFC 7644) a patch s členem bez id uživatele,addbez hodnoty nebo operací jinou než add a remove (napříkladreplace) odpovídá400ve SCIM tvaru chyby (scimTypeinvalidValueneboinvalidSyntax) a nic nemění. - Schválení a zamítnutí žádostí o heslo se auditují — Schválení nebo zamítnutí žádosti agenta o heslo ke keystoru (
POST /api/v1/admin/password-requests/{id}/approvea/reject) nezapisovalo žádný auditní záznam. Nyní zaznamenajíPASSWORD_REQUEST_APPROVEDaPASSWORD_REQUEST_REJECTED(entitaPASSWORD_REQUEST, id žádosti) s uživatelem a IP adresou; záznamy nikdy neobsahují heslo. - Žádost o heslo lze schválit nebo zamítnout jen jednou —
POST /api/v1/admin/password-requests/{id}/approvea/rejectodpovídaly200i pro neexistující žádost a dovolily znovu vyřídit už schválenou nebo zamítnutou žádost (zamítnutá šla změnit na schválenou, schválené šlo přepsat heslo). Nově vrací404pro neznámou žádost a409pro žádost, která už není čekající; kontrola stavu je součástí samotné aktualizace, takže dvě souběžná vyřízení nemohou uspět obě. Odmítnuté volání se do auditu nezapisuje. - Neexistující tajemství vrací 404 místo 500 — Úprava tajemství (
PUT /api/v1/secrets/{id}), výpis jeho verzí, návrat k jiné verzi (neexistující tajemství nebo verze) a archivace, obnova či trvalé smazání vracely500, když tajemství už neexistovalo (například smazané v jiné záložce prohlížeče); obnova neexistujícího tajemství dokonce vracela200a zapsala auditní záznamRESTORE_SECRET. Nyní vrací404a obnova neexistujícího tajemství nezapisuje žádný auditní záznam. - Klíč tajemství lze znovu vytvořit po archivaci nebo smazání tajemství — Vytvoření tajemství (
POST /api/v1/secrets/) s klíčem tajemství, které bylo archivováno nebo smazáno, selhávalo s500 Failed to create secret: unikátní indexidx_secrets_unique_key_env_versionzahrnoval i archivované a smazané řádky, zatímco kontrola při vytvoření posuzuje jen aktivní. Migrace000212omezuje index na aktivní řádky (nearchivované, nesmazané). Obnova archivovaného tajemství, jehož klíč byl mezitím vytvořen znovu, nyní vrací409místo databázové chyby. - Kopírování tajemství se audituje — Zkopírování tajemství do jiného prostředí (
POST /api/v1/secrets/{id}/copy) nezapisovalo žádný auditní záznam. Nyní se zapisujeCOPY_SECRET(entitaSECRET, id nového tajemství, v detailech id zdroje a cílové prostředí) s uživatelem a IP adresou; záznam nikdy neobsahuje hodnotu. - Obnova a trvalé smazání odmítnou tajemství, které není archivované —
POST /api/v1/secrets/{id}/restoreaDELETE /api/v1/secrets/{id}/permanentjednaly nad libovolným tajemstvím: zastaralá záložka Archiv (tajemství bylo mezitím obnoveno nebo nikdy nebylo archivováno) mohla trvale smazat aktivní tajemství a obnova aktivního tajemství zapsala nepravdivý auditní záznamRESTORE_SECRET. Obě nyní vrací409 secret is not archived, nic nemění a nezapisují auditní záznam. - Obnova a trvalé smazání odmítnou projekt, který není archivovaný, a obnova uživatele, který není smazaný —
POST /api/v1/projects/{id}/restoreaDELETE /api/v1/projects/{id}/permanentjednaly nad libovolným projektem: zastaralá záložka Archiv (projekt byl mezitím obnoven nebo nikdy nebyl archivován) mohla trvale smazat aktivní projekt včetně všech jeho tajemství a obnova aktivního projektu zapsala nepravdivý auditní záznamRESTORE_PROJECT.POST /api/v1/archived/users/{id}/restorese choval stejně pro uživatele, který není smazaný (RESTORE_USER). Všechna tři volání nyní vrací409(project is not archived,user is not deleted), nic nemění a nezapisují auditní záznam. - Trvalé smazání se nemůže předběhnout s obnovou — Trvalé smazání projektu, uživatele nebo tajemství nyní zamkne řádek a před smazáním ověří, že je stále archivovaný (nebo smazaný), takže po obnově dokončené ve stejném okamžiku už nemůže následovat nevratné smazání nyní aktivní položky (smazání vrátí
409); obnova uživatele je jediná podmíněná úprava, takže dvě obnovy už neuspějí obě a nezapíší se dvakrát. Stejnou kontrolu používá i retenční úklid prošlých projektů a tajemství. - Schvalování a přiřazení rolí vrací při překlepu 404 a 400 místo 500 s textem databáze — Vytvoření schvalovací politiky nebo žádosti pro neexistující projekt (
POST /api/v1/projects/{id}/approval-policies,…/approval-requests) vracelo500s chybou cizího klíče z PostgreSQL; úprava neexistující politiky (PUT /api/v1/projects/approval-policies/{policyId}) vracela500 record not found; přiřazení role neexistujícímu uživateli, neexistující role nebo s neplatným prostředím v rozsahu (POST /api/v1/rbac/users/{id}/roles) vracelo500 Internal server error. Na to narazí Go SDK, CLI a Terraform provider při překlepu. Nyní vrací404 Project not found,404 Policy not found,404 user not found/404 role not founda400 invalid environment scope …a text databáze se do odpovědi nedostane. - Nastavení prostředí neexistujícího projektu vrací 404 —
GET /api/v1/projects/{id}/environment-settingspro neexistující projekt vracelo500 LIST_FAILED; nyní vrací404 Project not found. - Uložení nastavení neexistujícího projektu a žádost o schválení s neexistující politikou vrací 404 —
PUT /api/v1/projects/{id}/settingspro neexistující projekt vracelo500aPOST /api/v1/projects/{id}/approval-requestss neexistujícímpolicy_idvracelo500(chyba cizího klíče). Nyní vrací404 Project not founda404 Policy not found. - Chyby serveru u projektů, schvalování, poskytovatelů identity, SAML, archivu a žádostí o heslo už neukazují interní text — Selhání volání databáze nebo SAML poskytovatel s neplatnou SSO URL vracely
500s původním textem chyby (hláška PostgreSQL,record not found, chyba parsování URL) v těle odpovědi, i na veřejných SAML cestách pro metadata a přihlášení. Text se nyní zapisuje jen do logu serveru a tělo jeInternal server error; seznam nastavení prostředí si ponechává kódLIST_FAILEDa zprávu bezdetails. - Žádné nepravdivé auditní záznamy u volání, která nic nezměnila —
PATCHUniversal Auth bez čeho měnit už nezapisujeUPDATE_UNIVERSAL_AUTH, odebrání klientského tajemství, které už odebráno je (stále204), už nezapisuje druhýREVOKE_CLIENT_SECRETa ponechává čas prvního odebrání a smazání neexistujícího id poskytovatele identity (stále204) už nezapisujeDELETE_IDENTITY_PROVIDER. - Import, stahování z Azure Key Vault, kopie a řešení konfliktů synchronizace ignorují archivovaná tajemství — Klíč může existovat současně jako archivované i jako aktivní tajemství (migrace
000212). Import do projektu, stahování z Azure Key Vault, kontrola „již existuje“ při kopírování a řešení konfliktu synchronizace hledaly tajemství podle projektu, klíče a prostředí bez vyloučení archivovaných řádků, takže import nebo stažení mohly přepsat archivované tajemství a aktivní ponechat beze změny, kopii mohlo zablokovat archivované tajemství a konflikt synchronizace se mohl vyřešit na špatném tajemství. Nyní berou v úvahu jen aktivní tajemství. - Návrat k verzi a kopie tajemství v Orchestrator Mode vrací 409 s důvodem — Návrat tajemství k dřívější verzi (
POST /api/v1/secrets/{id}/rollback, dialog historie) nebo jeho zkopírování do jiného prostředí (/copy) v Orchestrator Mode vracely500 Failed to rollback secret/Failed to copy secreta skrývaly, že operace tam neexistuje (hodnota je v externím poskytovateli). Nyní vrací409s textemrollback is not supported in Orchestrator Mode/copying secrets is not supported in Orchestrator Mode. - Vytvoření tajemství s neplatným prostředím nebo neexistujícím projektem vrací 400/404 místo 500 —
POST /api/v1/secrets/vracel500 Failed to create secretpro identifikátor prostředí, který platforma nepřijímá (rezervovaný jakodefaultčiall, kratší než 2 nebo delší než 32 znaků, nebo neodpovídající[A-Za-z][A-Za-z0-9_-]), a pro neexistujícíproject_id. Na to narážel Terraform provider (mazevault_secret.environment), CLI i Go SDK při překlepu. Nyní vrací400s důvodem (invalid environment "x": environment slug is shorter than 2 characters) a404 Project not found. - Neexistující tajemství vrací 404 v synchronizačních endpointech — Vynucená synchronizace (
POST /api/v1/secrets/{id}/force-sync,/environments/{env}/force-sync), stav synchronizace (GET /api/v1/secrets/{id}/sync-status), offload synchronizace (POST /api/v1/secrets/{id}/sync) a stav offloadu (GET /api/v1/secrets/{id}/offload-status) vracely500, když tajemství už neexistovalo nebo bylo archivováno (například smazané v jiné záložce prohlížeče). Nyní vrací404. - Vynucená synchronizace pro neplatné prostředí vrací 400 —
POST /api/v1/secrets/{id}/environments/{env}/force-syncvracelo500, kdyženvbylo rezervované nebo neplatný identifikátor prostředí. Nyní vrací400s textem chyby. - Synchronizační endpointy tajemství neposílají interní text chyby — Při databázové chybě vynucená synchronizace (
POST /api/v1/secrets/{id}/force-sync,/environments/{env}/force-sync), stav synchronizace (GET /api/v1/secrets/{id}/sync-status), log synchronizace (GET /api/v1/secrets/{id}/sync-logs) a detekce driftu (POST /api/v1/secrets/drift/detect) vkládaly původní chybu (názvy tabulek, SQL stav) do těla odpovědi. Nyní vrací500s obecnou zprávou; příčina se pouze zapisuje do logu. - Synchronizace tajemství a detekce driftu se auditují — Vynucená synchronizace jednoho prostředí (
POST /api/v1/secrets/{id}/environments/{env}/force-sync), offload synchronizace tajemství (POST /api/v1/secrets/{id}/sync) a detekce driftu (POST /api/v1/secrets/drift/detect) nezapisovaly žádný auditní záznam. Nyní zapisujíFORCE_SYNC_SECRET_ENVIRONMENT,SYNC_SECRETaDETECT_SECRET_DRIFTs uživatelem a IP adresou (detekce driftu s rozsahem projektu a počty výsledků); záznam nikdy neobsahuje hodnotu tajemství. Odmítnutá volání nezapisují nic. - Požadavek agenta na token na
/oauth/tokenbyl odmítnut s 403 —POST /oauth/token(endpoint client credentials popsaný v API příručce a používaný agentem) odpovídal403 CSRF token mismatchna každý požadavek bez hlavičkyAuthorizationnebo dvojice XSRF cookie a hlavičky z prohlížeče, kterou strojoví klienti neposílají, takže agent nastavený s OAuth klientem nemohl získat token. Kontrola CSRF nyní tento endpoint vyjímá stejně jako/api/v1/auth/tokena/api/v1/auth/universal-auth/login: ověřuje se tajným klíčem klienta v těle požadavku, ne cookie. - Změna důvěryhodných IP adres Universal Auth poškodila konfiguraci —
PATCH /api/v1/auth/universal-auth/identities/{id}sclientSecretTrustedIpsneboaccessTokenTrustedIpsskončil pro dvě a více adres chybou500a pro jedinou adresu ji uložil jako JSON objekt místo seznamu, po čemž už konfiguraci nešlo načíst: její čtení, změna, vytvoření, výpis nebo zneplatnění klientských tajných klíčů i přihlášení přes Universal Auth odpovídaly500. Adresy se nyní ukládají jako seznam pro libovolný počet adres (prázdný seznam nedůvěřuje žádné adrese, takže každé přihlášení je odmítnuto s401 Invalid credentials; pro povolení libovolné adresy pošlete0.0.0.0/0) a databázová migrace (000213) převede konfigurace poškozené starou změnou zpět na seznamy.PATCHpro identitu bez Universal Auth nyní odpovídá404místo500. - Přihlášení přes SRP odpovídá 400 na neplatný veřejný klíč klienta —
POST /api/v1/auth/srp/initodpovídal500 failed to create SRP server, když byl veřejný klíč klientaAroven0modulo prvočíslo skupinyN(například0,Nnebo2N) nebo z něj vycházel nulový parametr míchání. SRP knihovna takový klíč už odmítala (klíč relace by nezávisel na hesle); route jej nyní hlásí jako400 invalid public key Amísto interní chyby. - Neexistující skupiny konzistence, varování a projekty vrací 404 — Čtení (
GET /api/v1/consistency-groups/{id}), úprava (PUT /api/v1/consistency-groups/{id}) a kontrola (POST /api/v1/consistency-groups/{id}/check) skupiny konzistence, která už neexistovala, a vytvoření skupiny v neexistujícím projektu (POST /api/v1/projects/{id}/consistency-groups) vracely500. Vyřešení neexistujícího varování (POST /api/v1/consistency-warnings/{id}/resolve) vracelo200, aniž by cokoli změnilo. Nyní vrací404. - Vyřešení varování konzistence funguje —
POST /api/v1/consistency-warnings/{id}/resolvevždy vracelo500: zapisovalo řešitele, který se z požadavku nikdy nečetl, a databáze to odmítla. Varování se nyní označí jako vyřešené přihlášeným uživatelem, včetně poznámky. - Duplicitní název skupiny konzistence vrací 409 — Vytvoření (
POST /api/v1/projects/{id}/consistency-groups) nebo přejmenování (PUT /api/v1/consistency-groups/{id}) skupiny konzistence na název, který projekt už používá, vracelo500s databázovou chybou. Nyní vrací409se srozumitelnou zprávou. - Název skupiny konzistence je po jejím smazání opět volný — Vytvoření skupiny konzistence (
POST /api/v1/projects/{id}/consistency-groups) pod názvem smazané skupiny selhávalo, protože unikátní index názvu zahrnoval i smazané skupiny. Rozbíjelo to nahrazenímazevault_consistency_groupv Terraformu. Migrace000214omezuje index jen na existující skupiny; dvě existující skupiny projektu stále nemohou mít stejný název. - Endpointy konzistence neposílají interní text chyby — Při databázové chybě vkládaly endpointy skupin a varování konzistence (
/api/v1/projects/{id}/consistency/*,/api/v1/consistency-groups,/api/v1/consistency-warnings) původní chybu (názvy tabulek, SQL stav) do těla odpovědi. Nyní vrací500s obecnou zprávou; příčina se pouze zapisuje do logu. - Vytvoření a smazání skupiny konzistence se auditují — Vytvoření skupiny konzistence (
POST /api/v1/projects/{id}/consistency-groups) a její smazání (DELETE /api/v1/consistency-groups/{id}) nezapisovaly žádný auditní záznam, na rozdíl od úpravy. Nyní zapisujíconsistency_group_created(s projektem) aconsistency_group_deleteds uživatelem a IP adresou. Odmítnutá volání a smazání už neexistující skupiny nezapisují nic. - Seznam archivovaných secretů neposílá interní text chyby — Při databázové chybě vkládal
GET /api/v1/archived/secretspůvodní chybu (názvy tabulek, SQL stav) do těla odpovědi. Nyní vrací500s obecnou zprávou; příčina se pouze zapisuje do logu. - Hashe historie hesel neopouštějí backend — Odpovědi se secrety (seznam, aktualizace, kopie, archiv) už neobsahují pole
password_history_hashes. Obsahovalo hashe dřívějších hodnot secretů a v praxi bylo prázdné; nic je nečte, takže klienti se nemusí upravovat. - Secret endpointy v2 odpovídají na neznámý a duplicitní vstup kódem 4xx —
POST /api/v2/secretsvracel500pro název (blind index), který v prostředí už existuje, pro neplatné prostředí a pro neznámý projekt; nyní vrací409,400(se zprávou) a404.PUT /api/v2/secrets/{id}vrací404pro neznámý nebo archivovaný secret aGET /api/v2/projects/{id}/secretsa/secrets/matrixvrací404pro neznámý projekt (dříve vše500). Secret, kterýPOST /api/v2/secrets/migratenedokáže migrovat, se hlásí pevným textem (secret not found,migration failed, ...) místo původní databázové chyby a archivovaný secret se už nemigruje. - Migrace secretů na zero-knowledge se auditují —
POST /api/v2/secrets/migratepřepisoval zašifrovaný název a hodnotu secretů bez auditního záznamu. Každý migrovaný secret nyní zapisujeMIGRATE_SECRET_V2s uživatelem, IP adresou a prvními 8 znaky blind indexu; žádný šifrovaný text ani nonce se neauditují. - Přístupový log už nezapisuje blind index —
GET /api/v2/secrets?project_id=…&blind_index=…zapisoval při každém vyhledání podle názvu celý blind index (HMAC názvu secretu) do polequerypřístupového logu. Hodnota se nyní loguje jako[REDACTED]; samotné vyhledání se nemění. - Porovnání secretů kontroluje oprávnění ke čtení obou prostředí —
POST /api/v2/secrets/compare(podle blind indexu i podle klíče) vyžadoval jensecret:readv prostředí požadavku, takže uživatel mohl zjistit, které secrety a v jakých verzích existují v prostředích, která číst nesmí. Nyní vyžadujesecret:readnasource_envitarget_env, jinak vrací403 insufficient permissions for environment, stejně jako ostatní čtecí routy v2. - Projekt může mít v jednom prostředí více zero-knowledge secretů — Unikátní index klíčů secretů pokrýval i prázdný klíč zero-knowledge (v2) secretu, takže projekt a prostředí mohly obsahovat jediný v2 secret: vytvoření druhého přes
POST /api/v2/secretsvracelo500. Index nyní pokrývá jen secrety s klíčem (migrace000215, idempotentní); opakovaný blind index se nadále odmítá kódem409. - Archivace, obnovení, smazání a zrušení odvolání certifikátu ve špatném stavu vrací 409 nebo 404 —
POST /api/v1/certificates/{id}/archivepro už archivovaný certifikát vracelo200a zapisovalo další auditní záznam;POST …/restorepro certifikát, který není archivovaný (neaktuální seznam Archiv), vracelo200a zapisovalo auditní záznam;DELETE …/permanentnearchivovaného certifikátu ho nenávratně smazalo; a neznámý certifikát vracel500s databázovým textem (u obnovení200). Nyní vracejí409(certificate is already archived,certificate is not archived) nebo404a nic nemění, odmítnuté volání nezapisuje auditní záznam; trvalé smazání zamyká řádek a znovu ho ověřuje uvnitř transakce.POST …/unrevokevrací404pro neznámý certifikát a409pro certifikát, který není odvolaný nebo nebyl pozastaven (kód důvodu 6), místo400; odvolání a zrušení odvolání certifikát zamykají, takže dvě současná volání nemohou obě uspět. - Certifikátové endpointy neposílají interní text chyby — Při databázové chybě vkládala archivace, obnovení, trvalé smazání, odvolání a zrušení odvolání certifikátu (
/api/v1/certificates/{id}/…) a výpis jeho rotačních cílů původní chybu (názvy tabulek, SQL stav) do těla odpovědi a čtení certifikátu nebo jeho stavu vracelo404při jakékoli chybě. Nyní vrací500s obecnou zprávou (jen chybějící certifikát je404); příčina se pouze zapisuje do logu. - Odvolání certifikátu, který nevydala žádná CA, vrací 409 místo 500 —
POST /api/v1/certificates/{id}/revoke(iPOST /api/v1/projects/{id}/certificates/{certId}/revoke, který nyní odvolává stejným kódem) vracel500se zprávoucertificate has no associated CApro certifikát bez CA systému MazeVault, například importovaný, který tlačítko Odvolat nabízí. Nyní vrací409se stejnou zprávou. - Úprava certifikátu v rozporu s pravidlem šablony vrací 409 nebo 400 místo 500 —
PUT /api/v1/certificates/{id}vracelo500 Failed to update certificate, když se upravovala nastavení automatické obnovy certifikátu, jehož nastavení obnovy řídí šablona, a když šablona patřila jiné organizaci než projekt certifikátu. Nyní vrací409(cannot manually edit renewal settings when certificate is governed by a template) a400(template belongs to a different organization than the target project, neborenewal_key_policy, který služba odmítne) s důvodem. - Zrušení pozastavení certifikátu se auditují —
POST /api/v1/certificates/{id}/unrevokevracel certifikát do stavu aktivní bez auditního záznamu, na rozdíl od odvolání. Nyní zapisujecertificate.unrevoked(entitacertificate) s uživatelem a IP adresou. Odmítnutá volání nezapisují nic. - Projektový endpoint odvolání odvolá certifikát, který pojmenovává —
POST /api/v1/projects/{id}/certificates/{certId}/revokebral id projektu jako id certifikátu, takže každé odvolání ze záložky Certifikáty projektu skončilo404a nic se neodvolalo. Nyní odvolá certifikátcertIdv projektu z cesty; certifikát jiného projektu vrací404(Certificate not found in this project), již odvolaný certifikát nebo certifikát, který nevydala žádná CA systému MazeVault, vrací409. - Projektové PKI endpointy už neposílají interní text chyb — Při selhání databáze nebo správce tajemství vypsání CA, CSR a certifikátů projektu, vytvoření projektové CA (
/api/v1/projects/{id}/ca,/csr,/certificates) a vypsání tajemství integrace (/api/v1/projects/{id}/integrations/{integrationId}/secrets) vkládaly do odpovědi původní chybu (názvy tabulek, SQL stav, text poskytovatele). Nyní vrací500s obecnou zprávou ve stejném tvaru; příčina se pouze zapíše do logu. - Schválení nebo zamítnutí projektového CSR, který zmizel nebo už byl rozhodnut, vrací 404 nebo 409; přiřazení chybějící šablony vrací 404 —
POST /api/v1/projects/{id}/csr/{csrId}/approvea…/rejectvracely500pro CSR, který neexistoval, patřil jinému projektu nebo ho mezitím rozhodl či archivoval někdo jiný (neaktuální seznam v záložce Schvalování CSR). Neznámý nebo cizí CSR nyní vrací404, CSR, který už není ve stavu čekající,409s jeho stavem; požadavek se obsazuje podmíněnou aktualizací (schválení) nebo se zamkne a znovu přečte (zamítnutí), takže ho nemohou zpracovat dva schvalovatelé zároveň.POST /api/v1/projects/{id}/templates/{template_id}vracel500pro šablonu nebo projekt, které už neexistují, i pro šablonu jiné organizace; nyní vrací404a400(template and project belong to different organizations). - Projektové CSR endpointy fungují s API tokenem — Požadavek s API tokenem nenese do projektových CSR endpointů organizaci, takže
POST /api/v1/projects/{id}/csr/{csrId}/approvea…/rejecthledaly požadavky bez organizace a žádný nenašly, a CSR odeslaný tokenem (POST /api/v1/projects/{id}/csr) se uložil bez organizace, takže ho nemohl nikdo schválit. Endpointy nyní používají organizaci, kterou požadavku přidělí kontrola oprávnění (u tokenu výchozí organizaci, stejně jako u relace). - Změny CSR a inicializace CA projektu se auditují — Odeslání (
POST /api/v1/projects/{id}/csr), schválení a zamítnutí projektového CSR a inicializace projektové CA (POST /api/v1/projects/{id}/ca/initialize) nezapisovaly žádný auditní záznam (inicializace CA zapisovala jen dva ladicí záznamy o typu projektu, jeden z nich ještě před ověřením požadavku; oba jsou odstraněny). Nyní zapisujíSUBMIT_PROJECT_CSR,APPROVE_PROJECT_CSR,REJECT_PROJECT_CSRaINITIALIZE_PROJECT_CAs jednajícím uživatelem, požadavkem nebo CA a IP adresou; odmítnuté volání nezapíše nic. - Inicializace CA neznámého projektu vrací 404 —
POST /api/v1/projects/{id}/ca/initializevracel500(Failed to get project), když projekt neexistuje nebo je archivovaný. Nyní vrací404(Project not found). - Obnovy čekající na ověření domény lze uložit — Kontrola stavu fronty obnov povolovala devět stavů, ale kód nastavuje i ověření domény (
pending_dcv), čekání na schválení ADCS (awaiting_adcs_approval), čekání na navazující krok CA (awaiting_ca_followup) amanual_review; zápis kteréhokoli z nich selhal a objednávka se tak nikdy nedostala do panelu DCV na záložce Certifikáty projektu. Migrace000217(idempotentní) povoluje všech třináct stavů, které kód používá. - Akce fronty obnov ve špatném stavu vrací 409 nebo 404 — Zrušení dokončené nebo zrušené obnovy (
POST /api/v1/renewal-queue/{id}/cancel) vracelo200a přepsalo stav, zrušení neznámé položky vracelo200, schválení položky, která nečeká, nebo neznámé vracelo500, obnovení běhu neznámé položky vracelo409bez důvodu, panel DCV vracel pro neznámou položku200s prázdným seznamem a pro špatný stav, chybějící objednávku nebo certifikát bez účtu CA400s interním textem (ID položky a certifikátu,record not found) a obnova či historie neznámého certifikátu vracela500nebo prázdný seznam. Nyní vrací404pro neznámou položku nebo certifikát a409s krátkou zprávou pro špatný stav a nic nemění; selhání volání samotné CA zůstává400s textem CA, jakákoli jiná chyba je obecná500. - Souběžná volání obnovy se nemohou provést dvakrát — Obnova běhu neúspěšné obnovy nejprve přečetla položku, potom nasadila a teprve poté ji označila jako nasazovanou, takže dvě současná volání
POST /api/v1/renewal-queue/{id}/resumemohla obě nasadit na cíle a dvě současná voláníPOST /api/v1/certificates/{id}/renewmohla obě nenajít otevřenou obnovu a zařadit dvě (dvě placené objednávky u CA). Obnova běhu nyní položku nárokuje podmíněným updatem dřív, než se cokoli nasadí (druhé volání vrací409), a obnova se zařazuje pod zámkem řádku certifikátu. - Endpointy DCV a backfill obnov neposílají interní text chyby — Při chybě databáze vracely
GET /api/v1/renewal-queue/{id}/dcvaPOST …/dcv/retry500s původní chybou aPOST /api/v1/admin/certificates/backfilla…/backfill-aiaji vkládaly domessageodpovědi. Nyní vrací obecnou500; příčina se pouze zapisuje do logu. - Backfilly certifikátů se auditují —
POST /api/v1/admin/certificates/backfilla…/backfill-aiapřepisují metadata certifikátů všech projektů, ale nezapisovaly auditní záznam. Nyní zapisují záznamyBACKFILL_CERTIFICATESaBACKFILL_CERTIFICATE_AIAs uživatelem, adresou a počtem aktualizovaných certifikátů; odmítnuté volání nezapisuje nic. - Neplatné ID organizace je ve frontě obnov 400 —
GET /api/v1/renewal-queue/?organization_id=…vracel500pro hodnotu, která není UUID. Nyní vrací400(Invalid organization ID). - Čísla CRL se nikdy nevydají dvakrát — Obnovení CRL přečetlo poslední číslo CRL autority a to další zapsalo až později, takže dvě současná obnovení (požadavek a plánovač, nebo dva požadavky) mohla vydat CRL se stejným číslem, které klienti nedokážou seřadit. Číslo se teď zabere jedním podmíněným updatem ještě před podpisem CRL; číslo, jehož CRL se pak nepodepíše, zůstane nevyužité, což RFC 5280 dovoluje.
- Obnovení CRL se audituje a pro neznámou CA vrací 404 —
POST /api/v1/ca/{id}/crl/regenerateodpovídal500s interním textem služby (failed to get CA: NOT_FOUND: …) pro neznámou CA i pro CRL, které se nepodařilo podepsat, a nezapisoval audit. Neznámá CA nyní vrací404 CA not found(403pro volajícího s rolí omezenou na organizaci, viz „Routy certifikačních autorit zůstávají v organizaci volajícího“), selhání podpisu obecné500 Internal server error(příčina jde jen do logu) a každé obnovení se zaznamenává jakoREGENERATE_CRLs uživatelem, CA a druhem a číslem CRL; odmítnuté volání nezaznamená nic. - HSM a externí konfigurace CA vrací 404 pro neznámou CA a projeví se okamžitě —
POST /api/v1/ca/{id}/hsm,…/external/configure,…/external/testa…/external/templates/syncodpovídaly500pro neexistující CA (externí konfigurace se pro ni dokonce pokusila uložit řádek). Nyní odpovídají404 CA not found(403pro volajícího s rolí omezenou na organizaci, viz „Routy certifikačních autorit zůstávají v organizaci volajícího“). Nastavení HSM mění jedním updatem jen sloupce HSM dané CA místo zápisu celého dříve přečteného řádku, takže už nemůže vrátit souběžnou změnu (například adresu OCSP), a zahodí cachovaného providera CA, takže se nová konfigurace použije při podpisu hned, ne až po vypršení cache. Externí konfigurace a aktualizace CA jsou jedna transakce; při selhání aktualizace nezůstane napůl zapsaná konfigurace. Konfigurace externí CA dříve nikdy neuspěla (odpovídala500 Failed to configure external CA, protože zapisovala sloupce CA, které neexistují); nyní zapíše poskytovatele dotype,provider_typeaprovider_statusCA a odpoví200. - Změny konfigurace CA se auditují — Nastavení HSM nebo externí CA u autority a synchronizace jejích šablon (
POST /api/v1/ca/{id}/hsm,…/external/configure,…/external/templates/sync) nezapisovaly audit. Nyní se zaznamenávají jakoCONFIGURE_CA_HSM,CONFIGURE_CA_EXTERNALaSYNC_CA_TEMPLATESs uživatelem, CA a typem poskytovatele (nebo počtem šablon), nikdy s PINem, přihlašovacími údaji ani jinými hodnotami konfigurace; odmítnuté volání nezaznamená nic. - Test připojení k externí CA vyžaduje
ca:admina audituje se —POST /api/v1/ca/{id}/external/testkontaktuje externí CA a zapisuje její stav, ale stačilo muca:read. Nyní vyžadujeca:adminjako konfigurace externí CA (volající jen s čtením dostane 403) a zapisuje do audituTEST_CA_EXTERNALs uživatelem a CA. - Formulář HSM u CA nastaví použitelné HSM —
POST /api/v1/ca/{id}/hsmpřijímal jen plochou konfiguraci HSM, takže tělo{provider, config}z konzole vrátilo 200, ale uložilo zapnuté HSM bez poskytovatele; CA pak přestala fungovat (selhalo vydání CRL i podepisování) a nešlo to vrátit. Route nyní přijímá tělo z konzole (poskytovatel se stane typem,configpoli; plochý tvar stypefunguje dál) a pro prázdný či nepodporovaný typ poskytovatele (pkcs11,aws_kms,azure_kv,gcp_kms,trezor,ledger) odpoví 400 dřív, než cokoli změní. - Inicializace kořenové CA odmítá velikosti klíče a platnosti, které nemohou fungovat —
POST /api/v1/ca/initializeaPOST /api/v1/projects/{id}/ca/initializeodpovídaly500pro RSA klíč menší než 2048 bitů, přijímaly zápornou nebo absurdní platnost a generovaly klíč libovolné velikosti i minuty (velikost milion bitů). Nyní odpovídají400s důvodem pro velikost RSA klíče mimo 2048–8192 a provalid_yearsmimo 1–100, ještě než se cokoli vygeneruje nebo uloží. - Inicializace kořenové CA se audituje — Vytvoření kořenové CA přes
POST /api/v1/ca/initializenezapisovalo audit. Nyní se zaznamenává jakoINITIALIZE_CAs uživatelem, novou CA a jejím názvem (nikdy s klíčovým materiálem); odmítnuté volání nezaznamená nic. - Routy šablon certifikátů vrací 404 pro neznámou šablonu a 400 pro špatnou organizaci —
GET,PUTaDELETE /api/v1/certificate-templates/{id}odpovídaly500pro šablonu, která neexistuje (nebo byla smazána), aDELETEničeho odpovídal204a zapsal auditDELETE_TEMPLATE. Nyní odpovídají404 Template not founda audituje se jen smazání, které něco smazalo. Chybně zadanéorganization_idu seznamu a vytvoření odpovídá400 Invalid organization IDmísto500. Úprava šablony zamkne její řádek pro čtení a zápis, takže dvě souběžné úpravy už nepřepíšou pole jedna druhé. - Šablona certifikátu přijímá jen CA účet a produkt své organizace —
POST /api/v1/certificate-templates/aPUT …/{id}ukládalyca_account_idaca_product_idz těla bez kontroly, takže šablonu šlo nastavit k vydávání z CA účtu jiné organizace (nebo neexistujícího), který pak objednával certifikáty s účtem této organizace. Účet musí patřit organizaci šablony a produkt tomuto účtu (nebo bez účtu některému účtu organizace); jinak routa odpoví400a nic neuloží. Stejná kontrola platí, když šablonu certifikátu vytváří nebo mění šablona projektu (viz „Šablony projektů zůstávají ve své organizaci“). - Souběžné obnovy už nevyčerpají databázová spojení — Zahájení obnovy (tlačítko Obnovit,
POST /api/v1/certificates/{id}/renewa obnovy rotační služby) zamkne certifikát a pak četlo politiku opakovaného použití klíče přes sdílený pool spojení, takže každá obnova držela jedno spojení a čekala na druhé. Při dostatečném počtu obnov najednou (zhruba tolik, kolik má pool spojení, ve výchozím stavu 25) držela každé spojení obnova čekající na další a celý backend přestal odpovídat. Politika se nyní čte na spojení vlastní transakce obnovy. - Zamítnutí projektového CSR nedrží databázi, dokud se maže klíč —
POST /api/v1/projects/{id}/csr/{csrId}/rejectzamykal žádost v transakci a uvnitř mazal její externě uložený klíč přes služby, které používají sdílený pool spojení, takže zamítnutí drželo jedno spojení a čekalo na druhé. Dostatek takových volání najednou pool vyčerpal. Žádost se teď zabere (stavrejected) v krátké transakci a klíč se maže až potom; žádost schválená mezitím už o klíč přijít nemůže a když se klíč smazat nepodaří, zamítnutí se vrátí zpět (CSR zůstanependinga volání odpoví500). - Schválení a spuštění obnovy se auditují bez ohledu na běh —
POST /api/v1/renewal-queue/{id}/approveaPOST /api/v1/certificates/{id}/renewzapisovaly audit (APPROVE_RENEWAL,TRIGGER_RENEWAL) jen při úspěchu celé obnovy, ačkoli schválení je uloženo a položka fronty existuje dřív, než obnova běží. Schválení nebo spuštění, jejichž běh selhal, čeká na CA (běžný výsledek u DigiCert a SSLMarket) nebo přišlo o položku ve prospěch jiného workeru, nezanechalo stopu. Obojí se nyní audituje ihned po uložení, s výsledkem běhu (dokončen, čeká na CA nebo operátora, selhal, převzal jiný worker); odmítnuté schválení a spuštění, které jen našlo už běžící obnovu, nic nemění a už se neauditují (druhé se dřív auditovalo). - Rotační cesty certifikátu už nevracejí databázové chyby a selhání čtení už není 404 — Rotační konfigurace, historie, předběžné kontroly a cíle nasazení certifikátu při selhání databáze nebo rotační služby vracely v těle 500 text chyby a čtení způsobilosti, běhu a cíle vracelo jakoukoli chybu databáze jako 404 „not found“. Nyní vracejí pevné tělo „Internal server error“ a 404 ponechávají pro záznamy, které neexistují.
- Změny cílů nasazení a rotační konfigurace certifikátu se auditují — Vytvoření, úprava a smazání cíle nasazení (
POST,PUT,DELETE /api/v1/certificates/{id}/targets…) a úprava rotační konfigurace (PUT /api/v1/certificates/{id}/rotation/config) nezapisovaly žádný auditní záznam. Každá změna nyní zapíše záznam (certificate_rotation_target_created,…_updated,…_deleted,certificate_rotation_config_updated) s názvy změněných polí, nikdy s jejich hodnotami, a s výsledkem outcome=success, případně outcome=failed, když změna na serveru selhala. - Neplatné id certifikátu na cestách cílů certifikátu je 400 —
GET,PUT,DELETE /api/v1/certificates/{id}/targets/{targetId},GET …/statusaPOST …/syncid certifikátu v cestě nebraly v úvahu, takže neplatné id se zpracovalo jako platné (200 nebo 204). Nyní vracejí 400 „Invalid certificate ID“, stejně jako ostatní cesty certifikátu. - Přiřazení nalezených SSH klíčů působí jen na klíče organizace volajícího —
POST /api/v1/ssh/discovery/{id}/assign,/ignore,/bulk/assigna/bulk/ignorepůsobily na libovolný nalezený klíč. Nově působí na klíč jen tehdy, když agent, který jej našel, patří do organizace volajícího (klíč agenta bez organizace vyžaduje oprávnění neomezené na organizaci); jiný klíč, stejně jako neznámý, odpovídá404Key not founda hromadný požadavek, který takový klíč obsahuje, nezmění žádný ze svých klíčů. Projekt jiné organizace nebo neznámý projekt či uživatel v přiřazení odpovídá404. Seznam, statistiky a návrhy shody zůstávají globální. - SSH klíče uživatele se čtou jen v rámci organizace volajícího —
GET /api/v1/rbac/users/{id}/ssh-keysvypisovala všechny nalezené klíče přiřazené uživateli, včetně klíčů nalezených agenty jiných organizací. Nově vypisuje jen klíče nalezené agenty organizace volajícího (klíče agentů bez organizace jen pro oprávnění neomezené na organizaci). - Rotační konfigurace SSH klíčů se posuzují přes jejich klíčový pár —
GET/POST /api/v1/ssh/rotation,GET /api/v1/ssh/rotation/key/{key_pair_id},PUTaDELETE /api/v1/ssh/rotation/{id}zobrazovaly a měnily rotační konfiguraci libovolného klíčového páru. Konfigurace je nově dostupná jen přes svůj klíčový pár: projekt klíčového páru musí patřit do organizace volajícího (nebo do organizace, kde volající oprávnění má, jako role neomezená na organizaci) a konfiguraci vidí jen vlastník klíčového páru nebo správce SSH; seznam obsahuje jen takové konfigurace a jakákoli jiná odpovídá jako neexistující (404). Změna nebo smazání neexistující konfigurace odpovídá404(dvojí smazání dříve vracelo204) a vytvoření konfigurace pro neznámý klíčový pár odpovídá404key pair not found(dříve500). - Chyby SSH discovery a SSH rotace už neobsahují text databáze — Selhání za
/api/v1/ssh/discovery,/api/v1/ssh/rotationa/api/v1/rbac/users/{id}/ssh-keysodpovídalo500s textem chyby ovladače; nově odpovídá{"error":"Internal server error"}a příčina se jen zaloguje. Vytvoření rotační konfigurace pro klíčový pár, který ji už má, odpovídá409(dříve500). Rotační konfigurace klíčového páru, kterou nelze načíst (GET /api/v1/ssh/rotation/key/{key_pair_id}), odpovídá500, ne404rotation config not found, takže selhání databáze se nezobrazí jako „zatím bez konfigurace“. - Chyby agentních SSH cest už neobsahují text databáze — Selhání za dotazováním a potvrzováním autorizovaných klíčů agentem (
/api/v1/agents/me/authorized-keys/...,/agent/{agent_id}/authorized-keys/...), za jeho hlášením SSH discovery (POST /api/v1/agents/me/ssh-discovery) a zaPOST /agent/discovervracelo500s textem chyby ovladače; nově vrací{"error":"Internal server error"}a příčina se jen zaloguje. - Nasazení klíčů agentem, hlášení SSH discovery a discovery agentů se auditují i s výsledkem — Potvrzení nasazení autorizovaného klíče agentem (
SSH_AUTHORIZED_KEY_DEPLOYMENT_CONFIRMED, výsledekdeployednebofailed), jeho hlášení SSH discovery (SSH_DISCOVERY_REPORT_SUBMITTED, počet klíčů) aPOST /agent/discover(AGENT_DISCOVERED, výsledekcreated,updated, neborefusedu odregistrovaného či revokovaného agenta) nově zapisují auditní záznam. - Přiřazení nalezených SSH klíčů a změny rotačních konfigurací SSH se auditují s výsledkem — Přiřazení nebo ignorování nalezených SSH klíčů (jednotlivě i hromadně) a vytvoření, změna či smazání rotační konfigurace SSH nově zapisují auditní záznam s výsledkem (
assigned,ignored,created,updated,deleted) a záznam také pro zamítnutý nebo selhaný požadavek (refused,failed). Změna rotační konfigurace zapisuje jen interval a stav a přijímá jen stavactivenebopaused(jinak400); přiřazení klíče už nepřepisuje pole, která obnovuje hlášení agenta. - Výměna dat keytabu a uložení politiky šifer keytabů opět fungují —
PUT /api/v1/keytabs/{id}s novýmikeytab_dataaPUT /api/v1/keytabs/cipher-policyvracely500pro každý platný požadavek (typy šifrování a seznamy šifer se do databáze zapisovaly ve tvaru, který odmítla), takže nešlo keytab vyměnit ani změnit politiku šifer organizace. Obě cesty nově uspějí: výměna uloží keytab, jeho typy šifrování a soulad, politika se uloží a rozhoduje o souladu, který uloží obnovení. - Chyby keytabů už nenesou text databáze a opravitelný vstup vrací 4xx — Selhání za
/api/v1/keytabs(výpis, čtení, úprava, mazání, historie, soulad, politika šifer, objevené keytaby, přehled) vracelo500s textem databázové chyby ve zprávě a databázová chyba při čtení keytabu vracela404. Nově vracejí500Internal server error(příčina se jen zaloguje) a databázová chyba se už nebere jako neznámý keytab. Vstup, který volající může opravit, je400/404se svou zprávou místo500: náhradníkeytab_data, která není keytab (400), neznámýenforcement_modepolitiky šifer (400, odmítnutá politika se už neukládá) a stažení keytabu, který neukládá soubor keytabu, například vzniklého z objevení (404). - Změny keytabů se auditují i s výsledkem a úprava keytabu přijímá jen známé stavy — Úprava a smazání keytabu, uložení politiky šifer a obnovení souladu šifer (
PUTaDELETE /api/v1/keytabs/{id},PUT /api/v1/keytabs/cipher-policy,POST /api/v1/keytabs/refresh-compliance) nezapisovaly žádný záznam auditu. Nově zapisují záznamykeytab.update,keytab.delete,keytab.cipher_policy_updateakeytab.compliance_refresh, které končí výsledkem, a auditují se i odmítnutá nebo selhaná úprava, smazání, stažení, import a import objeveného keytabu (outcome: refusednebooutcome: failed); žádný záznam neobsahuje hodnotu keytabu. Úprava keytabu sestatus, který neníactive,inactive,expired,revokedanidiscovered, vrací400(dříve uložila libovolný text). Výměna souboru keytabu už nečte politiku šifer, dokud její transakce drží databázové spojení, takže souběžné výměny nevyčerpají pool spojení, a dvě souběžné úpravy jednoho keytabu archivují jeho verze jednu po druhé. - Routy spravovaných tokenů fungují pro API tokeny bez
?organization_id=— Routy spravovaných tokenů (/api/v1/tokens) četly organizaci jen ze session nebo JWT, takže API token (Terraform provider, CLI, automatizace) vracel pro každý požadavek400 organization context required, pokud neposlal?organization_id=. Nově jednají v organizaci API tokenu stejně jako session; parametr dotazu má přednost a oprávnění se dál posuzuje. - Spravované tokeny se posuzují ve své organizaci a projektu — Vytvoření spravovaného tokenu s
project_id, který neexistuje, vracelo500a projekt jiné organizace se přijal. Nový token nově vyžaduje projekt organizace volajícího (jinak404) a oprávnění v něm a každá routa tokenu podle id (čtení, zobrazení hodnoty, úprava, obnovení, smazání a cíle) posuzuje oprávnění v projektu tokenu, nebo v jeho organizaci, když projekt nemá, takže role omezená na jednu organizaci je odmítnuta (403) u tokenu vázaného na projekt jiné organizace. Výpisy dál obsahují jen organizaci volajícího. - Zobrazení spravovaného tokenu se nikdy neukládá do cache —
GET /api/v1/tokens/{id}/value(záměrné zobrazení uložené hodnoty tokenu, vyžadujetoken:admin) nově vracíCache-Control: no-store, takže prohlížeč ani proxy hodnotu neuchová. Zobrazení se dál auditují (záznam nikdy neobsahuje hodnotu) a žádná jiná routa tokenů ani routa servisních identit kromě vytvoření (které jednou vrátí nové client secret) nenese uloženou hodnotu ani tajemství. - Chyby servisních identit už nenesou text databáze a přejmenování tokenu se ověřuje — Selhání za
/api/v1/service-identitiesvracelo500s textem databázové chyby ve zprávě; nově vrací500Internal server error(příčina se jen zaloguje) a databázová chyba při čtení identity se už nebere jako neznámá identita. Úprava neznámé identity vracela500 record not founda smazání neznámé204; obojí je nově404. Přejmenování spravovaného tokenu na prázdný název je400a na název jiného tokenu stejné organizace a projektu409, stejně jako při vytvoření (dříve se uložilo). - Cíl spravovaného tokenu musí používat integraci organizace tokenu — Přidání cíle nasazení ke spravovanému tokenu přijalo libovolné id integrace. Integrace nového cíle musí nově existovat a patřit do organizace tokenu (jinak
404) a volající potřebuje oprávněnítoken:writev projektu, kterému integrace patří (jinak403). Agenta cíle posuzuje další položka. - Změny spravovaných tokenů a servisních identit se auditují s výsledkem a úpravy přijímají jen známé hodnoty — Odmítnuté nebo selhané úpravy, obnovení, smazání, zobrazení, změny cílů a vytvoření spravovaného tokenu i servisní identity nezapisovaly žádný záznam auditu; nově zapisují záznam, který končí výsledkem (
outcome: refusednebooutcome: failed), a záznamy servisních identit končícreated,updatednebodeleted; žádný záznam neobsahuje hodnotu tokenu ani tajemství. Úprava spravovaného tokenu sestatus, který neníactive,expiredanirevoked, vrací400(dříve uložila libovolný text) a úprava servisní identity zapisuje jen zobrazované jméno, popis a e-mail vlastníka, takže souběžná rotace tajemství už není přepsána. Smazání tokenu odstraní jeho řádky v jedné transakci dříve, než se smaže jeho přesměrovaná hodnota. - Routy keytabů fungují pro API tokeny bez
?organization_id=— Routy keytabů (/api/v1/keytabs) četly organizaci jen ze session nebo JWT, takže API token vracel pro každý požadavek400 organization context required, pokud neposlal?organization_id=. Nově jednají v organizaci API tokenu stejně jako session; parametr dotazu má přednost a oprávnění se dál posuzuje. - Import keytabu musí uvádět projekt organizace volajícího — Import keytabu nebo objeveného keytabu s
project_idjiné organizace či neexistujícím se uložil bez kontroly (a záznam auditu uváděl cizí projekt). Projekt nově musí existovat v organizaci volajícího (jinak404) a volající potřebujekeytab:writena něm (jinak403); pro odmítnutý projekt se nic neimportuje. - Spravovaný token se doručuje jen agentovi svého rozsahu — Cíl nasazení spravovaného tokenu mohl uvádět libovolného agenta, takže se hodnota tokenu mohla poslat agentovi jiné organizace nebo projektu, ke kterému token nepatří. Cíl s agentem nově vyžaduje agenta s aktivní integrací projektu tokenu, má-li token projekt, jinak agenta organizace tokenu (jinak
404); agent bez organizace token nikdy nedostane. Doručení kontroluje totéž, takže cíl vytvořený dříve s cizím nebo bezorganizačním agentem selže bez odeslání hodnoty a žádná chyba ani výstup hodnotu tokenu nenese. - Stránka výsledků discovery agenta zobrazuje nalezená data — Stránka Discovery Results agenta (
/agents/{id}/discovery) nyní u každého certifikátu zobrazuje subjekt, vydavatele, expiraci, umístění, zdroj a stav Managed z uložených dat discovery. Dřívější stránka četla pole, která API nevrací, takže buňky byly prázdné a každý certifikát se zobrazoval jako „Unmanaged“. - Multi-DC Sync Status zobrazuje zdrojové datacentrum — Sloupec Source DC na stránce Multi-DC Sync Status (
/multi-dc) četl pole, které backend neposílá (source_dcmístodatacenter_id), a zůstával proto prázdný. Nyní ukazuje datacentrum, které událost vytvořilo. - Historie rotací přihlašovacího údaje Entra ukazuje jen jeho rotace — Tlačítko Rotation History u přihlašovacího údaje aplikace Entra vypisovalo rotace všech přihlašovacích údajů aplikace. Nyní vypíše rotace daného údaje; tlačítko Rotation History u samotné aplikace nadále ukazuje všechny.
- Rotační nastavení Entra nelze uložit přes nepřečtenou konfiguraci — Dialog Configure Rotation u přihlašovacího údaje Entra zobrazil výchozí hodnoty, když se uložená konfigurace nepodařila přečíst, a jejich uložení nahradilo uložené akce po rotaci prázdným seznamem. Dialog nyní ukáže chybu s tlačítkem Retry a nejde uložit, dokud se konfigurace nepřečte. Odmítnuté uložení (neplatné nastavení, adresa webhooku, Springu nebo akce po rotaci na loopbacku či link-local adrese) se zobrazí u formuláře se zprávou backendu.
Bezpečnostní a závislostní aktualizace¶
- Akce po rotaci tajemství odmítají lokální URL — Akce po rotaci v konfiguraci rotace tajemství (
POST /api/v1/rotation/configs,PUT /api/v1/rotation/configs/{id},PUT /api/v1/secrets/{id}/rotation-config: záložka Rotace tajemství) se ukládaly bez kontroly, přestože MazeVault po rotaci volá jejichurlwebhooku a API notifikace,actuator_urlaendpointsSpringu aagent_url, takže držitelsecret:rotatemohl přimět server poslat rotovanou hodnotu sám sobě, metadatové službě cloudu nebo jiné link-local adrese. Taková URL (loopback, link-local, nespecifikovaná nebo multicast adresa v jakémkoli zápisu,localhost) se nyní odmítne400s názvem pole (napříkladpost_actions[0].config.url: URL host "169.254.169.254" is not allowed (internal network)) a nic se neuloží. Privátní rozsahy zůstávají povolené. - Nastavení rotace Entra odmítají lokální URL po rotaci — URL, které MazeVault volá po rotaci přihlašovacího údaje Entra (
webhook_urls,spring_endpointsaurl,actuator_url,endpointsaagent_urlvpost_rotation_actionsuPOSTaPUT /api/v1/entra/credentials/{id}/rotation-config), se ukládaly bez kontroly, takže držitelentra:writemohl přimět server poslat nový přihlašovací údaj sám sobě, metadatové službě cloudu nebo jiné link-local adrese. Taková URL (loopback, link-local, nespecifikovaná nebo multicast adresa v jakémkoli zápisu,localhost) se nyní odmítne400s názvem pole (napříkladwebhook_urls[0]: URL host "169.254.169.254" is not allowed (internal network)) a nic se neuloží. Privátní rozsahy (10.*,192.168.*) zůstávají povolené. - Akce po rotaci certifikátu odmítají lokální URL — Akce po rotaci v konfiguraci rotace certifikátu (
PUT /api/v1/certificates/{id}/rotation/config) nyní procházejí stejnou kontrolou URL jako nastavení rotace tajemství a Entra:urlwebhooku nebo API notifikace,actuator_urlčiendpointsSpringu neboagent_url, které míří na samotný server, link-local adresu (metadata cloudu), nespecifikovanou nebo multicastovou adresu v jakémkoli zápisu, vrací400s názvem pole (post_rotation_actions[<n>].config.<key>) a nic se neuloží. Privátní rozsahy zůstávají povolené. - Vytvoření připraveného sekundárního údaje Entra už nevrací nové tajemství —
POST /api/v1/entra/credentials/{id}/staged-secondaryvracel volajícímu hodnotu nového klientského tajemství v otevřeném textu (new_secret), přestože ho MazeVault sám nasazuje do nastavených cílů po rotaci a trasa rotace ho nikdy nevracela. Připravený sekundární údaj a povýšení (POST …/promote-primary) nyní vracejí jen id nového údaje, id klíčů, stav a zprávu;new_secretz obou odpovědí zmizel. - Trasy přihlašovacích údajů Entra se posuzují tam, kam údaj patří — Trasy přihlašovacího údaje Entra (
DELETE /api/v1/entra/credentials/{id},POST …/preflight,POST …/rotate,POST …/dry-run,GET …/rotation-history,GET,POSTaPUT …/rotation-config,POST …/staged-secondary,POST …/promote-primary,POST …/verify-secondary),POST /api/v1/entra/sync-conflicts/{id}/resolveaGET /api/v1/entra/subjects/{id}posuzovaly oprávnění jen v prostředí požadavku, takže role omezená na dev mohla v Entra smazat nebo rotovat přihlašovací údaj z prod, změnit jeho konfiguraci rotace nebo povýšit jeho připravený sekundární údaj a role omezená na organizaci mohla pracovat s údaji jiné organizace. Nyní se posuzují v prostředí integrace Entra, ke které údaj (konflikt, subjekt) patří, a v jejím projektu: jinak403a nic se nezmění. Role omezená na projekt nyní dosáhne na trasy přihlašovacích údajů aplikací svého projektu; vyřešení konfliktu a čtení subjektu takovou roli dál odmítají. Neznámý přihlašovací údaj vrací404Entra credential not founddřív, než se cokoli přečte (dříve různé texty404,200s neúspěšnou kontrolou u suchého běhu,409u připraveného sekundárního údaje a povýšení,500uPUT …/rotation-config); neznámý konflikt vrací404conflict not found(dříve500). - Bezpečnost: přihlašovací údaj Entra bez své integrace vrací 404 — Přihlašovací údaj, jehož registrace aplikace neměla řádek integrace, se posuzoval v prostředí požadavku, takže na něm mohla jednat role omezená na toto prostředí. Jeho trasy (
/api/v1/entra/credentials/{id}/…aPOST /api/v1/rotation/resources/entra_credential/{id}/trigger) nyní vracejí404(fail closed), dokud se aplikace neopraví. - Konflikty synchronizace integrace Entra se posuzují tam, kam integrace patří —
GET /api/v1/entra/{integrationId}/sync-conflictsposuzovaloentra:readjen v prostředí požadavku, takže role omezená na dev mohla vypsat konflikty synchronizace integrace v prod svého projektu. Nyní se posuzuje v prostředí a projektu integrace: jinak403. Neznámá integrace vrací404integration not found(dříve200 []). - Seznam integrací napříč projekty ukazuje jen to, co volající smí číst —
GET /api/v1/integrations(výběr integrace na dashboardu Entra) vracel integrace všech projektů všech organizací ve všech prostředích každému, kdo mělintegration:read. Nyní vrací jen integrace projektů organizace požadavku v prostředích a projektech, kde má volajícíintegration:read: role omezená na dev vidí integrace dev a správce organizace nikdy nevidí integrace jiné organizace. Konfigurace integrací se nevracela a nevrací. - Trasy aplikací Entra se posuzují tam, kam integrace patří — Trasy registrací aplikací integrace Entra (
GETaPOST /api/v1/entra/{integrationId}/apps,POST …/sync,GET …/subjects) a aplikace (GET,PUTaDELETE /api/v1/entra/apps/{id},GETaPOST …/credentials,POST …/mark-managed,GET …/rotation-history) posuzovalyentra:read/entra:writejen v prostředí požadavku, takže role omezená na dev mohla číst, měnit nebo mazat aplikace integrace v prod a role omezená na organizaci aplikace jiné organizace. Nyní se posuzují v prostředí a projektu integrace (aplikace v prostředí a projektu své integrace): jinak403a nic se nezmění. Neznámá integrace vrací404integration not found(dříve500u seznamu, vytvoření a synchronizace a200 []u subjektů). Role omezená na projekt nyní dosáhne na trasy Entra integrací a aplikací svého projektu, včetněGETaPUT /api/v1/entra/{integrationId}/scope, které jí vracely403. - Gateway pracuje jen se svými úlohami — Každá ověřená gateway mohla vypsat a převzít úlohy jiné gateway, když poslala její id (
GET /api/v1/gateway/tasks?gateway_id=,GET /api/v1/gateways/{id}/tasks,gateway_idvPOST /api/v1/gateway/tasks/{id}/claim), a mohla změnit libovolnou úlohu podle jejího id (PATCH /api/v1/gateway/tasks/{id}); úlohy nesou operace s Key Vaultem a Entrou.gateway_idjiné než id ověřené gateway (X-Gateway-ID) nyní vrací403 {"error": "gateway_id does not match the authenticated gateway"}a změna úlohy jiné gateway nebo neexistující úlohy vrací404 {"error": "task not found"}(neexistující úloha dříve vracela500). Gateway posílají své vlastní id, takže se jich změna netýká. - Zkušební běh rotace už nic nerotuje — Zkušební běh certifikátu (tlačítko Dry Run na záložce rotace certifikátu,
POST /certificates/{id}/rotation/triggerneboPOST /rotation/resources/certificate_renewal/{id}/triggers"dry_run": true) parametrdry_runignoroval a provedl skutečnou obnovu certifikátu, která u předplatitelské CA mohla založit placenou objednávku, a konzole pak hlásila, že se nic nezměnilo. Spouštěč zdroje dělal totéž u všech ostatních druhů: zkušební běh cíle nasazení certifikátu ho synchronizoval, u přihlašovacího údaje Entra nebo servisní identity vytvořil nový tajný klíč, u systémového klíče nebo páru klíčů SSH ho rotoval. Zkušební běh těchto druhů nyní nic nespouští: vrací200s preflightem zdroje jen pro čtení (RotationPreflightResponse, stejné vyhodnocení jako preflight publikační brány), posuzuje se ve vlastním rozsahu zdroje se stejným oprávněním jako spouštěč a audituje se soutcome=dry run. Zkušební běh cíle nasazení, který nelze synchronizovat ručně, vrací400stejně jako jeho spouštěč. Spouštěč certifikátu dokumentuje obě odpovědi (běh, nebo preflight zkušebního běhu). Zkušební běh tajného klíče dál spouští své kroky rotace v režimu pouhé kontroly, několik z nich aledry_runignorovalo a zapisovalo: krok tajného klíče uložil náhledové heslo***dry-run-preview***jako novou hodnotu tajného klíče (v režimu orchestrátoru zvýšil jeho verzi), kroky odeslání do Key Vaultu, synchronizace agenta a synchronizace proměnné CI/CD tuto hodnotu odeslaly do propojených cílů a stažení z Key Vaultu přepsalo místní tajný klíč novější hodnotou z trezoru. Každý z těchto kroků nyní při zkušebním běhu svůj zápis vynechá. Zkušební běh tajného klíče navíc ukládal svůj workflow zkušebního běhu do sdílené konfigurace rotace tajného klíče, kterou si pak běh na pozadí znovu načetl: zkušební běh a skutečná rotace spuštěné současně si mohly prohodit kroky (zkušební běh provedl skutečnou rotaci, nebo skutečná rotace potichu nic neudělala). Zkušební běh tajného klíče si nyní svůj workflow drží sám a konfiguraci rotace nikdy nezapisuje; už nevytváří zálohu, při selhání nic neobnovuje ani nekompenzuje, nespouští akce po rotaci, neaktualizuje stav synchronizace integrací, neposouvá plán rotace ani neuzavírá incident selhání rotace a během skutečné rotace už neselže s „rotation already in progress“. Jeho běh je v metadatech označendry_run, stejně jako zařazený záznam běhu, kterým spouštěč odpovídá202, takže obnovení selhaného už neposouvá plán ani neuzavírá incident. - Integrace agenta se upravuje jen tam, kde existuje —
PUT /api/v1/agent-integrations/{id}posuzovalo id integrace, jako by to bylo id projektu, který žádný projekt není, takže roleproject:writeomezená na organizaci požadavku upravovala integrace agentů všech ostatních organizací a role omezená nadevupravila integraci zprod(nebo ji doprodpřesunula) tím, že uvedladev. Integrace se nyní posuzuje ve vlastním projektu, ve vlastním prostředí a v prostředí, ke kterému ji požadavek váže; role přiřazená jednomu projektu upravuje jen integrace tohoto projektu. - Tajný klíč se propojí jen s integrací vlastního projektu a jeho propojení a cíle se posuzují v jeho rámci —
POST /secrets/{id}/linkspřijímalo integraci libovolného projektu či organizace (porovnávalo se jen prostředí) a hodnotu tajného klíče do ní následně odeslalo, takže uživatel, který smí rotovat jeden tajný klíč, mohl jeho hodnotu poslat do integrace, ke které přístup neměl. Integrace musí patřit projektu tajného klíče (jinak 404).DELETE /secrets/{id}/links/{linkId}smazalo libovolné propojení bez ohledu na tajný klíč v cestě; propojení musí patřit tajnému klíči (jinak 404, i pro neexistující propojení, které dřív vracelo 204). Cíl nasazení, který uvádí integraci jiného projektu (binding_refneboconfig.integration_id), nově vyžaduje takésecret:writev tomto projektu. - Rotační konfigurace, propojení a cíle tajného klíče se posuzují v jeho vlastním prostředí a projektu —
/secrets/{id}/rotation-config,/linksa/rotation/targets(i jejich synchronizace) posuzovaly požadavek v prostředí, které uvedl klient (?environment=nebo hlavička), takže uživatel omezený nadevmohl číst, měnit, propojovat nebo synchronizovat rotaci tajného klíče zprodtím, že uvedldev. Nyní se posuzují v prostředí a projektu samotného tajného klíče; role přiřazená jednomu projektu funguje na tajných klíčích tohoto projektu a na ostatních je odmítnuta.DELETE /secrets/{id}/links/{linkId}s neplatným id tajného klíče nyní vrací 400 místo smazání propojení. - Neautentizované routy pro registraci agentů jsou odstraněny z API jádra —
POST /api/v1/enroll,POST /api/v1/heartbeataPOST /api/v1/key-exchangebackendu již neexistují. Registrace nevyžadovala autentizaci a komukoli vracela licenční klíče, zabalené šifrovací klíče a OAuth klienty; výměna klíčů nemohla nikdy uspět. Nevolala je žádná komponenta MazeVault: licencování a POC registrace probíhají přes licenční server (LICENSE_SERVER_URL), který zůstává beze změny. - ACME finalize a revoke-cert již neposílají text CA providera — Když CA provider selhal nebo odmítl podpis či zneplatnění, ACME problem dokument obsahoval text chyby providera. Každá chyba ACME serveru (HTTP 5xx) nyní vrací pevný text
Internal server errors typemserverInternal; odpovědi 4xx si ponechávají typ a detail. - Chyby SCEP, OCSP a ACME již neposílají interní text chyby — Selhání operace SCEP, požadavku OCSP nebo volání ACME serveru nyní vrací pevný text
Internal server error(stavové kódy a tvar ACME problem dokumentu se nemění); příčina se zapisuje pouze do logu serveru. Dříve mohla odpověď obsahovat text databáze nebo knihovny. - Rotační konfigurace, běhy, zálohy a zdroje se posuzují v prostředí a projektu samotného objektu — Rotační cesty posuzovaly požadavek v prostředí, které uvedl klient (
?environment=nebo hlavička), a u konfigurací a záloh v žádném projektu, takže uživatel omezený nadevmohl číst, měnit, mazat nebo předběžně ověřit rotační konfiguraci tajného klíče zprodtím, že uvedldev, a uživatel s rolí přiřazenou jednomu projektu byl na konfiguracích tohoto projektu odmítnut. Nyní se/rotation/configs/{id}(i/preflight),POST /rotation/configs(tajný klíč v těle),/rotation/executions/{id}(i/resume),/rotation/backups/{id}/reveal|restore|acknowledgea/rotation/resources/{kind}/{id}(i/readiness,/history) posuzují v projektu a prostředí samotného tajného klíče, běhu nebo zdroje. Zobrazení, obnovení a dosud nekontrolované potvrzení zálohy vyžadujísecret:readna tajném klíči zálohy v jeho vlastním projektu a prostředí. Seznamy projektu (rotation-configs,rotation-resources) vynechají prostředí, která volající nesmí číst, a/rotation/executions,/rotation/backupsa/rotation/resourcesvypisují jen organizaci požadavku (a čitelná prostředí). - Spuštění rotace se posuzuje v prostředí a projektu rotovaného zdroje — Čtyři cesty spouštějící rotaci (
POST /certificates/{id}/rotation/trigger,POST /rotation/resources/{kind}/{id}/trigger,POST /rotation/configs/{id}/trigger,POST /secrets/{id}/rotate) posuzovaly oprávnění v prostředí, které uvedl klient, takže uživatel, který smí spouštět rotace jen vdev, mohl obnovit certifikátprodnebo rotovat tajemstvíprododesláním?environment=dev. Každé spuštění a takéGET /rotation/resources/{kind}/{id}s/readinessa/historyse nyní posuzuje v rozsahu samotného zdroje: tajemství v prostředí a projektu svého tajemství, obnova certifikátu v prostředí a projektu certifikátu, cíl nasazení v rozsahu svého certifikátu, Entra credential v projektu své registrace aplikace (a v prostředí její integrace); SSH pár klíčů vyžaduje vlastníka nebossh:admin; systémový klíč nebo service identity, které nepatří žádnému projektu, vyžadují roli neomezenou na projekt ani organizaci. Role přidělená jednomu projektu nyní může spouštět rotace tajemství a certifikátů tohoto projektu. Neznámý zdroj vrací404(neznámé tajemství u/secrets/{id}/rotatea neznámý certifikát u/certificates/{id}/rotation/triggerdříve vracely500). - Rotace systémového klíče vyžaduje
system:admin—POST /rotation/resources/system_key/{id}/triggersměl použít kdokoli srotation:write, zatímcoPOST /admin/rotation/rotatevyžadujesystem:admin. Nyní vyžaduje takésystem:admin, neomezené na organizaci ani projekt; bez něj vrací403. Konzole zobrazuje záložku Systémové klíče jen ssystem:admin. - Rotační záznamy bez projektu vyžadují roli neomezenou na organizaci — Běhy rotace bez projektu a rotační zdroje bez projektu (systémové klíče, SSH páry klíčů, service identity a tokeny bez projektu) vypisovaly
GET /rotation/executionsaGET /rotation/resourcesa podle id je mohla číst jakákoli role, která prošla cestou, včetně administrátora omezeného na jednu (nebo jinou) organizaci. Nyní je vypisuje a čte jen role neomezená na projekt ani organizaci; administrátor organizace vidí záznamy projektů své organizace. Týká se to cest rotace (/rotation/...); samotné cesty service identity pokrývá bod „Service identity vyžadují roli neomezenou na organizaci“. - Export privátního klíče SSH se posuzuje tam, kde pár klíčů leží —
POST /api/v1/ssh/keys/{id}/exportověřovalssh:adminv pevném prostředídevbez ohledu na projekt a organizaci páru klíčů, takžessh:adminomezené na jednu organizaci exportovalo privátní klíče párů jiné organizace. Export nově vyžadujessh:adminna projektu páru klíčů v prostředí požadavku; pár klíčů bez projektu vyžadujessh:adminneomezené na projekt ani organizaci (jinak403, v auditu dál jako zamítnutí). Neznámý pár klíčů vrací404ještě před ověřením oprávnění. - Konflikty rotace a neúspěšná obnovení nesou pevné zprávy — Několik odpovědí
409cest rotace (obnovení běhu, potvrzení zálohy, spuštění rotace tajemství a certifikátu, rotace systémového klíče) a auditní záznam neúspěšného obnovení opakovaly text vnitřní chyby, který mohl obsahovat id běhů, stavy nebo zabalenou chybu poskytovatele. Nově nesou pevné zprávy, napříkladrotation execution is already completedarotation backup is not in recovery_required state(už bez aktuálního stavu); obnova certifikátu, která už čeká, vracírenewal is waiting on an external partys kódemRENEWAL_IN_PROGRESS. - Certifikáty bez projektu vyžadují na cestách rotace neomezenou roli —
GET /rotation/resourcesuž rolím omezeným na organizaci skrýval rotaci obnovy a nasazení certifikátů bez projektu (importovaných nebo platformních), ale cesty rotačního zdroje podle id, jejich spouštění a/api/v1/certificates/{id}/rotation*a/targets*je takové roli dál obsluhovaly. Tyto cesty rotace nově pro certifikát bez projektu vyžadují roli neomezenou na projekt ani organizaci (jinak403); samotné cesty certifikátů (zobrazení, export, obnova) se nemění. - Opakované nasazení páru klíčů bez projektu funguje pro neomezené role —
PUT /api/v1/ssh/keys/{id}/deployvracel pro SSH pár klíčů bez projektu404všem včetně vlastníka. Takový pár klíčů nově opakovaně nasadí jeho vlastník nebossh:admin, jehožssh:writenení omezené na projekt ani organizaci; role omezená na organizaci dostane403. - Výjimka správce SSH se posuzuje tam, kde pár klíčů leží — Na
/api/v1/ssh/keys(generování, import, výpis, opakované nasazení) a/api/v1/ssh/authorized-keys(výpis, nasazení, odvolání, odebrání) se při práci s párem klíčů jiného uživatele ověřovalossh:adminv pevném prostředídevbez ohledu na organizaci a projekt:ssh:adminomezené nadevjednalo jako správce SSH všude včetně prod a omezené naprodnebylo správcem nikde.ssh:adminnově platí v prostředí požadavku na projektu páru klíčů, stejně jako na cestách rotace SSH; pár klíčů bez projektu a výpisy přes všechny vlastníky vyžadujíssh:adminneomezené na projekt ani organizaci (výpis filtrovaný projektem:ssh:adminna tomto projektu). Generování nebo import páru klíčů pro jiného uživatele nově nejdřív ověří projekt, neznámý projekt tedy vrací nejdřív404. - Administrátorské cesty systémových klíčů vyžadují neomezeného správce systému —
GET /api/v1/admin/rotation/keysaPOST /api/v1/admin/rotation/rotatepřijímalysystem:adminomezené na jednu organizaci, zatímco rotace týchž klíčů celé instalace přes/rotation/resources/system_key/{id}/triggervyžadovalasystem:adminneomezené na projekt ani organizaci. Obě administrátorské cesty nově vyžadují také toto neomezenésystem:admin(jinak403). - Service identity vyžadují roli neomezenou na organizaci — Service identity nepatří žádné organizaci, přesto
GET,POST,PUTaDELETE /api/v1/service-identities(i/{id}) dovolily roli omezené na jednu organizaci vypsat, vytvořit, upravit a smazat service identity celé instalace. Tyto cesty nově vyžadují oprávněníservice_identity:*z role neomezené na projekt ani organizaci (jinak403), stejně jako už rotace tajemství service identity. - Odmítnuté čtení rotačního zdroje už nezapisuje do read modelu —
GET /api/v1/rotation/resources/{kind}/{id},/readinessa/historyvytvořily nebo obnovily záznam rotačního zdroje dřív, než ověřily volajícího, takže volající bez přístupu (nebo z jiné organizace) přiměl server k zápisu a SSH pár klíčů bez projektu vracel500místo403. Volající se nově ověřuje nejdřív; odmítnuté čtení nic nezapíše a vrací403, neznámý objekt jako dříve404. - Preflight rotace čte jen ten, kdo smí číst jeho objekt —
GET /api/v1/rotation/preflights/{id}vracel libovolný preflight komukoli srotation:readv organizaci požadavku, včetně preflightů tajemství a certifikátů jiné organizace a systémových klíčů. Preflight se nově posuzuje stejně jako připravenost objektu, který kontroloval:rotation:readmusí platit v prostředí a projektu tohoto objektu (jinak403), preflight systémového klíče, service identity nebo bez objektu vyžaduje roli neomezenou na projekt ani organizaci a preflight, jehož objekt už neexistuje, vrací404. - Starší agentní cesty už nevydávají tokeny agentů ani SSH klíče jiných agentů — Kterýkoli přihlášený volající (uživatel bez oprávnění, API token) mohl voláním
POST /agent/discovers hostname registrovaného agenta získat platný token tohoto agenta, nebo s novým hostname založit agenta, a přesGET /agent/{agent_id}/authorized-keys/pendingaPOST /agent/{agent_id}/authorized-keys/{authorized_key_id}/confirmčíst a potvrzovat čekající autorizované SSH klíče libovolného agenta. Obě cesty/agent/{agent_id}/...nově obslouží jen aktivního agenta, kteréhoagent_idjmenuje (kdokoli jiný dostane403agent is not registered, včetně neplatnéhoagent_id, dříve400; neaktivní nebo zrušený agent dostane403agent is not activei na vlastní cestě), aPOST /agent/discovervyžaduje oprávněníagent:adminneomezené na projekt ani organizaci (jinak403). Agenti dál používají nezměněné cesty/api/v1/agents/me/authorized-keys/.... - Odmítnuté a neexistující exporty soukromého SSH klíče se auditují — Auditní záznam
ssh_key.exportzanechal jen úspěšnýPOST /api/v1/ssh/keys/{id}/export. Zamítnutý export, který dojde až do obsluhy (nejde o vlastníka klíče), a export neexistujícího klíče nově zanechá záznam také, s výsledkem (nikdy ne s klíčem). Požadavky, které už kontrola trasy zamítne kódem 403 (chybíssh:admin), se zde neauditují. - Generování, import, vytvoření s nasazením a podepsání SSH klíčů se posuzuje v organizaci volajícího —
project_idv tělePOST /api/v1/ssh/keys,/ssh/keys/import,/ssh/keys/create-and-deploya/ssh/signse neověřovalo, takže administrátor omezený na jednu organizaci mohl vytvářet klíčové páry a podepisovat certifikáty v projektu jiné organizace. Takový projekt, stejně jako neznámý, nově odpovídá404; oprávnění navíc musí platit na projektu v prostředí požadavku (403). - SSH klíčové páry pro jiného uživatele vytváří jen SSH administrátor a vytvoření, nasazení a podepsání se zapisují do auditu —
POST /api/v1/ssh/keysaPOST /api/v1/ssh/keys/importbrala vlastníka zuser_idv těle, takže kdokoli sssh:writemohl vytvářet klíčové páry jménem jiného uživatele (a auditní záznam uváděl tohoto uživatele). Nově odpovídají403, pokuduser_idnení volající nebo volající nemássh:admin, a auditní záznam uvádí volajícího. Vytvoření s nasazením, žádosti o nasazení autorizovaného klíče a neúspěšné opakování nově zapisují auditní záznam s výsledkem. - Opakované nasazení SSH klíče je omezeno na vlastníka klíče nebo SSH administrátora —
PUT /api/v1/ssh/keys/{id}/deploynasadil veřejný klíč kteréhokoli uživatele na agenta každému, kdo mělssh:write. Nově platí pravidlo ostatních tras klíčových párů: znovu nasadit může vlastník klíčového páru nebo držitelssh:admin(ostatní dostanou403) a klíčový pár projektu jiné organizace odpovídá404jako neznámý. - Uzavření incidentu se posuzuje v organizaci, projektu a prostředí incidentu a zapisuje se do auditu —
POST /api/v1/incidents/{id}/resolveuzavřel incident libovolné organizace každému, kdo mělincident:resolve, na neexistující id odpovídal200a nezanechal záznam v auditu. Nově odpovídá404pro neznámý incident i pro incident jiné organizace, role omezená na projekt uzavírá jen incidenty tohoto projektu (žádný bez projektu), oprávnění se ověřuje i v prostředí incidentu a každé uzavření se zapisuje do auditního logu s výsledkem. Při chybě se už nevrací text vnitřní chyby. - Rotační problémy: selhání jiné organizace se nevypisují ani nepotvrzují — Seznam rotačních problémů vracel selhané rotace všech organizací a potvrzení selhání fungovalo na řádku libovolné organizace. Seznam nově obsahuje jen selhání organizace volajícího a potvrzení selhání jiné organizace vrací
404, stejně jako u neznámého id. Platformní selhání, která nepatří k žádnému projektu, se vypisují a potvrzují jen pro roli, která není omezena na organizaci. - Cesta k PKCS#11 modulu se načítá přesně tak, jak ji operátor uvedl — Kontrola
HSM_PKCS11_MODULESporovnávala lexikálně očištěnou cestu zařízení, ale knihovna se načítala z cesty, jak byla zapsána; operační systém ale rozlišuje..přes symbolické odkazy, takže/allowed/dir/link/../lib.sokontrolou prošlo a mohlo načíst jiný soubor.module_path, jehož očištěný tvar se liší od zadaného (..,., zdvojená či koncová lomítka), se nyní odmítne; použijte cestu přesně tak, jak je uvedena v seznamu. - EAB přihlašovací údaje lze zneplatnit jen ve vlastní organizaci a nové vytvářet jen pro její projekty a šablony —
DELETE /api/v1/organizations/{id}/acme-credentials/{credId}hledalo údaje jen podle id, takže administrátor jedné organizace mohl zneplatnit ACME EAB údaje jiné organizace (ACME klienti té organizace se pak nemohli zaregistrovat). Údaje se nyní hledají v organizaci z cesty (jinak 404) a zneplatňují podmíněnou aktualizací (druhé zneplatnění vrátí 409, souběžná zneplatní jednou). Vytvoření údajů (POST .../acme-credentials) přijímalo projekt i výchozí šablonu libovolné organizace; oba musí patřit organizaci z cesty (jinak 404). - Nastavení PKI organizace nemůže propojit CA jiné organizace — Uložení organizace s
pki_mode: rootapki_root_cnhledalo kořenovou CA podle jména mezi CA všech organizací a propojilo první, kterou nepoužíval žádný živý účet, takže správce organizace mohl uvést jméno CA jiné organizace (jméno CA je vydavatel každého jí vydaného certifikátu) a vydávat z ní a obejít pravidloca_authority_id. Nově se hledají jen vlastní CA organizace (včetně smazaných účtů); pokud žádná není, vytvoří se nový kořen. - Cesta k modulu PKCS#11 už nemůže načíst libovolný nativní kód —
module_pathzařízení HSM typu PKCS#11 je sdílená knihovna, kterou server načítá, a načtení spouští konstruktory knihovny, takže kdokoli, kdo smí zapisovat zařízení HSM (správce organizace, API token), mohl spustit nativní kód v procesu, který drží hlavní klíč. Načítají se jen moduly, které provozovatel uvede vHSM_PKCS11_MODULES, a to na jediném místě načítání (test spojení, kontrola stavu, směrování klíčů, existující zařízení); vytvoření nebo změna zařízení PKCS#11 s jiným modulem vrací400, stejně jakoPOST /api/v1/ca/{id}/hsms poskytovatelem PKCS#11, jehož modul není uveden nebo chybí. - Relace HSM přes PKCS#11 se serializují a zavírají bezpečně — Poskytovatel PKCS#11 sdílel jednu relaci HSM a nezamčenou mapu handlů klíčů mezi souběžnými podpisy, takže paralelní podpisy mohly shodit server (souběžný zápis do mapy) nebo použít relaci poskytovatele, který se právě zavíral. Relaci i mezipaměť nově chrání jeden zámek; operace nad zavřeným poskytovatelem vrátí chybu a nesáhne na uvolněný modul.
- Neúspěšná synchronizace CA už neukládá ani nelogguje, co CA řekla — Když synchronizace (tlačítko Synchronizovat, plánovač, synchronizace produktů) selhala, surová chyba poskytovatele — která může nést tělo odpovědi CA, jméno interního hostitele nebo ozvěnu odmítnutého přihlašovacího údaje — se ukládala do
validation_errorúčtu a do úlohy synchronizace, byla čitelná přes trasy účtů a zapisovala se do logu. Nově nesou pevný text s HTTP stavem, kterým CA odpověděla; příčina se loguje bez přihlašovacích údajů a bez těla odpovědi. - CA organizace nelze převzít po smazání jejího účtu — Propojení účtu CA s autoritou (
ca_authority_idv přihlašovacích údajích) přijímalo každou CA na úrovni organizace, kterou nepoužívá žádný živý účet jiné organizace, takže poté, co organizace B smazala svůj účet interní CA, mohla organizace A propojit CA organizace B (jejíž id je součástí každého vydaného certifikátu) a vydávat z ní. CA na úrovni organizace musí nově propojovat účet téže organizace a žádný účet jiné organizace, včetně smazaných; CA, kterou žádný účet nepropojuje, se odmítne. - Změna URL účtu CA vyžaduje jeho přihlašovací údaje — Úprava, která změnila
base_url(nebo jinou URL, kterou platforma volá s přihlašovacími údaji účtu) bez odeslání přihlašovacích údajů, přeskočila kontrolu spojení a další synchronizace nebo synchronizace produktů pak poslala uložený API klíč na nového hostitele, takže ho mohl získat správce, který ho nikdy neznal. Taková úprava nově vrací400; pošlete s ní přihlašovací údaje a ověří se proti novému hostiteli. - Tajemství v nastavení účtů CA jsou maskovaná a šifrovaná — Nastavení, která schéma poskytovatele CA označuje jako tajná (přihlašovací údaje poskytovatele DNS pro DNS validaci SSLmarket, EAB HMAC klíč ACME poskytovatelů), se ukládala jako prostý JSON a každá trasa účtů CA je vracela v
metadatavšem, kdo smějí účty CA číst. Nově se ukládají šifrovaně (hodnotyENC:; stávající prostý text se zašifruje při příští změně účtu) a zobrazují se jako__MASKED__. Úprava, která pošle zpět masku nebo prázdnou hodnotu, ponechá uložené tajemství, nová hodnota ho nahradí anullho odstraní, takže úprava účtu v UI ani nasazení přes Terraform je už nepřepíše ani neprozradí. - Import certifikátu se bez organizace odmítne — Import páruje existující certifikát jen mezi certifikáty organizace; požadavek bez organizace se mlčky párovalo s certifikáty libovolné organizace. Nově vrací
403„organization context is required“, stejně jako adopce. - Zařízení HSM a politiky obnovy se hledají v organizaci z cesty — Trasy zařízení a politik pod
/api/v1/organizations/{id}/hsm-devicesa/renewal-policiesčetly, měnily, testovaly nebo mazaly zařízení či politiku jen podle id, bez ohledu na organizaci v cestě, takže správce jedné organizace (nebo kdokoli s oprávněním) mohl zasahovat do zařízení a politik jiné organizace. Nově se hledají v organizaci z cesty: id jiné organizace vrátí404a nic nezmění. Úpravy a mazání zamykají řádek, takže souběžné smazání nelze vrátit zpět. Smazání neexistující politiky obnovy nově vrací404místo204a neplatné id organizace v cestě u get, test a health zařízení vrací400. - Chyby importu certifikátu ukazují jen chyby vstupu, ať příčina obsahuje jakákoli slova — Routy importu rozhodovaly, zda chybu ukázat, hledáním slov jako „invalid“ nebo „required“ kdekoli v textu, takže selhání uložení klíče, trezoru nebo databáze, jehož zpráva některé z nich obsahovala (například selhání odložení klíče do trezoru nebo neplatná posloupnost bajtů při aktualizaci), vracelo
400s interním textem, a to při jednotlivém importu i v chybách položek hromadného importu a importu souboru. Chyba se nově ukáže jen tehdy, když začíná jako vlastní chyba vstupu služby importu (neplatný nebo nečitelný certifikát či klíč, nesoulad, duplicita, nepodporovaný formát, špatné heslo, chybějící oprávnění); vše ostatní vrací500„Internal server error", u položky „Failed to import certificate", a příčina jde do logu. - Certifikáty vydané ze žádosti vznikají v prostředí žádosti —
POST /api/v1/certificates/csrse posuzuje v prostředí volání, ale certifikát vydaný ze žádosti vznikl vždy vprod, takže uživatel omezený nadevmohl získat certifikát vprodpřes šablonu, která schválení nevyžaduje. Žádost nově ukládá své prostředí (migrace000218, stávající žádosti zůstávají vprod) a certifikát ho přebírá, ať se vydá hned, nebo až po schválení (vlastní prostředí schvalovatele nehraje roli). Změna chování: certifikáty požadované přesPOST /api/v1/certificates/csrse nově objeví ve zvoleném prostředí a klient, který prostředí neposílá, dostane výchozí prostředí serveru, ne vždyprod.POST /api/v1/projects/{id}/csrpřebírá prostředí svého volání stejně;POST /api/v1/gateways/csrpřebírá prostředí, ke kterému je gateway vázaná. - Import certifikátu nemůže změnit certifikát jiné organizace — Import certifikátu nebo privátního klíče doplní tělo existujícího certifikátu se stejným otiskem, nebo k němu připojí klíč, ale vyhledávání zasahovalo přes organizace: správce jedné organizace, který importoval veřejný certifikát bez projektu, mohl dokončit záznam jiné organizace nebo převzít jeho klíč. Shoda je nově omezena na organizaci volajícího (certifikáty jejích projektů a certifikáty bez projektu, které nevydal účet CA jiné organizace); certifikát jiné organizace není shoda, import tedy vytvoří vlastní a druhý záznam, jeho projekt i klíč nechá beze změny.
- Zamítnutí nebo archivace žádosti o certifikát už nemůže zničit klíč žádosti, která se vydává — Zamítnutí a archivace mazaly externě uložený privátní klíč čekající žádosti (Azure Key Vault, správce tajemství) dříve, než změnily její stav, takže schválení, které přišlo mezitím, přišlo o klíč, zatímco zamítnutí vrátilo
409, a archivace neměla žádnou podmínku na stav. Obě nově žádost nejprve podmíněnou změnou převezmou a klíč smažou až poté (selhání smazání klíče převzetí vrátí). Archivace žádosti, která je schválená, vydává se nebo byla předána CA, nově vrací409„certificate request is being issued“ a nic nemění. - Adopce objeveného certifikátu se už nedotkne spravovaného certifikátu jiného prostředí nebo organizace — Adopce propojí existující spravovaný certifikát se stejným otiskem, doplní jeho prázdná pole, přesune ho do cílového projektu, pokud žádný neměl, a vrátí ho, ale shoda ignorovala prostředí i organizaci: uživatel omezený na
dev, který adoptoval vdev, mohl certifikát zprodpřesunout, doplnit a přečíst a šlo si přivlastnit certifikát jiné organizace bez projektu. Shoda je nově omezena na certifikáty organizace volajícího (nikdy systémové), upřednostní certifikát v cílovém projektu a prostředí (z několika certifikátů se stejným otiskem, například kopie v dev a v prod, vezme adopce v dev tu z dev a certifikát bez projektu nikdy nepředběhne ten v cílovém projektu) a shoda v jiném prostředí vrací409„matching managed certificate is in another environment“ beze změny (hromadná adopce ji započítá u každého certifikátu zvlášť). Přiřazení objevených certifikátů k projektu, který není certifikátový, nově vrací400, stejně jako adopce. - Interval synchronizace a předstih obnovy účtu CA se ověřují — Připojení nebo úprava účtu CA přijímaly interval synchronizace nula či méně, kvůli kterému plánovač synchronizoval účet (a volal CA) při každém taktu, a záporný předstih obnovy.
sync_interval_minutesmusí být nově alespoň 1 arenewal_lead_daysnezáporné, jinak400. - Účet CA může odkazovat jen na CA vlastní organizace —
ca_authority_idv přihlašovacích údajích interního nebo ACME účtu CA (připojení a úprava) určuje, která CA z účtu vydává, ale přijímalo se jakékoli existující ID CA, včetně CA z projektu jiné organizace. Nově musí jít o CA některého projektu organizace nebo o CA na úrovni organizace, kterou nepoužívá účet jiné organizace; cokoli jiného a neznámé ID vrací400„ca_authority_id does not name a CA of this organization“ a nic nemění. - Starší routy účtů CA zůstávají v organizaci volajícího —
GET /api/v1/ca-accounts/{id}/productsaPOST /api/v1/ca-accounts/{id}/syncbraly účet jen podle ID, takže držitelca:readneboca:adminmohl číst produkty účtu jiné organizace nebo pro něj spustit synchronizaci produktů (neznámé ID vracelo prázdný seznam nebo500). Nově vracejí404, pokud účet nepatří do organizace požadavku, jak tomu u rout s organizací vždy bylo; synchronizace se do auditu zapisuje jen tehdy, když proběhla. - Schémata poskytovatelů CA lze číst s rolí omezenou na projekt —
GET /api/v1/ca-providers/schemasa/api/v1/ca-providers/{type}/schemavracejí jen statické popisy podporovaných CA, ale role přiřazená jedinému projektu dostala i sca:readodpověď403, takže formulář žádosti o certifikát se pro takové uživatele nenačetl. Obě routy nově přijmouca:readdržené v libovolném projektu; samotné účty CA zůstávají platné pro celou organizaci. - Import klíče objeveného certifikátu se posuzuje v prostředí certifikátu —
POST /api/v1/discovered-certificates/{id}/import-keynahrazuje privátní klíč spravovaného certifikátu, ale posuzoval se jen v prostředí požadavku, takže uživatel s oprávněním pro celou organizaci omezený nadevmohl nahradit klíč certifikátu vprod. Nově vyžadujediscovered_cert:writev prostředí a projektu spravovaného certifikátu (jinak403, klíč zůstane beze změny). Popisy hromadného přiřazení, adopce a ignorování nově uvádějí, že se každý certifikát zkontroluje před jakoukoli změnou (samotné změny se provádějí postupně). - Adopce objevených certifikátů funguje s API tokeny — Adopce (
POST /api/v1/discovered-certificates/{id}/adopt) a hromadná adopce (/bulk/adopt) vracely pro API token403„organization context is required“, i když token oprávnění měl, protože routy neviděly výchozí organizaci tokenu, zatímco přiřazení fungovalo. Adopce nyní používá stejnou organizaci jako všechny ostatní routy (u relace tu z relace, u tokenu výchozí organizaci). Odmítnutí pro cílový projekt nebo prostředí, ve kterém volající nesmí jednat, nově zníinsufficient permissions for environment(dříveaccess denied); relace a JWT jsou jinak beze změny. - Chyby uložení při importu klíče objeveného certifikátu zůstávají mimo odpověď — Import privátního klíče adoptovaného objeveného certifikátu (
POST /api/v1/discovered-certificates/{id}/import-key) vracel400s příčinou, když se klíč nepodařilo uložit: chybějící služba pro odložení klíčů v režimu orchestrátoru, správce tajemství, který klíč odmítl (jeho zpráva může uvádět hostitele a cesty), nebo selhání šifrování. Jde o chyby na straně serveru a nově vracejí500s obecnýmInternal server error; příčina jde do logu serveru s ID požadavku. Klíč, který nelze přečíst nebo neodpovídá certifikátu, nadále vrací400s důvodem. - Rozhodnutí o žádostech o certifikát se zapisují do auditu — Odeslání, schválení, zamítnutí a archivace žádosti o podpis certifikátu (
/api/v1/certificates/csr) nezapisovaly nic do auditního logu. Každá úspěšná změna nově zaznamenácertificate_request_submitted,certificate_request_approved,certificate_request_rejectednebocertificate_request_archiveds aktérem, žádostí a jejím projektem (důvod zamítnutí je součástí detailu); odmítnutá volání nezapisují nic a žádný záznam neobsahuje klíčový materiál. - Žádosti o certifikát a importy se posuzují ve svém projektu a prostředí — Role přiřazená na jednom projektu nemohla v něm odeslat žádost o certifikát ani importovat certifikát a API token nebo relace omezená na prostředí mohla importovat do libovolného prostředí.
POST /api/v1/certificates/csrse nově posuzuje v projektu uvedeném v těle (bez něj smí neprojektovou žádost odeslat jen role, která není omezena na projekty) a routy importu (/api/v1/certificates/import,/import/bulk,/import/file) v projektu a prostředí, které uvádějí (bez prostředí je toprod, bez projektu je třeba role platná pro celou organizaci); hromadný import se odmítne celý, pokud je jedna položka mimo rozsah. Import už existujícího certifikátu jej změní jen volajícímu, který smí importovat v projektu a prostředí tohoto certifikátu (ostatní dostanou403, ne jeho detaily). Projekt, šablona, CA účet a integrace pro uložení klíče v žádosti nebo importu musí patřit do organizace volajícího a integrace do projektu (jinak404). Fronta žádostí (seznam, statistiky, schválení, zamítnutí, archivace) zůstává platná pro celou organizaci. - Žádosti o certifikát používají organizaci volajícího, i pro API tokeny — Odeslání žádosti o certifikát (
POST /api/v1/certificates/csr) přebíralo organizaci a agenta z těla požadavku, pokud volající nemá vlastní organizaci, což platí pro API tokeny (Terraform, SDK): žádost tokenu se uložila bez organizace nebo v organizaci, kterou klient uvedl, a schválení, zamítnutí či archivace žádosti přes token vždy selhaly. Organizací je nyní vždy organizace volajícího (u relace ta z relace, u API tokenu výchozí organizace), agent se nastaví jen pro vlastní token agenta a seznam, statistiky, schválení, zamítnutí a archivace posuzují žádosti ve stejné organizaci, takže je tokeny mohou používat a token už nevypisuje žádosti všech organizací. - Přiřazení a adopce objevených certifikátů se kontrolují v cílovém projektu a prostředí — Přiřazení objevených certifikátů k projektu (
POST /api/v1/discovered-certificates/{id}/assigna/bulk/assign) se na projekt vůbec nedívalo: neznámý projekt skončil databázovou chybou a projekt jiné organizace nebo archivovaný projekt se přijal, čímž se tam přesunul i navázaný spravovaný certifikát. Cíl musí nově být živý projekt organizace požadavku (jinak404 target certificate project not found) a v něm, v prostředí požadavku i v prostředí každého spravovaného certifikátu, který se s objeveným přesouvá, musí platitdiscovered_cert:assign(403 insufficient permissions for environment), takže uživatel, který smí přiřazovat jen vdev, nepřesune certifikát zprod. Adopce (/adopt,/bulk/adopt) se posuzuje v projektu a prostředí svého těla stejnou kontrolou jako ostatní routy. Routy objevených a archivovaných certifikátů zůstávají celoorganizační: role přiřazená na jednom projektu k žádné z nich přístup nedává, s API tokenem, relací webového rozhraní ani JWT. - Relace SRP umožňuje jediný důkaz —
POST /api/v1/auth/srp/verifyponechal relaci i po špatném důkazu klienta, takže šlo důkaz zkoušet znovu až do vypršení relace (dvě minuty). Relace nyní končí prvním důkazem, správným i špatným; klient, který neuspěl, musí začít znovu přesPOST /api/v1/auth/srp/init. - Přihlášení přes Universal Auth neprozradí nedůvěryhodné adrese nic o tajném klíči —
POST /api/v1/auth/universal-auth/loginkontroloval nejdřív tajný klíč klienta a teprve potom důvěryhodné adresy, takže požadavek z adresy mimo seznam odpovídal403, když byl klíč platný, a401, když nebyl — odpověď tak mohl kdokoli použít k ověřování klíčů. Důvěryhodné adresy se nyní kontrolují jako první a nedůvěryhodná adresa dostane stejnou odpověď401 Invalid credentialsjako špatný klíč nebo neznámý klient (klíč se vůbec nekontroluje); důvod (id klienta a adresa) se zapisuje jen do logu serveru. Pokud provozovatel vidí401od klienta se správnými údaji, má zkontrolovat důvěryhodné adresy v jeho konfiguraci. - Změny Universal Auth se auditují — Připojení, změna a odebrání Universal Auth u servisní identity (
/api/v1/auth/universal-auth/identities/{id}) a vytvoření a zneplatnění jejích klientských tajných klíčů nezapisovaly žádný auditní záznam. Každá změna nyní zapíšeATTACH_UNIVERSAL_AUTH,UPDATE_UNIVERSAL_AUTH,REVOKE_UNIVERSAL_AUTH,CREATE_CLIENT_SECRETneboREVOKE_CLIENT_SECRETs volajícím uživatelem a adresou; detaily uvádějí servisní identitu, změněná pole a popis tajného klíče, nikdy tajný klíč. - Přihlášení přes LDAP už nezapisuje uživatelské jméno do logu — Přihlášení přes LDAP (
POST /api/v1/auth/ldap/logina přihlášení přes LDAP v konzoli) zapisovalo do logu vyhledávací filtr s dosazeným zadaným uživatelským jménem, i když vyhledávání selhalo, a uživatelské jméno zapsalo znovu, když neodpovídal právě jeden uživatel. Log nyní obsahuje jen šablonu filtru, stejně jako test připojení, a uživatelské jméno už ne. - Přihlášení přes SSO má omezení počtu požadavků a maže prošlé stavy OAuth — Každé neautentizované volání
GET /api/v1/auth/sso/{entra,github,gitlab}/loginuložilo řádek se stavem OAuth, který se po vypršení nikdy nesmazal. Každé přihlášení nyní nejdřív smaže prošlé stavy a tři přihlašovací cesty mají omezení počtu požadavků na IP klienta (30 za sekundu, dávka 60, jako/auth/sso/spnego/login); nad limitem odpovídají429(Too many requests). - Řádky logu databáze už neobsahují hodnoty dotazů — Když databázový příkaz selhal nebo trval dlouho, log serveru ho vypsal se všemi dosazenými hodnotami, včetně jednorázových výměnných kódů SSO a tokenů uložených s nimi. Log nyní ukazuje příkaz jen se zástupnými symboly.
- Přihlášení přes Entra ID bez konfigurace se vrací na přihlašovací stránku —
GET /api/v1/auth/sso/entra/loginodpovídal surovým JSON500(Failed to initiate SSO login), když nebyla nastavena adresa pro přesměrování, takže prohlížeč zobrazil chybovou stránku. Nyní přesměruje (302) na přihlašovací stránku konzole s?error=sso_not_configured(při jiné chybě?error=sso_failed, se záznamem v logu), přesFRONTEND_URLnebo hostitele, odkud požadavek přišel, stejně jako callback. - Callbacky SSO hlásí pevné chybové kódy — Neúspěšný callback Entra ID, GitHub nebo GitLab vkládal interní text chyby do přesměrování (
/login?error=<zpráva>), takže se podrobnosti poskytovatele identity nebo serveru mohly dostat do historie prohlížeče a do logů. Parametrerrorje nyní jeden z kódůmissing_auth_code,missing_code_or_state,invalid_state(neznámý nebo prošlý stav OAuth) asso_failed; podrobnosti se zapisují jen do logu serveru. - Přihlášení přes SSO už nikdy nedává přístupový token do URL — Když se nepodařilo uložit jednorázový výměnný kód přihlášení přes Entra ID, GitHub nebo GitLab, callback (
GET /api/v1/auth/sso/{entra,github,gitlab}/callback) náhradně přesměroval na/login?access_token=<JWT>a nastavil cookie s obnovovacím tokenem, takže token skončil v historii prohlížeče, v logu proxy a v hlavičceReferer. Přihlášení nyní místo toho selže: přesměruje na/login?error=sso_failedbez tokenu i cookie; příčina se zaloguje. - Test připojení LDAP už nezapisuje testovací uživatelské jméno do logu —
POST /api/v1/auth/sso/ldap/testzapisoval volitelnétest_usernamedo logu serveru, i uvnitř zalogovaného vyhledávacího filtru. Log nyní obsahuje jen informaci, zda bylo testovací jméno zadáno, a šablonu filtru. - Změny poskytovatelů identity a SPNEGO se auditují — Vytvoření, úprava a smazání poskytovatele identity (
/api/v1/identity-providers) a uložení konfigurace SPNEGO/Kerberos (POST /api/v1/auth/sso/spnego/config) nezapisovaly žádný auditní záznam. Nyní zaznamenajíCREATE_IDENTITY_PROVIDER,UPDATE_IDENTITY_PROVIDER,DELETE_IDENTITY_PROVIDERaCONFIGURE_SPNEGO(entitaIDENTITY_PROVIDER) s uživatelem a IP adresou; podrobnosti uvádějí název a typ poskytovatele, případně service principal a realm, nikdy tajemství. - Heslo pro bind LDAP, které nelze zašifrovat, se už neukládá v čitelné podobě — Když heslo pro bind poskytovatele identity LDAP nešlo zašifrovat,
POST /api/v1/identity-providersaPUT /api/v1/identity-providers/{id}je potichu uložily nešifrované. Nyní vrací500(Internal server error) a nic neuloží; příčina se zapíše do logu. - Hledání skupin poskytovatele identity mohlo změnit filtr Graph —
GET /api/v1/identity-providers/{id}/groups?search=…vkládal hledaný text do filtru$filterMicrosoft Graph v uvozovkách bez escapování apostrofů, takže hledání obsahující'mohlo řetězec ukončit a přidat vlastní podmínky filtru. Apostrofy se nyní zdvojují, jak řetězcové literály OData vyžadují, a hledání se vždy porovnává jako začátek zobrazovaného názvu. - Odpovědi poskytovatelů identity a konfigurace LDAP už nevracejí uložená tajemství —
POST /api/v1/identity-providersaPUT /api/v1/identity-providers/{id}vracely uloženou konfiguraci celou, takže i úprava, která měnila jen název, vrátilaclient_secretEntra ID v čitelné podobě (a zašifrovanýbind_passwordLDAP). Nyní maskujíclient_secret,bind_password,api_tokenatokenstejně jako výpis a detail (****a poslední čtyři znaky).POST /api/v1/auth/sso/ldap/confignyní vrací heslo pro bind jako__MASKED__, stejně jakoGET. - Bezpečnostní hlavičky webového rozhraní (nálezy OWASP ZAP) — Každá odpověď webového rozhraní nově obsahuje
Referrer-Policy,Permissions-Policy,Cross-Origin-Opener-PolicyaCross-Origin-Resource-Policya statické soubory nově dostávají iX-Content-Type-Options: nosniff(nginx ho u nich zahazoval). Statické soubory už neposílajíAccess-Control-Allow-Origin: *. Content Security Policy (sestavená pro každou odpověď, s hashisha256-inline skriptů aplikace vscript-src) aCross-Origin-Embedder-Policy: require-corpse vynucují; už nejsou jen v režimu hlášení. Statické soubory se servírují předkomprimované (gzip, brotli). Chybějící soubory jakofavicon.iconebositemap.xmlvracejí404místo stránky aplikace arobots.txtzakazuje indexaci. Zastaralá hlavičkaX-XSS-Protectionbyla odstraněna. Hlavičky nastavuje samotná webová aplikace (server Nuxt), takže jsou stejné za edge v Docker Compose i za ingressem v Helmu; stránky/swaggerservíruje backend a aplikační CSP nenesou. - Přihlášení přes SAML už nevystavuje refresh token prohlížeči — Endpoint SAML ACS (
POST /api/v1/auth/saml/callback) dříve na platnou aserci odpovídal JSON tělem saccess_tokenarefresh_token, které mohl číst JavaScript v prohlížeči. Nyní funguje stejně jako přihlášení přes Entra ID, GitHub a GitLab: uloží jednorázový výměnný kód platný 60 sekund a přesměruje (302) naFRONTEND_URL/login?sso_code=…(bezFRONTEND_URLna hostitele, na kterém byl callback volán); konzole kód vymění přesPOST /api/v1/auth/sso/exchange, který vrací jen access token a refresh token nastaví jakoHttpOnlycookie. Opakovaně použitý nebo expirovaný kód je odmítnut s401. Callback odesílá poskytovatel identity přes prohlížeč uživatele a konzole, SDK ani Terraform provider jej nikdy nekonzumovaly, takže integrace není třeba měnit; pokud je konzole servírována z jiného originu než API, nastavteFRONTEND_URL. - Odstraněny tranzitivní CVE v Go (
x/net,x/mod) —golang.org/x/netbyl povýšen0.55.0 → 0.56.0agolang.org/x/mod0.37.0 → 0.40.0napříč modulyagent,cli,k8s-operatoraterraform-provider-mazevaultkvůli vyřešení CVE-2026-46600, CVE-2026-56864 a CVE-2026-56865. - Aktualizace závislostí napříč moduly — Byly aktualizovány další modulové závislosti:
golang.org/x/crypto → 0.55.0agolang.org/x/sys → 0.47.0vocsp-responder,cloud.google.com/goa související balíčky vbackendagoogle.golang.org/grpc,google.golang.org/genprotoa balíčky OpenTelemetry vterraform-provider-mazevault. - Odstraněn gRPC DoS (CVE-2026-84445) —
google.golang.org/grpcbyl povýšen1.83.1 → 1.83.2vbackendaterraform-provider-mazevaultkvůli vyřešení CVE-2026-84445 (odepření služby v gRPC-Go přes chybně formovaný RPC požadavek), na kterém padal Trivy filesystem sken dev-pipeline. Oprava je fixována na patch řadu1.83.2(řada1.84.0je stále zasažena). Transitivnígolang.org/x/mod → 0.40.0(CVE-2026-56864 / CVE-2026-56865), který následná aktualizace nástrojů stáhla zpět na0.39.0, byl znovu aplikován. Ověřenogo build,go vet,govulncheck(0 dosažitelných) a čistým Trivy skenemCRITICAL,HIGH --ignore-unfixed. - Odstraněn Jackson Core/Databind DoS (CVE-2026-68497, CVE-2026-89407, CVE-2026-89425, CVE-2026-91776, CVE-2026-91777) —
com.fasterxml.jackson.core:jackson-databindbyl v Java SDK (sdks/java/pom.xml) povýšen2.18.8 → 2.18.11. Prvotní bump→ 2.18.10vyřešil CVE-2026-68497 (DoS vytížením CPU přes neohraničené parsování čísel); následná vlna Jackson advisories pak označila čtyři další HIGH DoS — dva v tranzitivnímjackson-core(CVE-2026-89407 regex backtracking, CVE-2026-89425 neohraničený růstStringBuilder) a dva vjackson-databind(CVE-2026-91776 neohraničený růst cache, CVE-2026-91777 kvadratické forward-reference) — všechny opravené ve2.18.11, která tranzitivně srovná ijackson-core → 2.18.11. Vše zůstává na patch řadě2.18.x(drop-in, bez změn API) a Trivy filesystem sken dev-pipeline je zelený. Java SDK nyní importuje Jackson BOM (com.fasterxml.jackson:jackson-bom, pinnutý přes jedinou propertyjackson.version) vdependencyManagement, takžejackson-core,jackson-databindijackson-annotationszůstávají verzově zarovnané a budoucí bumpy Jacksonu jsou změna na jednom řádku. - Odstraněn x/net HTTP/2 DoS (CVE-2026-78669) —
golang.org/x/netbyl povýšen→ 0.60.0v modulechbackend,agent,cli,k8s-operatoraterraform-provider-mazevaultkvůli vyřešení CVE-2026-78669 (odepření služby vnet/http2přes nadměrné HTTP/2SETTINGSrámce), na kterém padal Trivy filesystem sken dev-pipeline. Všech pět modulů se čistě buildí i testuje a Trivy skenCRITICAL,HIGH --ignore-unfixedje zelený napříč všemi moduly. - Druhá vlna závislostí (ověřeno) — Byla aplikována a ověřena další dávka bezpečných bumpů (backend
go build/vet/plnýgo test, agent build/test linux+windows, frontendtsc -b/lint/build/165 testů na Node 24, Trivy,govulncheck): Go moduly backendu (Azure azcore1.23.2 /azidentity1.14.1,azblob1.8.2,aws-sdk-go-v2/config1.33.8,service/s31.114.2,gin-contrib/cors1.7.9,go-ldap/ldap/v33.4.15,microsoft/go-mssqldb1.11.2,golang.org/x/crypto0.57.0,golang.org/x/oauth20.37.0,golang.org/x/time0.16.0,google.golang.org/api0.301.0 — ta tranzitivně posunulagoogle.golang.org/grpc → 1.84.0, kterou aktuální databáze Trivy pro CVE-2026-84445 už neflaguje, a koordinovaný lockstep bumpk8s.io/api+k8s.io/apimachinery+k8s.io/client-go0.28.0 → 0.37.1, proti kterému se Kubernetes rotační kroky čistě buildí i testují); npm balíčky frontendu (lucide-react1.50.0,@types/node26.6.4,globals17.13.0,vitest5.0.3); a GitHub Actions (actions/checkout,actions/setup-go,actions/setup-nodev5 → v7aactions/download-artifactv4 → v8, která zůstává kompatibilní s již připnutýmactions/upload-artifact@v7a stahováním podlename/patternv tomto repu). Odloženo (blokováno): dříve sledované PRtypescript7 aeslint10 (stále blokované peer rozsahy ESLintu). - Konsolidované aktualizace závislostí — Byla aplikována a end-to-end ověřena velká dávka rutinních aktualizací (backend/agent
go test, frontendtsc/lint/build/165 testů na Node 24, Trivy,govulncheck): Go moduly backendu (microsoftgraph/msgraph-sdk-go,swaggo/swag,swaggo/gin-swagger, Azureazcore/azblob,Venafi/vcert,aws-sdk-go-v2core/config/credentials/s3/route53,gin-contrib/cors,jackc/pgx,miekg/pkcs11,lib/pq,mongo-driver,crewjam/saml,prometheus/client_golang,stretchr/testify), Go moduly agenta (go-resty,prometheus/client_golang,golang.org/x/crypto0.57.0,golang.org/x/sys0.48.0,go-pkcs120.7.3), npm balíčky frontendu (react/react-dom19.3.0,react-router8.4.0,axios1.20.0,date-fns,jspdf-autotable,@noble/hashesa@noble/ciphers2.4.0,lucide-react1.x,@types/node26,@testing-library/reactauser-event,@vitejs/plugin-react6,globals17,autoprefixer,@tailwindcss/postcss,eslint-plugin-react-refresh,vite-plugin-node-polyfills), základní image kontejnerů (alpine3.21 → 3.24 pro init-certs,python3.12-alpine → 3.14-alpine pro build stage dokumentace) a GitHub Actions (actions/upload-artifact4 → 7,actions/github-script7 → 9,azure/aks-set-context4 → 5,azure/login2 → 3,codecov/codecov-action4 → 7,github/codeql-action3 → 4,docker/build-push-action6 → 7,docker/setup-buildx-action3 → 4,docker/login-action3 → 4,zaproxy/action-baseline0.14 → 0.15). Automatické PR závislostí se nyní otevírají proti integrační větvidev(Dependabottarget-branch: devpro každý ekosystém) místo výchozí větve. Odloženo (blokováno upstreamem, ponecháno jako otevřené sledované PR):typescript7 (blokuje peertypescript <6.1.0vtypescript-eslint) aeslint10 /@eslint/js10 (blokujeeslint-plugin-react, který zatím nedeklaruje peereslint ^10). - Material UI povýšeno na v9 (major, frontend) — Administrátorská konzole byla migrována z Material UI 7 na
@mui/material/@mui/icons-material9.4.0 a@mui/x-date-pickers9.14.0. Všechna odebraná/přejmenovaná v9 API byla migrována oficiálními MUI codemody plus cílenými opravami: zastaralé systémové style-propy (fontWeight,display,fontFamily,alignItems,fontStyle, spacing, …) přesunuty dosx; legacy slot-propyTextField/Dialog/Checkbox/Autocomplete(InputProps,inputProps,InputLabelProps,SelectProps,PaperProps,TransitionProps) přesunuty do sjednoceného APIslotProps; odebrané ikony*Outlinepřesměrovány na ekvivalenty*OutlineOutlined; a theme overrideMuiButtoncontainedPrimarypřepsán přes v9 APIvariants. Jde o interní upgrade frontendové knihovny komponent bez změny aplikačních rout, chování nebo backend/API kontraktů; kompletní TypeScript type-check, ESLint, produkční build i sada 165 unit testů procházejí. - Build/test frontendu vyžaduje Node ≥ 22.22 — Testovací toolchain byl povýšen na
vitest5 ajsdom30, jejichž vestavěnéundicivyžaduje runtime API Node (webidl.util.markAsUncloneable) dostupné až na Node ≥ 22.22. CI i Docker image frontendu už běží na Node 24; do kořene repozitáře a dofrontend/byly přidány soubory.nvmrc(fixované na Node 24), takže lokální vývoj vybere kompatibilní runtime automaticky. - Autentizační cookies mají
SameSite=Lax(nález OWASP ZAP) — Cookiesrefresh_tokenaXSRF-TOKENse přiCOOKIE_SECURE=trueposílaly seSameSite=None, takže je prohlížeč přikládal i k požadavkům z cizích webů. Nově mají vždySameSite=Lax;COOKIE_SECUREdál řídí jen příznakSecure. Webové rozhraní volá API vždy na vlastním originu a přihlášení přes SSO (Entra, GitHub, GitLab, SAML) se nemění. Existující relace pokračují: refresh cookie dostane nový atribut při dalším obnovení tokenu. - Cache API a ochrana proti cross-site požadavkům (nálezy OWASP ZAP) — Odpovědi API mají nově výchozí
Cache-Control: no-store, no-cache, must-revalidateaX-Content-Type-Options: nosniff, takže odpovědi přihlášení, obnovení tokenu, SSO ani stavové odpovědi neukládá prohlížeč ani proxy; CRL a ACME si ponechávají vlastní cache politiku. Izolace zdrojů podle Fetch Metadata odmítne cross-site požadavky prohlížeče s403, pokud nejde o navigaci na nejvyšší úrovni, POST se SAML assertion nebo o origin uvedený vCORS_ALLOWED_ORIGINS. Klientů mimo prohlížeč (agenti, gatewaye, SCEP/ACME/OCSP, CLI, Terraform) se změna netýká. Pokud API volá prohlížečová aplikace z jiné domény, uveďte její origin vCORS_ALLOWED_ORIGINS. - Serverové relace prohlížeče pro webové rozhraní — Backend nově umí držet relace prohlížeče na straně serveru (tabulka
ui_sessions, migrace000208–000210) za endpointy jen pro BFF/api/v1/ui/auth/*a schématemAuthorization: Session, které se přijímá pouze spolu s hlavičkouX-MazeVault-BFFobsahujícíBFF_SHARED_SECRET. Administrátoři mohou relace uživatele vypsat a zrušit přesGET/DELETE /api/v1/rbac/users/{id}/sessions. Nové webové rozhraní je používá (viz „Nové webové rozhraní“). Relace končí poUI_SESSION_IDLE_TIMEOUT(30 minut) nečinnosti nebo poUI_SESSION_ABSOLUTE_TIMEOUT(12 hodin), čekající krok MFA poUI_SESSION_MFA_TIMEOUT(5 minut); ruší se při změně hesla (kromě volající relace), smazání uživatele, přiřazení nebo odebrání role, vypnutí MFA a změně rolí přes SSO/LDAP. - Nová nastavení —
TRUSTED_PROXIES,UI_SESSION_IDLE_TIMEOUT,UI_SESSION_ABSOLUTE_TIMEOUT,UI_SESSION_MFA_TIMEOUTa tajemstvíBFF_SHARED_SECRET(viz Proměnné prostředí). Instalátory aupgrade-mazevault.shgenerujíBFF_SHARED_SECRET; v Helmu je povinný (global.keyVault.secretKeys.bffSharedSecret, viz Změny distribuce).upgrade-mazevault.shnainstalujedocker-compose.ymlz kitu (po zálohování). Lokální vývojáři jednou znovu spustí./secrets.sh. - Požadavky z BFF projdou kontrolou CSRF cookie — Požadavek měnící stav, jehož hlavička
X-MazeVault-BFFodpovídáBFF_SHARED_SECRET(porovnání v konstantním čase), už nepotřebuje dvojici cookieXSRF-TOKEN: frontendový server (BFF) původ prohlížeče už ověřil a anonymní volání přes něj, například vyzvednutí sdíleného tajemství, žádné cookies nenese. Nenastavené tajemství nic nevyjímá; ostatní požadavky se kontrolují jako dosud. - IP klienta se z
X-Forwarded-Forbere jen od důvěryhodných proxy (změna chování) — HlavičkaX-Forwarded-Forod peerů mimoTRUSTED_PROXIES(výchozí: loopback a privátní rozsahy v backendu a v Helmu, podsíť kituMAZEVAULT_SUBNETv Docker Compose) se nově ignoruje, což mění IP klienta v auditním logu a v rate limitech, pokud má proxy veřejnou adresu. Takové proxy uveďte vTRUSTED_PROXIES. Naopak v sítích, kde mají privátní adresy i nedůvěryhodní klienti, nastavteTRUSTED_PROXIESna přesné adresy nebo podsítě edge/ingressu, jinak mohouX-Forwarded-Forpodvrhnout. - Tokeny relace MFA jsou jednorázové — Token vydaný po kroku s heslem šlo opakovaně použít na
POST /api/v1/auth/mfa/verifyaž do vypršení; nově se spotřebuje prvním úspěšným ověřením. - Odhlášení zneplatní refresh token —
POST /api/v1/auth/logoutnově maže i uložený refresh token (odcizený token už odhlášení nepřežije) a zapisuje auditní záznamLOGOUT. - Ověření MFA má rate limit a omezený počet pokusů —
POST /api/v1/auth/mfa/verifymá rate limit a relace MFA povolí nejvýše 5 pokusů o kód; poté je nutné nové přihlášení (auditVERIFY_MFA_LOCKED). - Změny provisioningu přes SCIM se auditují — Vytvoření, úprava a smazání uživatele a vytvoření, patch a smazání skupiny přes SCIM (
/api/v1/auth/scim/{providerID}) nezapisovaly žádný auditní záznam. Nyní zaznamenajíCREATE_SCIM_USER,UPDATE_SCIM_USER,DELETE_SCIM_USER,CREATE_SCIM_GROUP,PATCH_SCIM_GROUPaDELETE_SCIM_GROUP(entitySCIM_USERaSCIM_GROUP) s IP adresou klienta, připsané systémovému uživateli, protože SCIM token neidentifikuje osobu; podrobnosti uvádějí poskytovatele a zdroj, nikdy token. - Odpovědi poskytovatelů identity už neobsahují hash SCIM tokenu — Cesty poskytovatelů identity (
/api/v1/identity-providers) maskovaly tajemství konfigurace poskytovatele, ale uloženýscim_token_hash(bcrypt hash SCIM bearer tokenu poskytovatele) vracely v čitelné podobě. Nyní je maskovaný jakoclient_secreta úprava, která pošle zpět masku nebo nechá pole prázdné, uložený hash zachová. - Chyby SCIM už neobsahují text databáze — Selhávající operace SCIM odpovídala
500se surovou chybou služby, takže id, které není UUID, uDELETE/PUT/PATCHpod/api/v1/auth/scim/{providerID}/Users/{id}a/Groups/{id}, nebo hodnota odmítnutá databází vrátily text chyby PostgreSQL (invalid input syntax for type uuid ... SQLSTATE 22P02). Id, které není UUID, nyní odpovídá404 User not found/404 Group not foundjako neznámé id a každé jiné selhání odpovídá500 Internal server errors příčinou jen v logu serveru. - Cesty konfigurace LDAP nevracejí uložená tajemství v čitelné podobě —
GETaPOST /api/v1/auth/sso/ldap/configmaskovaly jen heslo pro bind. Pokud konfigurace poskytovatele LDAP obsahovala iclient_secret,api_token,tokenneboscim_token_hash, vracela se v čitelné podobě. Nyní maskují stejná tajemství jako cesty poskytovatelů identity (****a poslední čtyři znaky; heslo pro bind zůstává zástupnou hodnotou__MASKED__) a uložení konfigurace LDAP zachová uložené tajemství, které požadavek vynechá, nechá prázdné nebo zamaskované, místo aby ho zahodilo. - Neaktivní poskytovatel identity nepřijímá volání SCIM — Cesty SCIM (
/api/v1/auth/scim/{providerID}) přijímaly vytváření, úpravy a mazání uživatelů a skupin i pro poskytovatele identity, který byl vypnutý (stavinactive), pokud byl SCIM token správný. Takový poskytovatel nyní na každé volání, včetně čtení, odpovídá403 SCIM not enabled for this provider, tedy jako poskytovatel bez SCIM, a to před kontrolou tokenu. - Neaktivní poskytovatel identity nepřijímá zápisy přes SCIM — Cesty SCIM (
/api/v1/auth/scim/{providerID}) přijímaly vytváření, úpravy a mazání uživatelů a skupin i pro poskytovatele identity, který byl vypnutý (stavinactive), pokud byl SCIM token správný. Takový poskytovatel nyní na každý zápis odpovídá403 SCIM not enabled for this provider, tedy jako poskytovatel bez SCIM, a to před kontrolou tokenu; čtení nadále funguje. - Zápisy v2 secretů se kontrolují v prostředí, kterého se týkají — Kontrola oprávnění u
POST /api/v2/secrets,PUTaDELETE /api/v2/secrets/{id}aPOST /api/v2/secrets/migrateposuzovala jen prostředí, na které se požadavek přeložil, takže uživatel, jehož role udělujesecret:writenebosecret:deletejen v dev, mohl vytvořit secret v prod nebo prod secret změnit, smazat či migrovat. Každá z těchto operací nyní vyžaduje oprávnění v prostředí z těla požadavku nebo secretu (a na jeho projektu u role omezené na projekt) a jinak před jakoukoli změnou vrací403 insufficient permissions for environment; migrace secretu z projektu, který role nepokrývá, se hlásí jakosecret not found. Požadavky na prostředí, na které se přeložily, se chovají jako dříve. Rozhodnutí o oprávnění se nově cachují i podle organizace a projektu. - Zápisy v1 secretů se kontrolují v prostředí, kterého se týkají — Kontrola oprávnění u zapisovacích v1 routes secretů posuzovala jen prostředí, na které se požadavek přeložil, takže uživatel, jehož role uděluje
secret:write,secret:delete,secret:archivenebo životní cyklus archivu jen v dev, mohl vytvořit secret v prod, nebo jej aktualizovat, smazat, vrátit verzi, zkopírovat, archivovat, obnovit, smazat natrvalo, synchronizovat či do něj importovat. Vytvoření, import a cíl kopie nyní vyžadují oprávnění v prostředí z těla požadavku; každá routa podle id secretu je vyžaduje v prostředí samotného secretu (kopie takésecret:readv prostředí zdroje, vynucená synchronizace jednoho prostředí v synchronizovaném) a u role omezené na projekt i na projektu secretu. Vracejí403 insufficient permissions for environmentpřed jakoukoli změnou. Požadavky na prostředí, na které se přeložily, se chovají jako dříve; klient, který zapisuje do jiného prostředí, než jaké posílá v hlavičce či parametru prostředí, nyní potřebuje roli, která toto prostředí pokrývá. - Čtení secretů se kontroluje v prostředí, kterého se týká — Kontrola oprávnění u čtecích routes secretů posuzovala jen prostředí, na které se požadavek přeložil, takže uživatel, který smí číst jen dev, mohl přečíst prod secret podle id:
GET /api/v1/secrets/{id}vracel jeho dešifrovanou hodnotu a čitelné byly i jeho verze, stav synchronizace, stav offloadu a log synchronizace. Tyto routes nyní vyžadujísecret:readv prostředí samotného secretu a u role omezené na projekt i na jeho projektu a před jakýmkoli čtením či dešifrováním vracejí403 insufficient permissions for environment.GET /api/v1/projects/{id}/secretsbez filtru prostředí vypíše jen prostředí, která uživatel smí číst, a čtení v2 i porovnání kontrolují také projekt.POST /api/v1/secrets/drift/detectbezproject_id(všechny projekty) vyžaduje oprávnění na všech projektech, takže role na jednom projektu musí předat jehoproject_id. Selhání vyhledání oprávnění nyní požadavek odmítne, místo aby ho propustilo. - Výpisy secretů se kontrolují pro projekt a požadované prostředí —
GET /api/v2/projects/{id}/secretsa/secrets/matrixposuzovaly prostředí, která uživatel smí číst, bez projektu, takže uživatel, který smí číst dev všude a prod jen na projektu A, dostal i prod secrety projektu B (jejich zašifrovaný název, hodnotu a nonce). Nyní posuzují každé prostředí pro daný projekt.GET /api/v1/projects/{id}/secrets?environment=Xse posuzoval v prostředí, na které se požadavek přeložil, což na serveru s nakonfigurovanými prostředími není X; nyní vyžadujesecret:readpřímo v X a jinak vrací403 insufficient permissions for environment. - Matice v2 secretů je prázdná, když není čitelné žádné prostředí —
GET /api/v2/projects/{id}/secrets/matrixsi vyžádala všechna prostředí, když uživatel nemohl číst žádné z prostředí organizace, takže uživatel, který smí číst jen prostředí mimo seznam organizace (nebo kdokoli v organizaci bez prostředí), dostal všechny řádky secretů projektu. Nyní v tomto případě nevrací žádné řádky, stejně jako výpis. - Role omezené na prostředí a projekt platí i pro uživatele v prohlížeči — Relace webového rozhraní a JWT uživatele nesly roli zobrazenou u uživatele a kontrola oprávnění tuto roli udělovala ve všech prostředích a projektech, navíc k omezeným přiřazením uživatele. Šlo o nejvyšší roli, kterou uživatel měl v jakémkoli rozsahu, takže uživatel s rolí Secret Manager jen pro dev mohl z prohlížeče číst a měnit secrety v prod i v jiných projektech (API tokeny už omezeny byly). Uživatel nyní dostane přesně ta přiřazení rolí, která platí pro prostředí, projekt a organizaci, jichž se požadavek týká, ať se přihlásí jakkoli; token agenta si svou roli ponechává. Přiřazení omezené na projekt nebo organizaci se počítá jen pro požadavek v tomto projektu nebo organizaci; dříve se počítalo i na každé cestě bez projektu, takže role přiřazená pro jeden projekt (například admin) si mohla přiřadit libovolnou roli všude. Projekt požadavku je ten, který jmenuje jeho cesta, nebo ten, kterému patří secret (i archivovaný, který se obnovuje nebo trvale maže), certifikát, žádost o schválení či politika schvalování, integrace projektu, synchronizační pravidlo nebo konflikt, skupina konzistence nebo varování konzistence, které jmenuje (neznámé id dál vrací
404).project_idv dotazu nebo v JSON těle se počítá jen na cestách, které s tímto projektem pracují (GETaPOST /api/v1/secrets/,GETaPOST /api/v2/secrets,POST /api/v2/secrets/compare,POST /api/v1/secrets/drift/detect,GET /api/v1/consistency-groups); jinde rozsahem není a hodnota odlišná od projektu cesty se odmítne kódem403, ať má tělo jakýkoli Content-Type. Kontrola přečte každé zapisující tělo dřív, než ho dostane handler, a to stejně, jak ho handlery dekódují (první JSON hodnotu, klíče v libovolné velikosti písmen):project_id/organization_id, které nejsou řetězcem, se berou jako projekt či organizace, kde nikdo nemá omezenou roli, nečitelné tělo vrací400a tělo nad 16 MiB413; volající bez oprávnění cesty kdekoli se odmítne dřív, než se jeho tělo přečte. Úpravy synchronizačních pravidel, politik schvalování a konfiguračních šablon už nezapisují libovolné pole z těla (gorm bral názvy sloupců i polí Go, takže klíčProjectIDpřesunul pravidlo nebo politiku do jiného projektu): mění se jen jejich měnitelná pole a synchronizační pravidlo (i při vytvoření) přijme jen integraci vlastního projektu. UPUT /api/v1/certificates/{id}aPUT /api/v1/rotation/templates/{id}jeproject_idv těle cílem přesunu: oprávnění musí platit v projektu zdroje i v cílovém projektu. Požadavky s API tokenem patří do výchozí organizace vlastníka tokenu stejně jako relace v prohlížeči; požadavek, který jmenuje jinou organizaci (cestou, parametrem dotazu nebo polem tělaorganization_id), potřebuje oprávnění i v ní. Cesty, které pracují s více projekty (GET /api/v1/projects/,POST /api/v1/secrets/drift/detectbezproject_id,POST /api/v2/secrets/migrate), přijmou roli na libovolném projektu a pak pracují po projektech: seznam projektů vrátí jen projekty, které uživatel smí číst. Kontrola pojmenování secretu (POST /api/v1/organizations/{id}/secret-naming-policy/check) také přijmeconfig:readv libovolném projektu, takže uživatelé projektu dostanou nápovědu; vytvoření secretu politiku vynutí znovu.GET /api/v1/auth/me/permissionspřijímá volitelnýproject_ida pak vypíše oprávnění v tomto projektu a podenvironmentsoprávnění v tomto projektu pro každé prostředí organizace; seznamy oprávnění nyní počítají i přiřazení organizace a přidávajíany_project_permissions, oprávnění držená alespoň v jednom projektu (podle nich se zobrazí stránka Projekty a její položka v postranním menu). Na stránce projektu webové rozhraní kontroluje oprávnění v tomto projektu, takže uživatel s rolí na jednom projektu vidí tento projekt a jeho akce. Role zobrazená u uživatele je nyní nejvyšší role přiřazená bez omezení (Viewer, pokud žádná není) a slouží jen jako označení. Každá cesta, která vytváří uživatele (lokální, LDAP, Entra ID, GitHub, GitLab, OIDC, SAML, SPNEGO, SCIM a administrátorské účty vytvářené při startu), mu nyní také všude přiřadí jeho výchozí roli, a migrace000216(idempotentní) to udělá pro stávající uživatele, kteří nemají žádné přiřazení role, takže si roli, kterou měli, ponechají. Role z tokenu se nyní uplatní jen u strojového subjektu (JWT agenta nebo servisní identity): dosud platný JWT smazaného uživatele už svou roli nenese. - Přiřazení rolí z Terraformu a Go SDK si ponechají rozsah —
mazevault_user_role(aAssignRolev Go SDK) posílalyproject_idaenvironmentna nejvyšší úrovni tělaPOST /api/v1/rbac/users/{id}/roles, kde server četl jenscope, takže přiřazení vzniklo bez rozsahu: role platila ve všech projektech a prostředích. SDK a provider nyní posílajíscopea server bereproject_id/environmentz nejvyšší úrovně jako rozsah, kdyžscopechybí (požadavek, kde jsou obojí a liší se, vrací400).mazevault_sync_rule.project_idnyní vynutí nahrazení (pravidlo nelze přesunout mezi projekty). - Žádosti o schválení přebírají jen pole žadatele —
POST /api/v1/projects/{id}/approval-requestsvázal celý model žádosti, takže žadatel mohl vytvořit žádost už ve stavuapproved, s rozhodnutími, vlastním id, časovými údaji či expirací, nebo s politikou jiného projektu. Nyní přebírá jenrequest_type,resource_type,resource_id,action,details,reason,urgencyapolicy_id; zbytek nastaví server (nová žádost jepending, potřebuje jednoho schvalovatele a vyprší po 48 hodinách) a politika jiného projektu vrací400. - Certifikátové endpointy se kontrolují v projektu a prostředí samotného certifikátu — Kontrola oprávnění certifikátových endpointů se dívala na prostředí, ve kterém se požadavek vyhodnotil, a u uživatele s rolí přiřazenou k jednomu projektu na projekt uvedený v požadavku, nikoli na samotný certifikát.
GET,PUT,POST …/archive,…/revoke,…/unrevokeaGET …/targetspod/api/v1/certificates/{id}nyní posuzují oprávnění v prostředí a projektu certifikátu a jinak vrací403 insufficient permissions for environment; úprava, která certifikát přesouvá nebo uvádí prostředí, se posuzuje i v projektu a prostředí, kam se přesouvá. Obnovení a trvalé smazání certifikátu (POST …/restore,DELETE …/permanent) nyní zohledňují roli omezenou na projekt certifikátu, takže správce projektu je může provést pro svůj projekt (dříve je odmítla každá role omezená na projekt). Certifikát bez projektu je dostupný jen uživateli, jehož oprávnění není omezeno na některé projekty. - Seznam certifikátů ukazuje jen to, co uživatel smí číst —
GET /api/v1/certificates/(i jeho zobrazeníenriched) je nyní endpoint „libovolného projektu“: uživatel s rolí přiřazenou k jednomu projektu (nebo omezenou na některá prostředí) projde kontrolou oprávnění a dostane certifikáty, které smí číst v projektu a prostředí samotného certifikátu, místo403pro roli přiřazenou k jednomu projektu. Role omezená na některá prostředí, ale ne na projekt, kontrolou oprávnění už procházela (v prostředí požadavku) a dostávala certifikáty všech prostředí včetně prod; nyní dostane certifikáty prostředí, která smí číst.project_idseznam jen filtruje a nikdy nerozšiřuje. Certifikát bez projektu se zobrazí jen uživateli, jehož oprávnění není omezeno na některé projekty; kdo nesmí číst žádný, dostane prázdný seznam. - Export certifikátu se kontroluje v prostředí a projektu samotného certifikátu —
GET /api/v1/certificates/{id}/exportvyžadovalcertificate:readjen v prostředí, ve kterém se požadavek vyhodnotil, takže uživatel s rolí omezenou na jedno prostředí mohl stáhnout certifikát jiného prostředí (a na požádání i s privátním klíčem). Nyní posuzuje oprávnění v prostředí a projektu certifikátu a jinak vrací403 insufficient permissions for environment; certifikát bez projektu exportuje jen uživatel, jehož oprávnění není omezeno na některé projekty. - Projektové endpointy certifikátů a správců tajemství se kontrolují v prostředí daného záznamu —
GET /api/v1/projects/{id}/certificates/{certId}a seznam certifikátů projektu (GET …/certificates) vyžadovalycertificate:readjen v prostředí, na které se požadavek převedl, takže uživatel s rolí omezenou na dev mohl číst certifikát z prod podle id a vidět ho v seznamu. Endpoint podle id nyní vyžaduje oprávnění v prostředí certifikátu a seznam ponechá certifikáty prostředí, která uživatel smí číst.GET …/integrations/{integrationId}/secretsse kontroluje v prostředí, ke kterému je integrace vázána, aGET …/integrations/secret-managers(který vypisuje integrace všech projektů organizace) ponechá jen ty, které uživatel smí číst ve svém projektu a prostředí: uživatel s rolí přiřazenou k jednomu projektu tu už nevidí názvy a poskytovatele správců tajemství ostatních projektů. - Přiřazení šablony přijme jen účet CA z organizace projektu —
POST /api/v1/projects/{id}/templates/{template_id}ukládalooverride_ca_account_idz těla bez kontroly, takže šlo projekt nastavit k vydávání z účtu CA jiné organizace (nebo neexistujícího). Účet musí patřit organizaci projektu, jinak endpoint vrací400a nic nepřiřadí. - Stav odvolání certifikátu se kontroluje v prostředí a projektu samotného certifikátu —
GET /api/v1/certificates/{id}/statusneměl žádnou kontrolu oprávnění, takže každý přihlášený uživatel (i role bez oprávnění k certifikátům nebo přiřazená k jinému projektu či prostředí) mohl číst stav, sériové číslo a datum odvolání libovolného id certifikátu. Nyní vyžadujecertificate:readv prostředí a projektu certifikátu, jinak vrací403 insufficient permissions for environment. - Projektové routy pro HSM a externí CA odstraněny —
POST /api/v1/projects/{id}/ca/{caId}/hsmaPOST /api/v1/projects/{id}/ca/{caId}/external/configurepoužívaly id projektu z cesty jako id CA, takže uživatel sca:adminpřiřazeným celé organizaci (ne omezeným na projekt) mohl nastavit konfiguraci HSM nebo uložit konfiguraci externí CA libovolné CA zadáním jejího id, včetně CA jiné organizace. Routy jsou odstraněny; konzole a klienti používajíPOST /api/v1/ca/{id}/hsmaPOST /api/v1/ca/{id}/external/configure. Tyto routy kontrolují, že CA patří do organizace volajícího (viz „Routy certifikačních autorit zůstávají v organizaci volajícího“). - Role přiřazená jedné organizaci už nedosáhne na projekty jiné — Kontrola oprávnění projektové routy (
/api/v1/projects/{id}/...a rout, které pojmenují certifikát nebo jiný zdroj patřící projektu; routy/api/v1/ca/{id}pojmenují CA a tato změna je nepokrývá, řeší je „Routy certifikačních autorit zůstávají v organizaci volajícího“) posuzovala vlastní organizaci volajícího (výchozí organizaci u relace konzole nebo API tokenu) a nikdy organizaci projektu, takže administrátor přiřazený jedné organizaci mohl podle id číst a měnit CA, certifikáty a další zdroje projektu jiné organizace. Oprávnění nyní musí platit i v organizaci projektu; role neomezené na organizaci a požadavky uvnitř jedné organizace se nemění. - Fronta obnov se posuzuje v projektu a prostředí certifikátu — Fronta obnov (
/api/v1/renewal-queue/…) a endpointy obnovení a historie obnov certifikátu kontrolovaly oprávnění bez projektu a prostředí certifikátu: role omezená na jeden projekt dostala403u každé položky fronty a role omezená na dev mohla číst, rušit, obnovovat a znovu spouštět položky a certifikáty prostředí prod. Položka fronty nyní patří do projektu svého certifikátu: schválení, zrušení, obnovení běhu a DCV endpointy vyžadují své oprávnění v tomto projektu, v prostředí certifikátu (a v organizaci projektu),POST /api/v1/certificates/{id}/renewaGET …/renewal-historyho vyžadují v projektu a prostředí samotného certifikátu aGET /api/v1/renewal-queue/ponechává položky, jejichž certifikát smí uživatel číst. Certifikát bez projektu se posuzuje přísně (dosáhne na něj jen role, která není omezená na některé projekty); neznámou položku fronty dál odpoví samotný endpoint. - Kontrola organizace se týká i smazaných projektů — Kontrola, že role přiřazená jedné organizaci nedosáhne na projekty jiné, četla organizaci projektu běžným dotazem, který přeskakuje projekt smazaný (měkce, jako
DELETE /api/v1/projects/{id}), takže CA, certifikáty a další data, která smazaný projekt jiné organizace stále drží, byly pro administrátora výchozí organizace dostupné podle id. Organizace se nyní čte včetně smazaných projektů a požadavek se odmítne, pokud ji nelze přečíst; odmítnuté rozhodnutí se ukládá do cache stejně jako povolené. - Seznam projektů ukazuje jen projekty organizace volajícího —
GET /api/v1/projects/vracel uživateli, jehož role je přiřazena organizaci, všechny projekty všech organizací, protože se role počítala jako držená „všude“ a seznam se nefiltroval. Projekt jiné organizace než té z požadavku se nyní kontroluje zvlášť, takže takový uživatel vidí jen projekty své organizace; role neomezená na organizaci dál vypíše všechny. - Routy certifikačních autorit zůstávají v organizaci volajícího —
GETaPUT /api/v1/ca/{id},POST /api/v1/ca/{id}/hsm,…/external/configure,…/external/test,…/external/templates/synca…/crl/regeneratenekontrolovaly, ke které organizaci CA patří, takže administrátor přiřazený jedné organizaci mohl podle id přečíst CA jiné organizace, přepsat jí nastavení HSM, adresy OCSP a CRL, uložit pro ni konfiguraci externí CA a znovu vygenerovat její CRL, aGET /api/v1/ca/vypisoval CA všech organizací. CA patří do organizace svého projektu nebo CA účtu, ke kterému je připojena. Tyto routy teď vyžadují oprávnění v této organizaci (přiřazení, které není omezeno na organizaci, dosáhne na každou CA) a odpovídají403 Access deniedpro CA jiné organizace, pro CA, která nepatří žádné organizaci (vytvořenou přesPOST /api/v1/ca/initialize: dosáhne na ni jen přiřazení neomezené na organizaci) a pro id, které žádnou CA nepojmenovává; ve všech třech případech stejně, aby nešlo zjišťovat id. Seznam vrací jen CA, které volající smí číst. Zkontrolujte přiřazení rolí API tokenů, které používají/api/v1/ca/: token sca:adminomezeným na jednu organizaci už nedosáhne na CA, které nepatří žádné organizaci. - Šablony certifikátů zůstávají v organizaci volajícího —
GET,PUTaDELETE /api/v1/certificate-templates/{id}nekontrolovaly, ke které organizaci šablona patří, takže administrátor přiřazený jedné organizaci mohl podle id přečíst, změnit nebo smazat šablonu jiné organizace (změna šablony navíc mění nastavení obnovy certifikátů, které šablonu následují). Oprávnění se teď posuzuje v organizaci šablony; šablona jiné organizace i neznámé id odpoví403. Čtení šablon (GET /api/v1/certificate-templates/a/{id}) je nově otevřené i roli přiřazené jednomu projektu, pro šablony její vlastní organizace, protože je potřebuje záložka Šablony projektu a dialog žádosti o certifikát: taková role dostávala na seznam403. Šablony jiné organizace vyžadují přiřazení této organizace nebo přiřazení neomezené na organizaci. - Šablony projektů zůstávají ve své organizaci a už nepřepisují jiné šablony certifikátů —
PUT /api/v1/organizations/templates/{templateId}brala propojenou šablonu certifikátu zprotocol_config.certificate_template_idpožadavku a tuto šablonu přepsala, takže držiteltemplate:writemohl přepsat šablonu certifikátu jiné organizace nebo sdílenou systémovou šablonu (název, platnost, použití klíče, schvalování, CA účet; s ní se měnilo i nastavení obnovy všech certifikátů, které ji následují), a obě routy měnily nebo mazaly šablonu projektu libovolné organizace. Propojení teď nastavuje jen server:certificate_template_idz požadavku se ignoruje a uložené propojení na šablonu jiné organizace nebo systémovou šablonu se nenásleduje (šablona projektu se místo toho propojí se šablonou své organizace). Úprava aDELETEposuzují oprávnění v organizaci šablony a pro šablonu jiné organizace odpoví403(stejně pro neznámé id, kromě role neomezené na organizaci, která dostane404; dříve obojí500). Vytvoření a úprava šablony projektu kategorie certifikátů teď kontroluje CA účet a produkt stejně jako routy šablon certifikátů (400pro účet nebo produkt jiné organizace,409pro kód obsazený systémovou šablonou). - Šablona bez CA vydává jen z interní CA své organizace — Když šablona certifikátu neuváděla CA účet ani CA, vydání podepsala ta aktivní interní CA, kterou databáze vrátila jako první, což mohla být interní CA jiné organizace. Taková šablona teď vydává jen z interní CA své organizace (organizace šablony, tedy projektu) (certifikát si zapíše tento CA účet); bez ní se požadavek odmítne s
400(„template has no CA assigned and the organization has no internal CA“). Systémové šablony jakoagent-mtlsdál používají aktivní interní CA. - Objevené certifikáty vyžadují přiřazení neomezené na organizaci a archivované certifikáty se vypisují podle organizace a prostředí — Objevené certifikáty nemají organizaci (jeden záznam na otisk, bez ohledu na to, agent nebo CA účet které organizace jej nahlásil), přesto role přiřazená jedné organizaci vypisovala, četla, ignorovala, archivovala, přiřazovala a adoptovala objevené certifikáty všech organizací. Routy
/api/v1/discovered-certificatesteď roli omezené na organizaci nebo projekt odpoví403; role bez těchto omezení (omezení na prostředí zůstává) funguje jako dřív, takže ji přiřaďte uživatelům, kteří objevené certifikáty třídí.GET /api/v1/archived/certificatesa certifikáty vGET /api/v1/archived/summaryvypisovaly archivované certifikáty všech organizací a prostředí; teď ponechají jen ty, které volající smí číst (archive:read) v projektu, organizaci a prostředí certifikátu, a přehled ukazuje archivované objevené certifikáty jen roli neomezené na organizaci nebo projekt. - Export certifikátu vrací 404 pro neznámý certifikát a už neposílá text chyby —
GET /api/v1/certificates/{id}/exportodpovídal pro neznámý certifikát500 "record not found"a u jiných selhání posílal interní text chyby (napříkladfailed to parse certificate: x509: …). Neznámý certifikát teď odpoví404 "Certificate not found"; formát, který může volající změnit (DER sinclude_chain, JKS bez privátního klíče, nepodporovaný formát), odpoví400se zprávou (dříve500); každé jiné selhání odpoví pevnýmInternal server errora příčina se zapíše jen do logu serveru. - Agentní mTLS ověřuje řetězec klientského certifikátu —
POST /api/v1/agents/me/refresh-tokena starší stahování aktualizací agenta přijímaly jakýkoli klientský certifikát (na TLS spojení nebo v hlavičceX-Client-Cert/ssl-client-certdůvěryhodné proxy), jehož sériové číslo odpovídalo certifikátu agenta, bez ověření, kdo jej podepsal, takže self-signed certifikát s tímto sériovým číslem získal nový token agenta. Certifikát teď musí být certifikát agenta, který MazeVault pro toto sériové číslo vydal (stejný SHA-256 otisk), nesmí být zneplatněný, musí být právě platný, povolený pro ověření klienta a navazovat na CA, která jej vydala (CA zapsanou u certifikátu; u certifikátů zapsaných dříve, než se CA zapisovala, na některou z interních CA). Jakýkoli jiný certifikát dostane401 CLIENT_CERT_INVALIDbez podrobností (prošlý dříve dostalCERT_EXPIRED); důvod se zapíše do logu. Nasazení agenti fungují dál bez nové registrace: jejich certifikáty vydala interní CA a jsou zapsané. Agenta, jehož vydávající CA byla smazána, je nutné zaregistrovat znovu. - Synchronizace nasazení certifikátu se posuzuje ve vlastním prostředí certifikátu a jen pro jeho cíl —
POST /api/v1/certificates/{id}/targets/{targetId}/syncposuzovalorotation:executejen v prostředí, které uvedl klient, a certifikát v cestě nebralo v úvahu, takže uživatel omezený nadevnasadil certifikát zproddo jeho cíle tím, že poslal?environment=dev, a libovolný cíl šlo synchronizovat pod id libovolného certifikátu. Cíl nyní musí patřit certifikátu v cestě (jinak 404) a synchronizace se posuzuje v prostředí a projektu tohoto certifikátu, stejně jako kanonickéPOST /api/v1/rotation/resources/certificate_deployment/{id}/trigger; obě cesty běží stejným kódem. Neúspěšná synchronizace vrací pevné tělo „Internal server error“ místo textu chyby kroku a zapisuje se do auditu s výsledkem outcome=failed. - Rotační cesty certifikátu se posuzují ve vlastním prostředí certifikátu — Způsobilost, rotační konfigurace, historie, běhy, předběžné kontroly obnovy a nasazení, cíle nasazení a náhled formátu pod
/api/v1/certificates/{id}/…posuzovaly oprávnění v prostředí, které uvedl klient, takže uživatel omezený nadevčetl a měnil rotační konfiguraci a cíle nasazení certifikátu zprodtím, že poslal?environment=dev. Každá cesta nyní posuzuje oprávnění v prostředí a projektu certifikátu v cestě a neexistující certifikát vrací 404 „Certificate not found“ (konfigurace, předběžná kontrola a vytvoření cíle vracely 500 s chybou databáze, historie prázdný seznam). - Cíle a běhy certifikátu jsou dostupné jen pod tímto certifikátem a cíl doručující do jiného projektu se posuzuje i tam —
GET,PUT,DELETE /api/v1/certificates/{id}/targets/{targetId}aGET …/statusnebraly v úvahu certifikát v cestě, takže uživatel, který smí pracovat s jedním certifikátem, četl, měnil nebo mazal cíl nasazení libovolného jiného certifikátu, aGET /api/v1/certificates/{id}/rotation/executions/{execId}vracelo libovolný běh. Cíl či běh nyní musí patřit certifikátu v cestě (jinak 404). Cíl dostává certifikát i jeho soukromý klíč, proto jeho vytvoření či změna nově vyžaduje takésecret:writetam, kam doručuje, pokud to není vlastní projekt a prostředí certifikátu: u integrace (integration_id) v projektu a prostředí integrace; u cíle správce tajných klíčů v projektu a prostředí, do kterého doručení zapisuje (target_project_idaenvironmentz konfigurace integrace, jinaktarget_project_idatarget_environmentcíle, jinakproduction), a utarget_secret_idtaké ve vlastním projektu a prostředí tohoto tajného klíče. - Cíl rotace tajného klíče doručuje jen agentovi projektu tajného klíče — Cíl nasazení tajného klíče (
POST,PUT /api/v1/secrets/{id}/rotation/targets…), jehožconfig.agent_iduváděl libovolného agenta, i agenta jiné organizace, se přijal s oprávněnímsecret:rotatena tajný klíč a každá rotace pak novou hodnotu tajného klíče tomuto agentovi odeslala. Agent nyní musí být navázán na vlastní projekt tajného klíče (aktivní integrace agenta v projektu), jinak vytvoření i úprava vracejí 404. Dříve vytvořené cíle se znovu kontrolují při běhu rotace: krok synchronizace k agentovi, který na projekt tajného klíče navázán není, selže, nic neodešle a odmítnutí zapíše do logu (nikdy hodnotu). - Cíl tajného klíče zapisující do jiného prostředí projektu se posuzuje v tomto prostředí — Cíl nasazení tajného klíče, který uváděl integraci vlastního projektu tajného klíče v jiném prostředí (
binding_refneboconfig.integration_id, například integraci zprodpro tajný klíč zdev), vyžadoval jensecret:rotatena tajný klíč, takže rotátor omezený nadevzařídil, aby každá rotace zapisovala doprod. Takový cíl nyní vyžaduje takésecret:writev prostředí integrace (jinak 403), stejně jako už cíl uvádějící integraci jiného projektu. - Historie, kontrola souladu a import objevených keytabů zůstávají v organizaci volajícího — GET
/api/v1/keytabs/{id}/history, POST/api/v1/keytabs/{id}/check-compliancea POST/api/v1/keytabs/discovered/{id}/importneporovnávaly keytab s organizací volajícího: kdokoli s oprávněnímkeytab:readnebokeytab:writemohl číst historii verzí keytabu jiné organizace, spustit jeho kontrolu souladu nebo z jeho objeveného keytabu vytvořit keytab v této organizaci. Stejně jako get, update, download a delete nově odpovídají404pro keytab či objevený keytab jiné organizace i pro neznámé id (historie neznámého keytabu byla prázdný seznam). API token uvádí svou organizaci vorganization_idna těchto cestách stejně jako na ostatních. - Stažení keytabu vrací Cache-Control: no-store — GET
/api/v1/keytabs/{id}/downloadje záměrné odhalení uloženého keytabu chráněné oprávněním (zůstává auditované, nikdy s hodnotou). Odpověď nově nese pouzeCache-Control: no-store, takže keytab neuloží žádný prohlížeč ani proxy; OpenAPI dokument a generovaný klient hlavičku popisují. - Selhání auditních logů, compliance reportu a exportu do Terraformu už neposílají interní text chyby —
POST /api/v1/audit-logs/search,GET /api/v1/audit-logs/,GET /api/v1/projects/{id}/audit-logs,GET /api/v1/compliance/{type}aGET /api/v1/terraform/export/project|organization/{id}při selhání databáze nebo služby vracely text chyby v těle HTTP 500. Nově vracejí pevný textInternal server error; příčina se zapisuje pouze do logu serveru. - Export organizace do Terraformu kontroluje organizaci z URL —
GET /api/v1/terraform/export/organization/{id}posuzovala oprávněníorg:readjen pro organizaci požadavku, takže uživatel omezený na jednu organizaci mohl podle id exportovat libovolnou jinou. Id se nyní ověřuje proti přiřazením organizací volajícího (403 pro jinou organizaci). - Test integrace organizace už nedešifruje hodnoty z požadavku —
POST /api/v1/organizations/{id}/integrations/testpřed odesláním testovacího oznámení dešifroval každou hodnotuenc:z požadavku hlavním klíčem serveru, takže držitelintegration:readmohl poslat uložený šifrový text (napříkladapi_tokenJiry s vlastníbase_url) a získat otevřený text na hostiteli dle své volby. Endpoint už vstup z požadavku nedešifruje: konfigurace s hodnotouenc:odpoví400invalid integration configa nic se neodešle. - Integrace organizace už nevracejí uložená tajemství —
GET /api/v1/organizations/{id}/integrationsvracel dešifrované přihlašovací údaje všech integrací (API token Jiry, URL Teams/Slack/webhooku, client secret Office 365) a otevřené přihlašovací údaje streamů logů a archivů (HEC token Splunku, API klíč a heslo Elasticsearch, tajný přístupový klíč S3, klíč účtu, SAS token a connection string Azure Blob, heslo sdílené složky);POST /api/v1/organizations/{id}/integrationsaPUT /api/v1/organizations/integrations/{integrationId}vracely šifrované hodnoty. Tato pole nyní odpovídají********, jsou-li nastavena, a"", jsou-li prázdná. Úprava, která pošle zpět********nebo tajné pole vynechá, zachová uloženou hodnotu;""vymaže volitelné tajemství a povinné zachová (Jiraapi_token, Teams/Slackwebhook_url, webhookurl, Splunkhec_token, S3secret_access_key). - Úprava a smazání integrace organizace ověřují organizaci integrace —
PUTaDELETE /api/v1/organizations/integrations/{integrationId}posuzovalyintegration:writejen pro organizaci požadavku, takže uživatel omezený na jednu organizaci mohl podle id měnit nebo mazat notifikační kanály, streamy logů a archivy jiné organizace. Nyní se organizace integrace ověřuje vůči přiřazením volajícího (403pro jinou organizaci). - URL integrací odmítají IPv6 loopback — Kontrola SSRF u URL integrací organizace (Jira, Teams, Slack, webhook) porovnávala hostitele s
[::1], což rozparsovaná URL nikdy nevrátí, takžehttp://[::1]/…prošla a testovací oznámení nebo report mohly jít na službu na samotném serveru.::1je nyní odmítnuta stejně jako127.*alocalhost. - Selhání týdenního reportu už neposílají interní text chyby —
POST /api/v1/reports/triggeraGET /api/v1/reports/previewodpovídaly na selhané doručení nebo volání databáze textem chyby vdetailstěla HTTP 500, včetně cílových hostitelů (například dešifrované URL webhooku) a příjemců. Nyní odpovídajíFailed to trigger report/Failed to generate previewbezdetails; příčina se zapisuje jen do logu serveru. - URL integrací odmítají lokální IP adresy v každém zápisu — Kontrola SSRF u URL integrací organizace (Jira, Teams, Slack, webhook) porovnávala IP hostitele jako text, takže jiné zápisy lokální adresy prošly (
[0::1],[0:0:0:0:0:0:0:1],[::ffff:127.0.0.1],[::],[fe80::1%eth0]). Hostitel se nyní parsuje jako IP (bez závorek a zóny) a v jakémkoli zápisu se odmítají adresy loopback (127.0.0.0/8,::1), nespecifikované (0.0.0.0,::), link-local (169.254.0.0/16včetně adresy cloudových metadat169.254.169.254,fe80::/10) a multicast, stejně jakolocalhosta prázdný hostitel. Privátní rozsahy (172.16.0.0/12,fd00::/8) a jména hostitelů, která se překládají na interní adresy, tato kontrola neodmítá. - URL integrací odmítají
localhost.a*.localhost— Kontrola SSRF u URL integrací organizace přijímalalocalhost.(s tečkou na konci) a jména pod.localhost(napříkladapi.localhost), která se překládají na samotný server. Obojí je nyní odmítnuto stejně jakolocalhost. - Přihlašovací údaje streamů logů a archivů jsou v klidu šifrované — HEC token Splunku, API klíč a heslo Elasticsearch, tajný přístupový klíč S3, klíč účtu, SAS token a connection string Azure Blob a heslo sdílené složky u integrací organizace byly v databázi uloženy v otevřené podobě (šifrované byly jen přihlašovací údaje notifikací). Nyní se šifrují hlavním klíčem serveru stejně jako ostatní. Existující záznamy nepotřebují migraci: dál se čtou tak, jak jsou, a zašifrují se při své příští úpravě.
- Zachované tajemství integrace nelze přesunout na jiný endpoint —
PUT /api/v1/organizations/integrations/{integrationId}zachoval uložené tajemství poslané zpět jako********(nebo vynechané) i tehdy, když tentýž požadavek změnil, kam se posílá, takže držitelintegration:writemohl nasměrovatbase_urlJiry,endpointSplunku,endpoints/cloud_idElasticsearch,bucket/region/endpointS3,account_name/container_nameAzure Blob,base_pathsdílené složky nebotenant_id/client_idOffice 365 na vlastního hostitele a získat uložený přihlašovací údaj. Taková úprava nyní odpoví400invalid integration configa nic nezmění; při změně endpointu zadejte tajemství znovu. - Test uložené integrace organizace funguje s maskovanými tajemstvími — Protože se tajemství vracejí jako
********,POST /api/v1/organizations/{id}/integrations/testa.../test-archivepřijímají volitelnéintegration_iduložené integrace (stejného typu): tajná pole poslaná jako********nebo vynechaná se převezmou z ní, pokud se nezměnila pole endpointu (URL, hostitel, účet, bucket, cesta); změněný endpoint vyžaduje znovu zadat tajemství (400invalid integration config). Uložená integrace se posuzuje ve své organizaci (403pro jinou organizaci,404pro neznámou). Neúspěšný test uložené integrace odpovíintegration test failed(test archivu:Connection failed) místo chyby poskytovatele, která mohla obsahovat uloženou URL webhooku; příčina se zapisuje do logu. - Neúspěšné testy uložené integrace už nezapisují do logu její tajnou URL — Záznam v logu serveru o neúspěšném
…/integrations/testnebo…/test-archiveuložené integrace (integration_id) obsahoval chybu poskytovatele, která cituje uloženou URL Slacku, Teams nebo webhooku; nyní URL vynechává a každou uloženou tajnou hodnotu maskuje. - Čtení integrace projektu už nevrací uložená tajemství —
GET /api/v1/projects/integrations/{integrationId}vracel dešifrovanou konfiguraci: tokeny Vaultu, klientská tajemství (včetně klientského tajemství jednotného přihlášení Entra ID zkopírovaného do integrací on-behalf-of), hesla a klíče a jakopasswordi hodnotu propojeného tajemství, a to každému držiteliintegration:read, který tak mohl číst tajemství bezsecret:read. Každé vyplněné tajné pole nyní vrací********, včetně hodnoty propojeného tajemství.PUTtéže integrace u tajného pole odeslaného jako********nebo vynechaného ponechá uloženou hodnotu, ale jen pokud se nemění pole endpointu (URL, hostitelé, porty, tenant, region, nastavení TLS); změna endpointu se zachovaným tajemstvím vrací400invalid integration configa nic nemění. Uložený formulář už do konfigurace nekopíruje hodnotu propojeného tajemství. - Cesty integrací projektu ověřují prostředí integrace — Cesty podle ID integrace (
GET,PUT,DELETE /api/v1/projects/integrations/{integrationId}a její cestydeletion-impact,test,syncasessions) posuzovalyintegration:read/integration:writev prostředí požadavku, takže uživatel s oprávněním jen prodevmohl číst, měnit, testovat, synchronizovat nebo smazat integraciprod. Nyní se posuzují ve vlastním prostředí a projektu integrace (jinak403) a neznámé ID vrací404integration not foundmísto500.GET /api/v1/projects/{id}/integrations/groupedvypisuje jen prostředí, která uživatel smí číst,GET /api/v1/projects/{id}/environments/{env}/integrationsse posuzuje v{env}aPOST /api/v1/projects/{id}/integrations/test-connectionv prostředí z těla požadavku. - Test uložené integrace projektu funguje s maskovanými tajemstvími — Protože se tajemství integrace projektu vracejí jako
********,POST /api/v1/projects/{id}/integrations/test-connectionpřijímá volitelnéintegration_iduložené integrace (stejný projekt a poskytovatel): tajná pole odeslaná jako********nebo vynechaná se převezmou z ní, pokud se nezměnila pole endpointu; změněný endpoint vyžaduje tajemství zadat znovu (400invalid integration config). Uložená integrace se posuzuje sintegration:writeve svém prostředí a projektu (403,404pro neznámou). Chybová zpráva takového testu maskuje uložené tajné hodnoty. - Chyby integrací projektu už neposílají interní text chyby — Cesty databázových relací (
GET …/sessions,POST …/sessions/terminate,POST …/sessions/drainu/api/v1/projects/integrations/{integrationId}), test připojení, ruční synchronizace a seznamy integrací vracely při selhání služby nebo databáze text chyby v těle HTTP 500. Nyní vracejíInternal server error; příčina se zapisuje jen do logu serveru. Neplatné ID integrace uGET,PUT,DELETE /api/v1/projects/integrations/{integrationId}a jejíhodeletion-impactvrací400Invalid Integration UUIDa tělo úpravy ve špatném tvaru400s chybou vazby, místo500. - Odkazy na tajemství v databázových integracích vyžadují oprávnění číst tajemství — Databázová integrace může heslo administrátora nebo walletu uvést odkazem (
_password_sourcemazevaultnebokeyvault); server ho vyřeší a hodnotu pošle na databázového hostitele z konfigurace. Držitelintegration:writebezsecret:readtak mohl přesPOST /api/v1/projects/{id}/integrations/test-connectionnechat poslat libovolné tajemství projektu na hostitele dle své volby, takový odkaz uložit při vytvoření nebo úpravě, nebo ho vyřešit cestamitest,syncasessions; zdrojová integrace správce tajemství byla přijata z libovolného projektu i organizace. Požadavek nyní odkaz vyřeší nebo uloží jen tehdy, když volající másecret:readv projektu a prostředí odkazovaného tajemství a u zdrojové integraceintegration:readasecret:readv jejím vlastním projektu a prostředí (jinak403); odkaz v testu připojení bezenvironmentvrací400. Plánované synchronizace uložených integrací řeší odkazy jako dosud. Neúspěšné vytvoření databázové integrace (například duplicitní název) už nekončí pádem serveru. - Úprava integrace projektu nepřesune heslo administrátora ani propojené tajemství na jiného hostitele — Pravidlo, že zachované tajemství nesmí následovat změněný endpoint, pokrývalo jen tajemství uvnitř konfigurace.
PUT /api/v1/projects/integrations/{integrationId}mohl změnithostneboportdatabázové integrace při zachování uloženého hesla administrátora, nebo endpoint integrace, jejíž přihlašovací údaj pochází z propojeného tajemství, a další volánítestnebo cesty relací poslalo toto heslo nebo hodnotu tajemství na nového hostitele. Taková úprava nyní vrací400invalid integration configa nic nemění: endpoint databázové integrace se mění jen se znovu zadanýmadmin_passworda integrace s propojeným tajemstvím si endpoint ponechává. - Test uložené integrace projektu maskuje uložená tajemství v textu chyby —
POST /api/v1/projects/integrations/{integrationId}/testvracel při neúspěchu text chyby poskytovatele a ukládal ho jakolast_sync_errorintegrace; poskytovatel, který cituje obdržený přihlašovací údaj (token, heslo v připojovacím řetězci), tak uložené tajemství ukázal každému sintegration:read. Každá uložená tajná hodnota je v tomto textu nyní nahrazena********. - Zachované tajemství integrace projektu nelze směrovat přes jiného agenta —
PUT /api/v1/projects/integrations/{integrationId}mohl přepnoutuse_agent_proxynebo změnitagent_idpři zachování uložených tajemství a poslat je přes agenta zvoleného volajícím. Směrování přes agenta se nyní počítá jako endpoint: jeho změna se zachovaným uloženým tajemstvím vrací400invalid integration config; pro změnu tajemství zadejte znovu. - Další pole integrace projektu se počítají jako endpoint — Region AWS (
aws_region,region) a nastavení síťového šifrování Oracle (use_nne,encryption_level,encryption_types,checksum_level,checksum_types) se nyní počítají jako pole endpointu: úprava integrace projektu, která je mění při zachování uloženého tajemství, vrací400invalid integration config. - Trasy skupin integrací už nevracejí text databázové chyby — Selhávající
GETneboPOST /api/v1/projects/{id}/integration-groupsaGET,PUTneboDELETE /api/v1/integration-groups/{id}odpovídaly HTTP 500 s původní chybou databáze (tabulka, omezení a SQL stav). Nyní odpovídají{"error": "Internal server error"}; příčina je jen v logu serveru. - Skupiny integrací propojují jen integrace vlastního projektu —
mappingsskupiny integrací (POST /api/v1/projects/{id}/integration-groups,PUT /api/v1/integration-groups/{id}) se ukládala bez kontroly id integrací, takže skupina mohla uvést integraci jiného projektu nebo organizace, kterou její vlastník nesmí číst. Každé mapování musí nyní uvádět integraci projektu skupiny; chybné, neznámé nebo cizí id vrací400mappings must name integrations of the projecta nic se nezmění. Čtení, změna a smazání skupiny podle id a výpis či vytvoření skupin projektu se posuzují ve vlastním projektu a organizaci skupiny. - Aktualizace databázové integrace posuzuje reference na tajemství v konfiguraci —
PUT /api/v1/projects/integrations/{integrationId}databázové integrace uložil referenci v konfiguraci (heslo Oracle walletu,_wallet_password_sourcemazevaultnebokeyvault), aniž by ověřil, že volající smí referencované tajemství číst, zatímco vytvoření to ověřovalo. Držitelintegration:writebezsecret:readtak mohl nechat tajemství odeslat na databázový server při dalším připojení. Aktualizace nyní posuzuje reference zapsané konfigurace stejně jako vytvoření (403bezsecret:readv projektu a prostředí referencovaného tajemství). - Kontrola Managed Identity zahrnuje jen organizaci požadavku —
POST /api/v1/admin/azure/mi-permissions-checktestovala integrace Azure všech organizací a vracela jejich názvy, URL Key Vaultů a prostředí držiteliintegration:writev kterékoli z nich. Nyní vypisuje a testuje jen integrace projektů organizace požadavku. - Incident se čte jen v rámci vlastní organizace —
GET /api/v1/incidents/{id}vracel jakýkoli incident podle id, i incident jiné organizace. Incident se nyní posuzuje tam, kam patří: role omezená na organizaci dostane pro incident jiné organizace403a prostředí a projekt incidentu se kontrolují jako u trasy pro vyřešení. Neznámé id dál vrací404; selhání databáze nyní vrací500{"error": "Internal server error"}místo404. - Skrytí řádku rotace vyžadující pozornost zůstává v rámci organizace —
POST /api/v1/dashboard/rotation/actionable/{id}/dismisszapsal skrytí do prostředku rotace kterékoli organizace podle id. Prostředek projektu se nyní posuzuje tam, kam patří: role omezená na organizaci dostane pro prostředek projektu jiné organizace403a nic se nezapíše, adashboard:writemusí platit i v prostředí a projektu prostředku. - Reporty certifikátů a seznam incidentů už nevracejí text databázové chyby — Selhávající
GET /api/v1/dashboard/certificates/reports,POST /api/v1/dashboard/certificates/refreshneboGET /api/v1/incidents/odpovídaly HTTP 500 s původní chybou databáze. Nyní odpovídají{"error": "Internal server error"}; příčina je jen v logu serveru. - Platformní řádky rotací na přehledu vyžadují neomezenou roli —
GET /api/v1/dashboard/rotation/actionablezobrazoval řádky rotací bez projektu (systémové klíče, servisní identity, SSH páry klíčů bez projektu) rolím omezeným na organizaci aPOST /api/v1/dashboard/rotation/actionable/{id}/dismissjim je dovolil skrýt. Stejně jako u tras Rotation Problems se takové řádky nyní zobrazují jen roli neomezené na projekt ani organizaci a skrytí jinou rolí vrací403a nic nezapíše. - Vytvoření projektové integrace a vazby agentů kontrolují prostředí —
POST /api/v1/projects/{id}/integrationsaPOST /api/v1/projects/{id}/integrations/agentsposuzovalyintegration:writev prostředí požadavku, ne venvironmenttěla, takže uživatel s oprávněním jen vdevmohl vytvořit integraci nebo navázat agenta vprod.GET /api/v1/projects/{id}/integrations/agentsvracel vazby všech prostředí aDELETE /api/v1/projects/{id}/integrations/agents/{agentId}odebral vazbu v jakémkoli prostředí. Vytvoření a navázání se nyní posuzují v prostředí těla, seznam ponechává vazby prostředí, kde má uživatelintegration:read(a vazby bez prostředí), a odebrání vazby se posuzuje v jejím vlastním prostředí (jinak403a nic se nezmění). Odebrání agenta, kterého projekt nemá navázaného, vrací404místo204. - Rozsah Entra integrace se posuzuje tam, kam integrace patří —
GETaPUT /api/v1/entra/{integrationId}/scopečetly a nahrazovaly rozsah Entra kterékoli integrace podle id, i integrace jiného prostředí, projektu nebo organizace, aentra:read/entra:writeposuzovaly jen v prostředí požadavku. Nyní se posuzují ve vlastním prostředí a projektu integrace (jinak403a nic se nezmění) a neznámé id vrací404integration not foundmísto400s textem databáze.POST /api/v1/entra/projects/{id}/scope-previewse posuzuje venvironmentsvého těla. - Agenta lze navázat jen na projekty vlastní organizace —
POST /api/v1/projects/{id}/integrations/agentsnavázal na projekt agenta kterékoli organizace a navázaný agent sallow_deploymentdostává nasazení projektu. Agent registrovaný v jiné organizaci, než je organizace projektu, je nyní odmítnut s404Agent not foundjako neznámý agent a nic se nezapíše. Agenti registrovaní dříve, než agenti nesli organizaci, zůstávají navázatelní. - Trasy rozsahu Entra už nevracejí interní text chyby —
GETaPUT /api/v1/entra/{integrationId}/scope,POST /api/v1/entra/projects/{id}/scope-previewa krok rozsahu Entra vPOST /api/v1/projects/{id}/integrationsodpovídaly na každé selhání400s textem chyby, včetně selhání databáze, dešifrování nebo Microsoft Graph. Vstup, který může volající opravit (integrace jiného poskytovatele, neúplná nebo nepodporovaná vazba, neúplné přihlašovací údaje náhledu), dál vrací400se zprávou; jakékoli jiné selhání nyní vrací500{"error": "Internal server error"}a příčina je jen v logu serveru. - Heslo peněženky databáze se musí při změně zdroje zadat znovu —
PUT /api/v1/projects/integrations/{integrationId}databázové integrace mohl změnit_wallet_password_source(static,mazevault,keyvault) nebo_wallet_password_source_integration_id, zatímcowallet_passwordchybělo nebo bylo poslané jako********; uložená hodnota pak zůstala pod novým zdrojem, takže cesta v key vaultu se stala statickým heslem peněženky, nebo se skutečné heslo vyhodnotilo jako klíč tajemství a objevilo se v chybě synchronizace. Taková úprava nyní vrací400wallet_password must be re-entered when its source changesa nic nezmění; úprava, která pošle novou hodnotu, se uloží, a výslovně prázdnéwallet_passworduložené heslo vymaže (například když integrace Oracle přejde z TCPS na síťové šifrování a peněženku už nepoužívá). Pro heslo správce to platilo už dříve. - Chyby synchronizace integrace maskují hodnoty tajemství —
POST /api/v1/projects/integrations/{integrationId}/synca běhy synchronizace a testu připojení, které zapisují stav synchronizace projektové integrace, ukládaly a vracely text chyby beze změny vlast_sync_errora ve zprávě synchronizace. Neúspěšný odkaz na tajemství cituje hodnotu, kterou se pokusil vyhodnotit (napříkladMazeVault secret "…" not found), takže heslo uložené pod nesprávným zdrojem se mohlo objevit tam i v logu serveru. Každá hodnota tajemství z konfigurace integrace (uložená i vyhodnocená) je v tomto textu nyní nahrazena********, i tam, kde ji text cituje s escapovanými"a\; tato escapovaná podoba se nyní maskuje i v textu chyby testů připojení projektové integrace. Stejné maskování platí pro všechny ostatní zápisylast_sync_errorprojektové integrace: pravidla synchronizace, synchronizaci Entra ID a kroky rotace, které zapisují selhání integrace. - Kontakty pro incidenty vyžadují oprávnění organizace —
GETaPUT /api/v1/organization/incident-contactsvyžadovaly jen přihlášení, takže kterýkoli uživatel nebo API token mohl číst kontakty organizace pro incidenty (jména, e-mailové adresy, telefony) a nahradit je, a tím přesměrovat oznámení o incidentech. Čtení nyní vyžadujeorg:reada nahrazeníorg:admin; bez nich trasy vracejí403a nic se nezmění. Záložka Incident Response v nastavení organizace se zobrazuje jen sorg:reada její úpravy jen sorg:admin. - Koncové body streamů logů a archivů odmítají lokální adresy — Kontrola SSRF integrací organizace pokrývala jen URL notifikací (Jira, Teams, Slack, webhook).
endpointSplunku, každá položkaendpointsElasticsearch,hostsyslogu a hostitel Azure Blob (zaccount_namenebo zBlobEndpointčiAccountName/EndpointSuffixconnection stringu) se nekontrolovaly, takže stream auditu se svým HEC tokenem nebo přihlašovacími údaji šlo nasměrovat na službu na samotném serveru nebo na adresu cloudových metadat.POST /api/v1/organizations/{id}/integrations,PUT /api/v1/organizations/integrations/{integrationId}aPOST /api/v1/organizations/{id}/integrations/test-archivenyní odmítají adresy loopback (127.0.0.0/8,::1), nespecifikované, link-local (169.254.0.0/16včetně169.254.169.254,fe80::/10) a multicast v jakémkoli zápisu,localhosta jména pod.localhosts400a zprávou kontroly; nic se neuloží ani nevolá. Privátní rozsahy (10.0.0.0/8,172.16.0.0/12,192.168.0.0/16) zůstávají pro tyto koncové body povolené.
Poznámky¶
- Dopad na upgrade (omezené role pro uživatele v prohlížeči) — Role omezené na prostředí a projekt nyní omezují i uživatele v prohlížeči: před upgradem zkontrolujte přiřazení rolí (Řízení přístupu). Uživatel, jehož přístup ve webovém rozhraní plynul z role přiřazené pro jedno prostředí nebo projekt, jej má nyní jen tam; kde má role platit všude, přiřaďte ji bez omezení. Uživatel, jehož role jsou všechny přiřazeny pro projekty, už nemá přístup k cestám bez projektu (správa uživatelů a rolí, nastavení organizace, vytváření projektů): přiřaďte potřebnou roli bez projektu nebo pro organizaci. Dokud nebudou jejich části webového rozhraní přepracovány, vracejí tyto cesty uživatelům a API tokenům omezeným na projekt (SDK, Terraform, CLI)
403i sproject_id: SSH klíče, keytaby, spravované tokeny, správa konfigurace, šablony rotace, zápis šablon certifikátů, inicializace CA, mapování skupin, dashboardy, reporty, incidenty a Azure discovery; routy objevených certifikátů vracejí403každé roli omezené na projekt nebo organizaci (viz „Objevené certifikáty vyžadují přiřazení neomezené na organizaci“). Seznam, analytika, import a CSR certifikátů přijímají roli omezenou na projekt v jejím projektu a prostředí a čtení šablon certifikátů přijímá roli přiřazenou kterémukoli projektu organizace šablony. Přesun certifikátu do jiného projektu (PUT /api/v1/certificates/{id}) vyžaduje oprávnění v obou projektech. Přiřazení rolí vytvořená Terraformem nebo Go SDK sproject_idčienvironmentpřed tímto vydáním jsou bez rozsahu: ta z Terraformu znovu aplikujte (terraform apply -replace=…), ta vytvořená přes Go SDK smažte a přiřaďte znovu.GET /api/v1/rbac/users/{id}/rolesvypíše přiřazení uživatele; přiřazení bezproject_idaenvironmentplatí všude. Každé chráněné zapisující tělo má nyní limit 16 MiB (nad ním413), takže keytab může mít nejvýše 11 MB:MAZEVAULT_KEYTAB_MAX_SIZE_MBnad 11 se bere jako 11 (zapíše se varování). Uživatel přijde o zobrazenou roli, pokud všechna jeho přiřazení této role vypršela, nebo pokud byla zobrazená role vyšší než kterákoli přiřazená role (nebyla znovu synchronizována). Migrace000216(idempotentní, bez kroku zpět: odebrání přiřazení by odebralo přístup) přiřadí bez omezení: zobrazenou roli uživatelům bez jakéhokoli přiřazení; roli Viewer každému stávajícímu uživateli identity providera (LDAP, Entra ID, SAML/SCIM, GitHub, GitLab, OIDC), protože takoví uživatelé se nyní s ní vytvářejí, takže uživatel, jehož zobrazená role neměla oprávnění role Viewer (například Auditor nebo Finance; výchozídashboard:read,system_output:read,entra:read), je získá; a jen pokud pak nikdo nemá roli admin bez omezení, roli admin každému uživateli se zobrazenou rolí admin. Dokud nikdo nemá roli admin bez omezení, server při startu zapíše varování. Když nikdo nemá roli admin bez omezení a někteří uživatelé se zobrazenou rolí admin mají vypršelé přiřazení role admin bez omezení, pojistka proti zamčení tato přiřazení znovu aktivuje a ostatní uživatelé se zobrazenou rolí admin nedostanou nic; jen když žádné takové vypršelé přiřazení neexistuje, dostane každý uživatel se zobrazenou rolí admin nové. Migrace také odvodí zobrazenou roli každého uživatele s přiřazeními z jeho přiřazení bez omezení (uživatelé jen s omezenými rolemi nyní ukazují Viewer). Tiše se zúží také: uživatel API tokenu, jehož přiřazení je omezené na jinou než výchozí organizaci, o ně přijde u každého požadavku; uživatel omezený na projekt neprojde kontrolami, které projekt nejmenují (export projektu, správa SSH klíčů, čtení záloh rotace, čtení integrací Key Vault); a rozhodnutí o oprávněních uložená v mezipaměti (Redis) před upgradem platí ještě ažCACHE_PERMISSION_TTL_SECONDS(výchozí 5 minut), takže pro okamžité uplatnění nových pravidel tuto mezipaměť vyprázdněte (nebo tak dlouho počkejte). Stejná doba platí po přesunu zdroje do jiného projektu (certifikátu nebo šablony rotace): rozhodnutí uložená pro něj před přesunem platí, dokud nevyprší. Restart už nerozšiřuje přiřazení role admin účtuadmin@mazevault.comomezené na prostředí nebo projekt. - Dopad na upgrade (efektivní řetězec, tělo z discovery, kontrakt nasazení přes agenta) — Verze
1.0.61přidává jednu idempotentní, aditivní migraci000199_discovered_certificate_body(certificate_pem,chain_pemTEXT NULL vdiscovered_certificates; health check databáze oba sloupce validuje). Docertificatesse nepřidává žádný sloupec, neběží žádný backfill, žádný existující řetězec se nepřepisuje. Certifikáty, které už uložený řetězec mají, se exportují, zobrazují, rotují a nasazují byte po bytu stejně jako dosud (kryto regresním testem); chování se mění jen u certifikátů s prázdným řetězcem, a to pouze když v téže organizaci existuje ověřený vydavatel. Čtení (export, detail, seznam pro agenta) nikdy nic nepersistuje; dohledaný řetězec se zapíše jen tehdy, když import nebo adopce ukládá tělo certifikátu bez řetězce. API přírůstky jsou aditivní:chain_source,chain_complete,chain_warningsnaGET /certificates/{id}(a/projects/{id}/certificates/{certId});certificate_pem,chain_pem,chain_certificatesnaGET /discovered-certificates/{id}; export záznamu bez těla nyní vrací422 CERTIFICATE_BODY_MISSINGmísto obecné 500. Terraform: data sourcemazevault_certificatezískáváchain_pem,chain_source,chain_complete; jehocertificate_pemje nyní naplněn (dříve byl vždy prázdný, protože SDK četlo pole, které API nevydává) — plány, které na něj odkazovaly, poprvé ukážou hodnotu. Změny chování k prověření: (1) import privátního klíče ke spravovanému certifikátu bez těla je odmítnut, dokud tělo neexistuje (připojí ho příští sken agenta, příští synchronizace s CA, nebo ruční import veřejného certifikátu — CRT/PEM/DER či PFX; agenti používající starý protokol/agents/me/discoverytělo nehlásí, takže záznamy objevené pouze jimi se doplní jednou ze zbývajících dvou cest); (2) cíle nasazení se validují při uložení i při sestavení workflow rotace: cíle WebLogic potřebujíkeystore_path,trust_store_password_refpři nastavenémtrust_store_pathawlst_script_pathpro jakýkoliv režim restartu; cíle database wallet potřebují agenta,wallet_path, provider Oracle aupdate_tns_names=false(rac_nodesje rovněž odmítnut); cíleweb_serveraload_balancerjsou odmítnuty. Existující cíle se nemění — zapnutý cíl, který tato pravidla porušuje, nyní svou rotaci ukončí chybou s ID cíle a důvodem místo přeskočení nebo hlášení falešného úspěchu a vždy ho lze vypnout nebo smazat; editor v UI při uložení vypne staršíupdate_tns_names=truea u nepodporovaných providerů a typů cílů ukáže alternativu. Před zapnutím automatické rotace prověřte cíle nasazení produkčních certifikátů naweb_server,load_balancer, ne-Oracle položky Database Wallet a wallet cíle bez agenta; (3) se zapnutou volbou agentainstall_chain_to_trust_storenainstaluje podřízená CA, která dosud neměla řetězec, při nasazení do trust store hostitele i svůj root — stejné chování, jaké vždy měly PFX importy s vloženým rootem. Rollout agentů: oprava nasazení do keystore JKS / PKCS#12 / WindowsMyna straně backendu/gateway funguje s již nasazenými agenty. CílAgent File (PEM), krokyagent_command(WebLogic restart, Oracleorapki), sémantika „pouze veřejné“ uwindows_root/windows_caa nasazení do Oracle wallet vyžadují agenta 1.0.61; starší agenti na tyto požadavky odpoví explicitní chybou unsupported proxy message type a krok nasazení selže rychle. Nasazení Oracle a WebLogic jsou kryta kontraktními testy proti protokolu agenta — před spolehnutím v produkci je ověřte proti skutečnému hostiteli sorapki/ WLST na stagingu. Nedosažitelná duplicitní cesta adopce z discovery (CertificateDiscoveryService,handlers_discovery.go) byla odstraněna; její filtry seznamu (managed_certificate_id,discovered_by_agent_id, expirace) byly sloučeny do živého endpointuGET /discovered-certificatesjako query parametryagent_id,managed_certificate_idaexpiring_within_daysaPOST /discovered-certificates/{id}/ignorenyní přijímá volitelné tělo{"reason": "..."}, které se ukládá jakostate_reasona zaznamenává do auditního logu — jediné dvě schopnosti odstraněného kódu, které živá cesta postrádala; adopce, hromadná adopce i obohacení detailu tam už byly nadmnožinou. Oba živé endpointy získaly Swagger dokumentaci a pět nikdy nenaroutovaných cest/discovery/certificates*ze Swagger výstupu zmizelo. Nepřibývají žádné nové proměnné prostředí, Helm hodnoty ani změny formátu release balíčku. - Dopad na upgrade (custody klíčů certifikátů, validace CSR, normalizace serialů) — Žádná databázová migrace, žádná nová proměnná prostředí, žádná Helm hodnota, žádná změna formátu release balíčku a žádná změna kontraktu Terraform provideru (resource
mazevault_certificateje založen na CSR a je neměnný; doplnění klíče je akce operátora). Změny API jsou volitelné a aditivní:expected_certificate_idnaPOST /certificates/importaPOST /certificates/import/file,key_source_filev odpovědipreview-multi,identity_normalizedv odpovědiPOST /admin/certificates/backfilla hodnotafailedv enumustatuspožadavku na certifikát. Změny chování, které je třeba před upgradem produkčního inventáře prověřit: (1) šablony s neprázdnýmallowed_key_sizesnyní odmítají nahraná CSR s jinou velikostí klíče už při odeslání — včetně ADCS a externích CA, které dříve nekontrolovaly nic — ověřte proto seznam u šablon používaných se zákaznickými CSR (prázdný seznam = libovolná velikost); (2) šablony s explicitnísan_configji nyní vynucují i na nahraná CSR — sloupceallow_additional_sansamax_san_countse pro nahraná CSR záměrně nepoužívají, protože je editor šablon nikdy spolehlivě neukládal; (3) při startu primary proběhne na pozadí idempotentní průchod, který přepíšeserial_number/thumbprint_sha256/thumbprint_sha1pouze u řádků odlišných od uloženého DER (hex serialy zapsané ACME/Vault/finalizací externích objednávek, velká písmena v otiscích); certifikáty z interní CA, ADCS, DigiCert, Venafi a importované jsou již kanonické a nedotknou se jich, vazby na CA/CA účty ani nastavení obnovy se nikdy nemění a nevznikají žádné sync události; (4) import certifikátu, který už existuje v jiném projektu, nyní vrací chybu místo tichého připojení materiálu k záznamu cizího projektu; (5) automaticky schválené požadavky, jejichž vydání selže, jsou označenyfailed(externě odložené čekající klíče jsou záměrně ponechány i s referencí pro úklid operátorem — při selhání CA se ze secret manageru nic nemaže) a ručně schválené se vrací dopending. Odložená rozhodnutí (zdokumentována v architektonické referenci): unikátní index nacertificates.thumbprint_sha256(čekající externí objednávky a legacy duplicity by rozbily upgrade), vynucení přiřazení šablony k projektu při odeslání CSR (vyžaduje MAJOR bump kvůli API/Terraform klientům), vlastní EKU OID v interní CA a limit pokusů / detekce zamítnutí u ADCS objednávek, které zůstávají trvale pending. - Dopad na upgrade (Rotační šablony) — Verze
1.0.61přidává jednu idempotentní migraci,000195_rotation_template_policy_fields, která přidává tři sloupce dorotation_config_templates:lead_time_days(INT, výchozí0),grace_period_days(INT, výchozí0) asecret_custody_mode(VARCHAR, výchozílocal). Kontrola zdraví databáze nyní ověřuje nové sloupce politiky šablon. Terraform resourcemazevault_rotation_templatezískává volitelné argumentylead_time_days,grace_period_daysasecret_custody_modea Go SDK je odpovídajícím způsobem aktualizováno; všechny přírůstky jsou aditivní a zpětně kompatibilní, žádný resource, datový zdroj, API endpoint ani SDK kontrakt se neodebírá ani nepřejmenovává. Nepřidávají se žádné nové proměnné prostředí, hodnoty Helm ani změny formátu release balíčku. Provider a SDK navíc vystavují již perzistovaná poleproject_idaretry_delay_seconds(bez migrace) aorganization_idna resource jeOptional+Computed. Upozornění: při vytvoření šablony se explicitní0umax_retry_attempts,retry_delay_secondsnebotimeout_minutesneuplatní — server použije své výchozí hodnoty (3/5/10); tato pole vynechejte nebo nastavte kladnou hodnotu (pozdější změna na0přes update se uplatní). - Dopad na upgrade (Životní cyklus agentů) — Tato funkce přidává jednu idempotentní migraci,
000196_agent_lifecycle_metadata, která do tabulkyagentspřidává nullable lifecycle sloupce (unregistered_at,unregistered_by,lifecycle_reason,lifecycle_reason_category,identity_revoked_at,uninstall_status,uninstall_requested_at,uninstall_completed_at,replaced_by_agent_id); kontrola zdraví databáze nové sloupce validuje. Druhá idempotentní migrace,000198_deployment_purpose, přidává do tabulkydeploymentssloupecpurpose(VARCHAR, výchozístandard), aby bylo možné odlišit autorizovaný jednorázový náhradní token od standardního enrollment tokenu — pouze náhradní token může znovu zaregistrovat vyřazeného agenta; kontrola zdraví databáze validuje i tento sloupec. Všechny změny jsou aditivní a zpětně kompatibilní. GuardRequireActiveAgentna JWT-autentizovaných agentních routách znamená, že agenti, kteří byli odregistrováni, revokováni nebo smazáni, jsou nyní odmítnuti i s neexpirovaným tokenem; podporovanou cestou obnovy zůstává re-enrollment přes platný deployment (nebo jednorázový náhradní) token — starší agenti zůstávají kompatibilní, protože se při odmítnutí jednoduše znovu zaregistrují. Přidány jsou čtyři aditivníagent:adminAPI endpointy (/agents/:id/lifecycle-impact,/unregister,/reregister,/uninstall) plus aditivníDELETE /api/v1/deployments/:id(deployment:write). Odpovědi list deploymentů nyní vynechávají bootstrap token (DeploymentResponse), zatímco odpověď create jej nadále vrací jednou (DeploymentCreatedResponse) — Go SDK i Terraform resourcemazevault_deploymentmají nezměněný kontrakt a token na create stále dostávají. Delete resourcemazevault_deploymentv Terraform provideru nyní volá nový delete endpoint (dříve no-op pouze ve stavu), takžeterraform destroyzneplatní enrollment token na straně serveru;Readresource navíc znovu naplníorganization_id, takže importovaný deployment lze zničit. Registrovaní agenti nejsou dotčeni. Vzdálená odinstalace je opt-in a pokouší se pouze o připojené Linux balíčkové instalace. Pro tuto funkci nejsou žádné nové proměnné prostředí, hodnoty Helm ani změny formátu release balíčku. - Dopad na upgrade (Bezpečnost a závislosti) — Jedná se pouze o změny závislostí a build-time: žádné databázové migrace, proměnné prostředí, hodnoty Helm ani změny formátu release balíčku a žádné změny kontraktů API, Go SDK ani Terraform provideru.
- Dopad na upgrade (Frontend MUI v9 a Node toolchain) — Upgrade Material UI na v9 je interní frontendová změna bez dopadu na aplikační routy, chování, backend/API/Go SDK/Terraform kontrakty, proměnné prostředí, hodnoty Helm nebo formát release balíčku. Operátoři, kteří frontend sestavují ze zdrojů, nyní potřebují Node ≥ 22.22 (CI i kontejnerový image frontendu už běží na Node 24;
.nvmrcfixuje Node 24 pro lokální vývoj). Runtime nasazení předsestaveného image frontendu není dotčeno. - Dopad na upgrade (Zálohy rotace) — Tato změna přidává jednu idempotentní migraci,
000197_rotation_backup_lifecycle, která do tabulkyrotation_backupspřidává sloupcestatus(VARCHAR, výchozípending),acknowledged_ataacknowledged_by, dopočítástatuszrestored_ata nahrazuje starý index expirace za částečný index pro úklid plus index nastatus; kontrola zdraví databáze nové sloupce validuje. Přidává se jedna nová volitelná runtime proměnná prostředí —MAZEVAULT_ROTATION_BACKUP_RETENTION_DAYS(výchozí7) — propagovaná do.env.example, docker-compose, instalátorů i všech hodnot Helm. Přidány jsou čtyři aditivnírotationAPI endpointy pod/rotation/backups(listrotation:read; restorerotation:execute; reveal/acknowledgerotation:write, přičemž reveal/restore navíc vynucujísecret:read). Všechny změny jsou aditivní a zpětně kompatibilní — žádný resource, datový zdroj, API endpoint ani SDK kontrakt se neodebírá ani nepřejmenovává — a nemění se formát release balíčku. Protože insert zálohy nyní uspěje, aktivuje se poprvé mechanismus zálohy před rotací a automatického rollbacku; zálohy vyžadující ruční obnovu jsou zviditelné přes nové endpointy a metrikumazevault_rotation_backups_recovery_required. - Dopad na upgrade (Enterprise Functions / chránění Deploymentu) — Jde pouze o reorganizaci UI a vynucení licence: žádná databázová migrace, žádná proměnná prostředí, žádná hodnota Helm ani změna formátu release balíčku. Nový klíč license feature
deployment_managementje přidán do sad PoC a Enterprise odvozovaných funkcígetLicenseFeatures(state-aware: active / grace / expiring) aFeatureLicenseMiddlewareje aplikován na CRUD skupinu/api/v1/deployments. Nemění se žádná API routa, schéma požadavku/odpovědi, Go SDK ani kontrakt Terraform provideru a plocha Swagger je beze změny. Změna chování: tenanti na plánu Small Business nebo bez licence, kteří dříve dosáhli na Deployment CRUD API, nyní dostanou HTTP 403 a upgrade banner; PoC a Enterprise tenanti nejsou dotčeni. Neautentizované UUID-chráněné bootstrap endpointy agenta zůstávají nechráněné, takže instalace agentů není ovlivněna. Text upgrade banneru pro SSH, Configuration a KeyTab byl sjednocen na „PoC or Enterprise“. - Dopad na upgrade (offload klíčů v Orchestrator módu) — Pouze backendová změna: žádná databázová migrace, žádná nová proměnná prostředí, žádná změna API kontraktu. Dvě chování jsou záměrně přísnější a operátoři provozující Orchestrator mód by je měli zkontrolovat: (1) Výběr integrace se už nerozšiřuje mimo scope volajícího. Offload tokenu, keytabu nebo privátního klíče, který nese scope projektu/organizace a v něm nenajde povolenou integraci typu
secret_manager/key_storage/hsm, nyní selže sno enabled key storage integration found for project/organization …místo tichého použití první integrace kdekoli v systému; explicitně zvolenéintegration_id, které neexistuje nebo je vypnuté, je odmítnuto stejně. Ujistěte se, že každá organizace používající spravované tokeny nebo keytaby v Orchestrator módu má povolenou secret-manager integraci v některém ze svých projektů. (2) Limit velikosti Azure Key Vault se vynucuje před zápisem. Hodnoty, jejichž base64 přenosové kódování přesáhne 25 600 bajtů (≈19 200 raw bajtů), jsou odmítnuty s400a přesným limitem; jde o dokumentovaný strop Azure na jeden secret, ne o omezení MazeVaultu — větší hodnoty vyžadují jako cíl úložiště klíčů projektu integraci HashiCorp Vault nebo AWS Secrets Manager (64 KB). Secrety vytvořené v Key Vaultu touto verzí používají nové ploché pojmenování (mazevault-token-…,mazevault-keytab-…,mazevault-<cn>-<serial>); existující reference uložené u certifikátů se respektují beze změny (update_versionvytvoří novou verzi téhož secretu). V Key Vaultu se nic nepřejmenovává ani nemigruje.
Verze 1.0.60¶
Datum vydání: 2026-07-20
Nové funkce¶
- Správa tokenů — externí API tokeny s povinným sledováním expirace a nasazením přes agenta — Nová Enterprise funkce (licence PoC nebo Enterprise, feature
token_management) pro správu externě vydaných API tokenů — například tokenů Jira nebo Signi — které lze obnovit pouze ručně v GUI zdrojového systému. Každý token se ukládá s povinným datem expirace a volitelným per-token předstihem upozornění (výchozí 30 dní); MazeVault před vypršením vyvolá incidenttoken_expirypřes stávající notifikační kanály (e-mail, webhook, Teams, Slack, Jira, SMSEagle) a po vypršení jej eskaluje na critical. Hodnoty tokenů jsou ve standardním režimu šifrované at-rest (AES-256-GCM), nebo se v režimu Orchestrator offloadují do nakonfigurovaného externího správce tajemství (Azure Key Vault, AWS Secrets Manager, HashiCorp Vault). Token lze volitelně navázat na projekt a nasadit na stejné typy cílů jako tajemství, přičemž se znovupoužívají sdílené doručovací exekutory MazeVault: konfigurační soubor na serveru spravovaný agentem (JSON/YAML/ENV klíč→hodnota, s volitelným povoleným post-install příkazem), Kubernetes secret, secret v Azure Key Vault nebo secret v AWS Secrets Manager (zápis do Windows registrů / IIS je záměrně odložen). Ruční akce obnovit zaznamená nově získanou hodnotu a nové datum expirace, uzavře otevřený incident expirace a znovu nasadí cíle označené pro sync-při-obnově. Správa tokenů je záměrně oddělená od projektové Správy klíčů (projektová tajemství) i od System Keys v nastavení organizace (infrastrukturní klíče MazeVault) a nachází se pod novou navigační skupinou Enterprise Functions. Přístup řídí nová oprávněnítoken:read/token:write/token:delete/token:admin— nasazení a obnova vyžadujítoken:write(admin je implikuje), zobrazení uložené hodnoty tokenu vyžadujetoken:admin. Funkce je plně spravovatelná přes nový Terraform resourcemazevault_tokena datový zdrojmazevault_tokens. - Dopad na upgrade (Správa tokenů) — Přidává dvě idempotentní migrace:
000193_token_management(vytvoří tabulkymanaged_tokensatoken_deployment_targets, naseeduje oprávněnítoken:*do stávajících rolí — org_admin plně; operator read/write/delete; user a auditor pouze read) a000194_token_target_types(zobecnítoken_deployment_targetsotarget_type/integration_id/config, takže doručení tokenu znovupoužívá sdílené exekutory secret/certifikátů). Nepřidávají se žádné nové proměnné prostředí, hodnoty Helm ani změny formátu release balíčku — funkce znovupoužívá stávající infrastrukturu šifrování, offloadu tajemství, notifikací/incidentů, doručovacích rotačních kroků a licencování. Kontrola zdraví databáze nyní ověřuje obě nové tabulky. Terraform provider získává aditivní resourcemazevault_tokena datový zdrojmazevault_tokens; žádný stávající resource, datový zdroj, API endpoint ani kontrakt Go SDK se nemění ani neodebírá. Endpointy jsou chráněné featuretoken_management(PoC a Enterprise); bez ní API/api/v1/tokensvrací HTTP 403 a UI zobrazí upgrade banner.
Vylepšení¶
- Admin dávkové řešení na dedikovaných stránkách problémů rotace a synchronizace — Systémový administrátor nyní může vybrat jednotlivé řádky nebo všechny aktuálně viditelné řádky na stránce Rotation Problems a v každé sekci stránky Synchronization Problems. Frontend záměrně opakuje existující auditované single-item akce s nejvýše třemi souběžnými požadavky, zobrazuje průběh i částečná selhání a po dokončení znovu načte dotčené seznamy; nevzniká žádná neauditovaná bulk mutační cesta. Selhání rotace se acknowledgeují a dostupný navázaný otevřený incident se uzavře. Sync failures a blocked-seed incidenty se acknowledgeují ve vlastních sekcích, zatímco pending sync konflikty lze dávkově pouze ignorovat, což změní lokální stav konfliktu bez zápisu kterékoli hodnoty do externího provideru. „Vše viditelné“ je záměrně omezené aktuální stránkou a každé potvrzení uvádí přesný počet dotčených položek. Jednotlivé remediation akce zůstávají dostupné neadmin operátorům se stávajícími write oprávněními; dávkové ovládání vidí pouze systémový administrátor.
- HSM/KMS backend HashiCorp Vault Transit —
mazevault_hsm_devicenyní podporujeprovider_type = hashicorp_vaultpostavený na engine HashiCorp Vault Transit. Dříve validace hodnotu přijala, ale instanciace selhávala sunsupported HSM provider: hashicorp_vault, protože implementace neexistovala. Klíče Vault Transit generuje a drží Vault (RSA-2048/3072/4096, ECDSA P-256/P-384/P-521); podpis probíhá vzdáleně přes endpoint Transitsign, takže privátní klíčový materiál nikdy neopustí Vault. Implementován je test připojení zařízení, výpis klíčů, získání veřejného klíče, vzdálený podpis (používaný podpisem interní CA a dalšími operacemi směrovanými přes HSM) i mazání klíčů. Konfigurace přijímávault_url,tokena volitelnýmount_path(výchozítransit). Wrapping klíč-šifrujícího-klíče (KEK) i nadále obsluhuje samostatné systémové HSM rozhraní a je mimo rozsah tohoto provideru. - Certifikátové šablony přizpůsobené providerovi pro externí komerční CA — Formulář certifikátové šablony se nyní přizpůsobuje schopnostem providera vybraného vydávajícího CA účtu, místo jednoho pevného sadu polí pro každou autoritu. Každá externí CA má jiné API a model vydávání, takže formulář řídí schopnosti deklarované providerem (vystavené na
GET /ca-providers/{type}/schema): provideri s produktovým katalogem (SSLMarket, DigiCert) nabízejí certifikátový produkt jako dropdown ze synchronizovaného katalogu CA — typ certifikátu se odvodí z vybraného produktu a volné pole external template OID se skryje; provideri vyžadující doménovou validaci nabízejí na šabloně metodu doménové validace (email/dns/file), uloženou jakodcv_method(migrace000191); ACME issuery dál zobrazují ACME challenge policy; interní CA ani jedno. SSLMarket provider nyní odvozujeproduct_codez navázaného CA produktu šablony (s fallbackem na volný kód a poté výchozí hodnotu účtu) a respektuje per-template metodu validace; DigiCert rovněž preferuje per-template metodu. Nový volitelný argumentdcv_methodje dostupný na Terraform resourcemazevault_certificate_template. Stávající šablony nejsou dotčené: nový sloupec je nullable a prázdná hodnota znamená „použij výchozí providera/účtu".
Opravy chyb¶
- Terraformem spravované tokeny mají platný a state-safe životní cyklus — Resource
mazevault_tokenpoužíval rezervované root jméno atributuprovider, kvůli čemuž Terraform validace schématu resource odmítla. Štítek je nyní dostupný jakotoken_providera verzovaný state upgrader zachová hodnoty existujícího stavu. Čtení a mazání tokenů nyní považuje HTTP 404 za nepřítomný resource, ale zachová stav při chybě autorizace, transportu nebo serveru. Prázdná odpověďdescription/project_iduž nenechá ve stavu starou neprázdnou hodnotu. Nové tokeny mohou použít Terraform 1.11+value_wosvalue_wo_version, takže plaintext není v plánu ani stavu; legacyvaluezůstává podporované, ale je výslovně dokumentované jako stateful. Import nyní podporuje správu pouze metadat. Migrace existujícího resource zvaluenavalue_wonení automatická, protože replacement změní ID tokenu a kaskádově smaže jeho deployment cíle. - Rotation Failure Triage zobrazuje skutečný počet otevřených problémů a průběžnou frontu deseti položek — Widget Overview dříve zobrazoval počet incidentů ve výchozí dvacetipoložkové stránce API jako celkovou hodnotu, takže tenant s více než 20 otevřenými selháními rotace vždy viděl nesprávný počet. Widget nyní používá autoritativní
totalz existující paginované odpovědi incidentů, pro zobrazení načítá pouze deset nejnovějších nevyřešených rotation-failure incidentů a po každém jednotlivém uzavření znovu načte první stránku, takže se fronta okamžitě doplní dalším nevyřešeným incidentem. Zavádějící page-local badge High/Critical byl odstraněn. Overview záměrně zůstává povrchem pro jednotlivé řešení bez výběru nebo dávkového uzavření. - Metrika „Missing in PROD“ na Secrets Dashboardu nyní správně odráží cross-environment paritu — KPI dlaždice na Secrets Dashboardu dříve označená Missing in PROD ve skutečnosti nikdy nekontrolovala produkční prostředí ani organizační nastavení
is_production. Počítá secret klíče, které existují alespoň v jednom aktivním (porovnávaném) prostředí, ale chybí v jiném aktivním prostředí — jde o signál cross-environment parity, který vyžaduje aspoň dvě aktivní prostředí. Na instancích bez produkčního prostředí (například testovací tenant pouze sdevelopment,integration,migrationatesting) to vedlo k matoucí nenulové hodnotě „Missing in PROD“. Dlaždice je nyní označená Missing (Cross-Env) jak v přehledu Secrets Dashboardu, tak v pohledu Reports, čímž odpovídá tabulce Missing Secrets (Cross-Environment) pod ní. Podkladový cross-environment výpočet zůstává beze změny — opraveno bylo pouze zavádějící pojmenování a popisek. - Události custody klíčů v Orchestrator Mode se spolehlivě ukládají — V Orchestrator Mode se při offloadu privátního klíče (například certifikátového klíče odeslaného do Azure Key Vaultu) zaznamenávala custody audit událost, jejíž hodnota
metadatabyla prázdný řetězec. Protožekey_custody_events.metadataje sloupec typu PostgreSQLJSONB, insert selhal sinvalid input syntax for type json (SQLSTATE 22P02)a custody záznam se ztratil — pouze se zalogovalo varování — přestože samotný offload klíče proběhl úspěšně. Custody události nyní vždy ukládají syntakticky validní JSON: nenastavená nebo prázdná hodnotametadatase na hranici zápisu normalizuje na prázdný JSON objekt ({}), takže každý offload, načtení i smazání klíče vytvoří trvalý custody audit záznam. Volající, kteří už předávají strukturovaná metadata, nejsou dotčeni. Health check databáze nově validuje i sloupcekey_custody_events. - Vydávání certifikátů přes SSLMarket opraveno na reálné SSLmarket API — Vydání certifikátu přes SSLMarket CA účet selhávalo s
API request failed with status 400: {"error":["No route found"]}na standardních i Orchestrator Mode instancích. SSLMarket provider byl implementovaný proti REST tvaru, který neodpovídá zveřejněnému SSLmarket API. Provider nyní cílí na skutečné endpointy a payloady: objednávky se odesílají naPOST /order/certificate/{product_code}s plochým tělem objednávky (doména, SANs, roky, CSR, povinnédv_auth_methoda pole owner/authorized-contact/technical-contact/invoice, která se při nekonfigurování doplní z defaultů SSLmarket účtu); detail objednávky, stažení certifikátu (podle order id a formátu), tokeny doménové validace (DCV) a revokace nyní používají správné cesty; resolvování produktu čte reálný katalog{"products":[…]}; a odpovědi se parsují podle skutečných JSON tvarů API (stringové identifikátory, poledns_namesa stavy objednávkypaid/requested). Autentizace (X-Auth-Token) a base URL byly už dříve správné a zůstávají beze změny. Vydávání certifikátů i asynchronní poller objednávek externí CA nyní proti SSLMarketu doběhnou. - Audit události push secretů (Orchestrator a Sync) už neselhávají na porušení cizího klíče — V Orchestrator Mode se při pushi secretu do externího provideru (Azure Key Vault, AWS Secrets Manager, HashiCorp Vault) zaznamenávala audit událost
SECRET_PUSH_CREATE/SECRET_PUSH_UPDATE, jejížuser_idbylo omylem nastaveno na ID projektu místo uživatele. Protožeaudit_events.user_idmá cizí klíč nausers(id), insert selhal sviolates foreign key constraint "audit_events_user_id_fkey" (SQLSTATE 23503)a audit záznam se ztratil, přestože samotný externí push proběhl úspěšně — externí secret se tak rozešel s auditní stopou. Audit události push secretů i sync-seedu se nyní přiřazují iniciujícímu uživateli (a u systémem iniciovaných synchronizací vyřešenému systémovému aktérovi), takže se ukládají správně. Jako obrana do hloubky nově zapisovač auditu garantuje i trvanlivost: pokud by se jakákoli audit událost nepodařila uložit kvůli chybné referenci aktéra, je jednou zopakována s prázdným (nepřiřaditelným) aktérem místo zahození; a jen pokud je databáze zcela nedostupná, je celá událost vyemitována do centrálního strukturovaného logu jako poslední záchrana. Původní lokální soubor emergency logu (/var/log/mazevault/emergency_audit.log), nepoužitelný na read-only souborových systémech kontejnerů v Kubernetes, byl odstraněn. Nová metrikamazevault_audit_persist_failures_totalumožňuje alertování jakékoli takové poslední záchrany. - Merkle integritní cache nyní sleduje změny secretů — Inkrementální Merkle integritní cache znala pouze slovník událostí certifikátů/keytabů (
create/update/delete) a tiše ignorovala události secret služby v minulém čase (created/updated/deleted), logovalamerkle cache updater: unknown event typea nechávala integritní cache secretů po každé změně zastaralou. Aktualizátor cache nyní přijímá obě formy, takže operace create/update/delete nad secrety správně aktualizují Merkle integritní strom. - Zálohy rotace jsou nyní šifrované a podporují automatický rollback — Rotační orchestrátor byl spouštěn bez zapojeného encryptoru, takže pre-rotační zálohy degradovaly na neobnovitelné odkazy na verzi a logovaly
rotation backup requested but encryptor not configured — rollback will be limited. Automatický rollback selhané rotace tak nebyl k dispozici. Orchestrátor nyní při startu dostává systémový encryptor, takže se pre-rotační stav ukládá jako šifrovaná záloha a automatický rollback je obnoven. Zálohy externíchnames_onlysecretů se i nadále spoléhají na vlastní historii verzí externího provideru, stejně jako dříve. - Entra ID integrace přijímají workload-identity (AKS) pro background autentizaci — Konfigurace Entra ID integrace (používané pro rotaci secretů app registrací a synchronizaci Microsoft Graphu) s
background_auth_method=workload_identitybyla odmítnuta sunsupported background_auth_method, přestože Microsoft Graph klient i sdílená Azure credential factory federovanou workload identity na AKS už podporují. Tři samostatné validační brány — vytvoření/úprava integrace, test připojení a runtime kontrola konzistence používaná při rotaci — hodnotu ve výchozím stavu odmítaly, takže integraci nešlo vytvořit, nebo při vynucení selhala později při rotaci sconfiguration is inconsistent. Všechny tři brány nyníworkload_identitypřijímají; ta — stejně jakomanaged_identity— nevyžaduje v konfiguraci integrace žádné statické přihlašovací údaje: na workload-identity clusteru runtime provede federovanou výměnu tokenu pro nakonfigurované (nebo webhookem injektované) client ID managed identity. To odemyká rotaci Entra credentials na AKS workload-identity clusterech bez dedikované client-secret app registrace. - Krok rotace Spring Actuator Refresh už nepadá na chybné konfiguraci — Post-rotační krok
spring_actuatorpoužíval nekontrolované typové asertace naactuator_urla na položkách volitelného seznamuendpoints, takže špatný konfigurační klíč (napříkladurlmístoactuator_url) nebo ne-stringová položka způsobily pád workeru místo srozumitelné chyby. Krok nyní vstup validuje defenzivně a vrací strukturovanou chybu, a refresh URL sestavuje bezpečně tak, aby základní URL, koncové lomítko nebo URL, které už končí na/actuatornebo/actuator/refresh, nikdy nevytvořilo zdvojenou cestu. - Post-rotační doručení secretu do Key Vaultu a dalších cílů nyní dostane vyrotovanou hodnotu — Post-rotační doručovací akce (push do Azure Key Vaultu, AWS/GCP/OCI secret manager, DevOps proměnné) vyžadují čerstvě vyrotovanou hodnotu secretu, ale fáze post-rotačních akcí sestavovala kontext, který ji vynechával, takže doručovací akce logovala
new_password not found in input contexta zápis tiše přeskočila. Vyrotovaná hodnota se záměrně nikdy neukládá, proto se nyní řeší až v době provedení z právě aktualizovaného MazeVault secretu — shodně, ať akce běží na primary nebo je delegována na gateway (hodnotu si načte provádějící runtime a nikdy se nepřenáší v payloadu gateway úlohy). Doručení u rotací Entra credentials i nadále probíhá přes dedikované seedované doručovací workflow. Jako zpevnění se předchozí hodnota z Key Vaultu zachycená pro rollback nyní z uloženého záznamu post-akce redaguje, takže se do historie rotace nezapisuje žádný citlivý materiál. - Azure Managed HSM / Key Vault HSM zařízení lze nyní otestovat a používat — Instanciace zařízení
azure_managed_hsm(pro test připojení i pro jakékoli podepisování CA, offload klíčů, rotaci klíčů či šifrování secretů skrz něj směrované) selhávala sCredentialFactory is required for AzureKVProvider, protože HSM device služba vytvářela Azure provider bez credential factory. Azure credential factory je nyní do HSM device služby injektována a protažena do factory provideru, takže Azure Managed HSM zařízení se inicializují se skutečným Azure credentialem. - Ruční synchronizace secret-manager integrace už neodmítá nekanonické hodnoty typu — Spuštění ruční synchronizace na secret-manager integraci mohlo selhat s
sync not supported for integration type: secret-manager, pokud uložený typ integrace používal pomlčku místo kanonické formy s podtržítkem. Typy integrací se nyní při vytvoření kanonizují (malá písmena, ořez, pomlčky na podtržítka) a guard ruční synchronizace porovnává proti kanonické formě, takžesecret-managerasecret_managerjsou brány shodně. Migrace000192normalizuje případné stávající nekanonické hodnotyproject_integrations.type, aby exact-match kontroly (ruční sync, sync rules, key offload) zůstaly konzistentní. - Pull/obousměrná sync pravidla vyžadují cílové prostředí předem — Vytvoření pull nebo obousměrného sync pravidla bez
target_environmentbylo přijato, ale později při provedení selhalo hluboko v kanonizéru prostředí senvironment slug is empty. Vytvoření sync pravidla nyní vyžaduje a kanonizujetarget_environmentpro každé pravidlo, které není čistý push (push pravidla odvozují prostředí ze zdrojového secretu), a vrací srozumitelnou validační chybu místo matoucího runtime selhání. - Vydávání ACME certifikátů nyní dokončí finalizaci (Let's Encrypt / ACME CA) — Report z v1.0.59 popisoval, že vydávání přes ACME projde validací dns-01, ale selže při finalize s chybou
POST-as-GET requests must have an empty payload/must have a nil body; to bylo end-to-end reprodukováno proti lokálnímu Pebble serveru. Nalezeny a opraveny dva defekty. Zaprvé MazeVault odesílal CSR na URL objednávky (order.URI) místo na dedikovanou finalize URL objednávky (order.FinalizeURL); protože URL objednávky je read-only POST-as-GET zdroj, odeslání těla CSR tam CA odmítla. Zadruhé poté, co CSR dorazil na správný finalize endpoint, některé RFC 8555-kompatibilní servery (včetně Pebble) nevrací na finalize odpovědi hlavičkuLocation, takže interní post-finalize poll v ACME klientovi mířil na prázdnou URL a selhal, přestože CSR byl přijat; vydávání se nyní zotaví dotázáním známé URL objednávky a stažením vydaného certifikátu. End-to-end vydávání dns-01 přes finalize je ověřeno reprodukčním testem proti Pebble (build tagacme_pebble). - Dopad upgradu — Verze
1.0.60je oprava pojmenování a popisku bez databázových migrací, environment proměnných, Helm values nebo změny formátu release balíčku. V endpointu přehledu secretů dashboardu (GET /api/v1/dashboard/secrets/overview) se pole odpovědimissing_in_prodpřejmenovává namissing_cross_env. Jde o interní pole dashboardu, které konzumuje pouze frontend MazeVaultu; není součástí Go SDK ani Terraform provideru, takže žádný integrační kontrakt není dotčen. Logika cross-environment parity a výpis chybějících secretů zůstávají funkčně beze změny. - Dopad upgradu (Orchestrator custody a SSLMarket) — Oprava ukládání custody klíčů v Orchestrator Mode a oprava SSLMarket provideru jsou pouze backendové změny bez databázových migrací, environment proměnných, Helm values nebo změny formátu release balíčku. Pro vydávání přes SSLMarket musí integrace CA účtu nastavit správný
product_code(SSLmarket účet může nabízet produkty — například trial certifikáty — které nevrací API katalog produktů, a proto se musí nakonfigurovat explicitně) a, pokud účet nemá výchozí firemní data, nastavení owner/contact/invoice vyžadovaná zvoleným produktem.dv_auth_methodmá při nekonfigurování výchozí hodnotuEmail. - Dopad upgradu (šablony přizpůsobené providerovi) — Funkce certifikátových šablon přizpůsobených providerovi přidává jeden nullable sloupec přes migraci
000191(certificate_templates.dcv_method) a jedno runtime-počítané pole (template_form) v odpovědiGET /ca-providers/{type}/schema; obojí je aditivní a zpětně kompatibilní. Žádné environment proměnné, Helm values ani změny formátu release balíčku. Terraform resourcemazevault_certificate_templatezískává volitelný argumentdcv_method; stávající konfigurace fungují beze změny. - Dopad upgradu (Audit, Merkle a rotace) — Oprava přiřazení aktéra u auditu push secretů, zpevnění trvanlivosti auditu, oprava Merkle integritní cache a oprava šifrování záloh rotace jsou pouze backendové změny spolehlivosti bez databázových migrací, environment proměnných, Helm values nebo změny formátu release balíčku. Přidává se jedna aditivní Prometheus metrika
mazevault_audit_persist_failures_total; žádná stávající metrika, API endpoint, Go SDK ani kontrakt Terraform provideru se nemění. Lokální fallback/var/log/mazevault/emergency_audit.logbyl odstraněn ve prospěch centrálního strukturovaného logu, takže poslední záchranný audit sink nyní funguje i na read-only souborových systémech kontejnerů. - Dopad upgradu (Entra WI, doručení rotace, HSM a validace sync) — Tyto opravy přidávají jednu idempotentní datovou migraci
000192_canonicalize_integration_type, která normalizuje stávající hodnotyproject_integrations.typena kanonickou formu s malými písmeny a podtržítky; je pouze datová a zpětně kompatibilní. Žádné nové environment proměnné, Helm values ani změny formátu release balíčku.background_auth_method=workload_identityje nyní přijímaná hodnota pro Entra integrace (včetně API povrchumazevault_integration) a pull/obousměrná sync pravidla nyní vyžadujítarget_environmentpři vytvoření. Žádný stávající API endpoint, Go SDK ani kontrakt Terraform provideru se neodstraňuje ani nepřejmenovává. - Dopad upgradu (Vault HSM a ACME finalize) — HashiCorp Vault Transit HSM provider a oprava ACME finalize jsou pouze backendové bez databázových migrací, environment proměnných, Helm values nebo změny formátu release balíčku. Provider
hashicorp_vaultpro HSM zařízení je aditivní; žádná stávající konfigurace HSM zařízení se nemění. Oprava ACME finalize opravuje pouze tok vydávání certifikátů; žádný API endpoint, Go SDK ani schéma Terraform provideru se nepřidává, neodstraňuje ani nepřejmenovává. Reprodukční test proti Pebble je za build tagemacme_pebblea v běžném CI neběží. - Dopad upgradu (UX řešení problémů) — Pravdivý počet v Rotation Failure Triage a administrátorské dávkové workflow jsou pouze frontendové změny. Znovupoužívají existující metadata paginace incidentů a stávající single-item mutační endpointy, oprávnění i auditní události. Nejsou potřeba žádné databázové migrace, změny API nebo Swagger kontraktu, nová RBAC oprávnění, environment proměnné, Helm values, změny release balíčku, Go SDK ani Terraform provideru.
Bezpečnost a aktualizace závislostí¶
- Odstraněny Trivy CRITICAL/HIGH zranitelnosti závislostí napříč všemi moduly — Trivy filesystem sken v dev pipeline (
CRITICAL,HIGH,--ignore-unfixed) selhával na opravených, ale zastaralých závislostech. Všechny dotčené balíčky byly povýšeny na opravené verze a ověřeny přesgo build,go vet, unit testy modulů agovulncheck(0 dosažitelných zranitelností), plus build frontendu a kompletní Vitest sada:- Go —
golang.org/x/text0.37.0 → 0.39.0 (CVE-2026-56852 / GO-2026-5970, nekonečná smyčka vnorm.Iter) vbackend,cli,k8s-operatoraterraform-provider-mazevault. - Go —
google.golang.org/grpc1.79.3 / 1.80.0 → 1.82.1 (GHSA-hrxh-6v49-42gf / GO-2026-6061, xDS RBAC a HTTP/2 transport) vbackendaterraform-provider-mazevault. - Go —
software.sslmate.com/src/go-pkcs120.7.0 → 0.7.2 (GO-2026-5052) vbackendaagent; tuto dosažitelnou zranitelnost odhalilgovulncheck, přestože ji Trivy kvůli severity filtru nehlásil. - Frontend —
axios1.16.0 → 1.19.0 (GHSA-gcfj-64vw-6mp9 a související advisories).
- Go —
- React Router povýšen na v8 (major) — Frontend byl migrován z
react-router-dom7.17.0 nareact-router8.3.0, což řeší CVE-2026-55685 a GHSA-qwww-vcr4-c8h2. React Router v8 ruší samostatný balíčekreact-router-dom; všechny importy byly přesunuty nareact-router(aplikace je deklarativní SPA používajícíBrowserRouter, takže vstupní bodreact-router/domnení potřeba).reactareact-dombyly zvednuty na minimum 19.2.7. - Dopad upgradu (Bezpečnost a závislosti) — Jde pouze o změny závislostí a build-time: žádné databázové migrace, environment proměnné, Helm values ani změny formátu release balíčku a žádné změny kontraktu API, Go SDK nebo Terraform provideru. Build frontendu nyní vyžaduje Node ≥ 22.22 (deklarováno novým polem
enginesvfrontend/package.json); CI joby frontendu i Docker image frontendu už běží na Node 24. Povýšení React Router na v8 je interní frontend migrace bez změny aplikačních rout nebo chování; kompletní sada frontend unit testů prochází beze změny.
Verze 1.0.59¶
Datum vydání: 2026-07-18
Vylepšení¶
- Pohledy rotace secretů se po dokončení na pozadí tiše aktualizují — Záložka Secrets nyní používá existující per-secret poller stavu rotace jako detektor události. Když rotace secretu na pozadí doběhne do koncového stavu, MazeVault načte pouze dotčený secret přes
GET /api/v1/secrets/{id}a aktualizuje viditelné číslo verze bez reloadu celé tabulky secretů. Pokud je pro daný secret otevřený modal Version History nebo Rotation Configuration, modal si na místě znovu načte seznam verzí nebo historii exekucí. Nepřibývá žádný globální polling, toast, zvýraznění ani refresh celé stránky. - Samostatné řízení přístupu pro řešení synchronizačních problémů — Synchronizační problémy nyní používají oddělenou permission hranici
sync:read/sync:writemísto implicitního navázání akčních tlačítek naproject:write. Roleproject_admin,certificate_managerasecret_managermohou synchronizační problémy aktivně řešit, zatímcoauditora běžní uživatelé zůstávají v read-only režimu. Navigace i stránka Synchronization Problems tak odpovídají skutečnému oprávnění uživatele. - Akce pro sync failures a blocked seed incidenty jsou dostupné přímo z problémového pohledu — Globální stránka Synchronization Problems i projektová záložka sync konfliktů nově nabízí potvrzované akce pro retry, ignorování konfliktu, acknowledgement aktuálního sync failure fingerprintu a acknowledgement incidentu typu
sync_seed_blocked. Badge v levé navigaci počítá souhrnnýsync_problem_count, tedy konflikty, aktuální sync failures i blocked seed incidenty. - Dismissals synchronizačních problémů škálují jedním dávkovým dotazem — Výpis sync failures nyní vyhodnocuje acknowledged fingerprinty aktuálních selhání jedním dávkovým dotazem místo samostatného lookupu pro každé selhané sync pravidlo. Zachovává se dosavadní fingerprint semantika podle pravidla, času a chyby i chování soft-delete, ale pohled Synchronization Problems zůstává svižný i při větším počtu selhaných pravidel.
- Export certifikátů spolehlivěji obsahuje issuer CA chain — Export certifikátu nyní normalizuje uložené certificate bundle a podle potřeby dohledá hierarchii vydávající interní CA přes parent CA záznamy. PEM/CRT a PKCS#7 exporty obsahují leaf certifikát následovaný issuer chainem, zatímco DER zůstává jako dříve leaf-only.
- Readiness obnovy certifikátů rozumí interním CA účtům — Eligibility obnovy, rotation preflight i metadata rotačních resources nyní resolveují interní organizační CA účty přes jejich podkladovou
CertificateAuthority. Obnovy podepisované interní CA reportují CA účet i skutečnou signing CA, stejně jako runtime renewal cesta. - Domain validation pro externí CA je viditelná a durable — Objednávky externích CA DigiCert a SSLMarket nyní zpřístupňují DCV instrukce přes zaregistrované endpointy renewal queue DCV a projektovou tabulku certifikátů. Certifikáty s čekajícím ověřením domény zobrazují akci View Domain Validation, která otevře existující DCV status panel, kde operátor vidí DNS/HTTP/email instrukce a může spustit provider re-check přímo z certificate workflow.
- Nové certificate requesty přes externí CA mohou čekat na validaci providera — Vydání přes externí CA už nepředpokládá, že
SignCSRokamžitě vrátí PEM certifikát. Pokud provider vrátí jen order ID, MazeVault uloží pending certificate placeholder, propojí ho s requestem, založí durablesubmitted_to_caqueue item a nechá external CA order poller request dokončit, jakmile provider certifikát zpřístupní. - CA account provider settings se persistují a dají spravovat Terraformem — Create/update/sync toky CA účtů nyní zachovávají ne-tajné provider settings jako DigiCert
organization_id,server_platform_id,dcv_method,certificate_dcv_scope, vlastníbase_urla SSLMarket defaulty v metadatech účtu. Terraform resourcemazevault_ca_accountpřidává mapusettingspro tyto ne-tajné hodnoty a API klíče nebo ACME EAB materiál dál drží ve write-only credentials. - Terraform secrety podporují write-only hodnoty pro ephemeral hesla — Resource
mazevault_secretnyní podporujevalue_woavalue_wo_versionpro write-only vstupy v Terraform 1.11+. Operátoři mohou vytvořit heslo pomocí ephemeral Terraform resource, napříkladephemeral "random_password", a předat ho do MazeVaultu bez uložení plaintextu do Terraform plánu nebo stavu.value_wo_versionje uložený trigger pro opětovné odeslání: navyšte ho, když má Terraform poslat novou write-only hodnotu. Starší argumentvaluezůstává podporovaný pro existující konfigurace a server-sidegeneratezůstává dostupný pro secrety generované MazeVaultem. - API pro update secretu a Go SDK podporují metadata-only update —
PUT /api/v1/secrets/{id}nyní berevaluejako volitelné pole: vynechání aktualizuje pouze metadata a TTL, zatímco dodaná neprázdná hodnota dál vytváří novou verzi secretu. Go SDK zachovává stávající metoduUpdateSecret(id, value, ...)a přidává request-based update cestu, která umívaluezáměrně vynechat. Terraform provider ji používá pro životní cyklus write-only secretů.
Opravy chyb¶
- Synchronization Problems už nezůstávají bez akčních ikon pro oprávněné role — Uživatelé, kteří mohli problémy vidět přes
sync:read, dříve často neměli žádnou možnost je vyřešit, protože mutace byly svázané sproject:write. Nové endpointy pro acknowledge sync failure a blocked seed incidentu jsou chráněnésync:write, auditované a záměrně omezené jen na synchronizační problémový povrch. - Ignorování sync konfliktu už nevyžaduje zápis do externího provideru — Resolution
ignorenyní pouze uzavře lokálnísync_conflictsřádek stavemignoreda nezapisuje do cílového secret manageru. To umožňuje trvale odložit známý konflikt bez rizika nechtěné změny externí hodnoty. - Acknowledgement sync failure je stabilní jen pro aktuální selhání — Sync failures odvozené ze
sync_rules.last_sync_statusse ukládají jako dismissal podle fingerprintu složeného z pravidla, času posledního syncu a chyby. Pokud další běh selže jinak, problém se znovu zobrazí; acknowledgment tedy nezakrývá nové nebo změněné selhání. - Editace konfigurace rotace už neukazuje falešné varování o částečném načtení — Modal konfigurace rotace secretu nyní adresuje historii rotací a readiness přes kanonické ID rotačního resource (
rotation_configs.id/resource.resource_id) místo ID secretu. Tím se opravuje zavádějící hláška „Some rotation sections could not be loaded. Available data is shown." při otevření Secrets → Rotations → Edit pro nakonfigurovaný secret. - Rollback verze secretu spolehlivě funguje nad existující historií verzí — Rollback secretu nyní ukládá archivované řádky historie s vygenerovaným primárním klíčem, zachovává původní čas verze místo času archivace a metadata rollbacku aktualizuje přes modelovou serializační cestu. Frontend navíc zobrazuje backend
message/errordetail jako error notifikaci místo obecné odpovědi „Rollback Failed". - Legacy řádky historie secretů s chybějícím UUID jsou opraveny — Migrace
000189_fix_secret_version_null_uuiddoplňuje validní UUID do legacy řádkůsecret_versions, které měly chybějící nebo nulové ID, a modelSecretVersionnyní před vložením vygeneruje ID, pokud chybí. Tím se předchází kolizím primárního klíče a selháním rollbacku v prostředích, která už dotčené historické řádky obsahují. - Manuální rotace secretu už ve stagingu nevytváří duplicitní lokální verze — Krok
pre_rotation_syncnyní před lokálním zápisem porovnává externí hodnotu s aktuální hodnotou secretu. Pokud jsou hodnoty shodné, krok hodnotu uloží jen jako kontext pro další kroky rotace a nezvýší verzi secretu. Tím se odstraňuje staging symptom, kdy jedna manuální rotace vytvořila dvě nové verze a matoucí mezilehlou systémovou verzi. - Historie verzí nyní zobrazuje správného autora u aktuální verze — Řádek aktuální (aktivní) verze v modalu Version History zobrazoval původního autora secretu místo aktéra, který secret naposledy změnil. Servisní vrstva nyní odvozuje autora aktuální verze z nejnovějšího archivovaného záznamu historie, který nese aktéra poslední změny — stejně jako všechny ostatní historické řádky. Automatické rotace spuštěné schedulerem se nadále zobrazují jako System; manuální triggery ukazují uživatele, který rotaci inicioval.
- Pole certificate chain už neduplikují leaf certifikát — Issuance, import, renewal, ACME completion i dokončení objednávek u externích CA nyní normalizují certificate PEM data na hranici zápisu.
CertificatePEMzůstává aktuální certifikát,ChainPEMukládá pouze issuer certifikáty aPublicChainPEMukládá celý bundle leaf-plus-chain. Existující kontaminovaná chain data se při exportu defenzivně normalizují. - ACME issuance ukládá leaf a chain odděleně — ACME issuance nyní rozděluje certifikáty vrácené objednávkou na leaf-only certificate data a normalizovaný issuer chain. Tím se zabrání tomu, aby se plný ACME bundle ukládal dvakrát nebo byl interpretován současně jako aktuální certifikát i chain.
- ACME bridge finalizace validuje CSR identifikátory a persistuje async ADCS certifikáty — MazeVault ACME server nyní odmítá finalize CSR, jehož DNS/IP identifikátory nejsou součástí ACME objednávky, konzistentně používá RFC 8555 certificate URL path a vytvoří sledovaný
Certificatezáznam, když ADCS-backed ACME objednávka doběhne po schválení CA managerem. - External CA polling správně řeší DCV, pending objednávky i stahování certifikátů — External CA order poller nyní počítá jako dokončenou práci pouze skutečně vyřešené objednávky, fetchuje a ukládá DCV tokeny, když provider vyžaduje validaci, stahuje certificate bundle pro DigiCert a SSLMarket před finalizací a request-originated objednávky dokončuje atomicky napříč záznamy certifikátu, queue, requestu a přiřazení agenta.
- DCV retry už předčasně neresumuje expirované challenge — Operátorský DCV retry před znovunačtením provider instrukcí resetuje expirované nebo stale challenge, bezpečně funguje i bez audit service v testovacím/background kontextu a nechá queue item ve stavu
pending_dcv, pokud stále existují expirované tokeny, místo aby nesprávně pokračoval ke stažení certifikátu. - ADCS DCOM odpovědi přijímají numerické i textové stavy — Backend DCOM parser nyní přijímá legacy numerické ADCS disposition kódy i agent odpovědi jako
pending,issuednebodenied, takže zachovává dosavadní chování a zároveň umožňuje bezpečně sjednotit agent/backend kontrakt. - Obnovené certifikáty zachovávají podkladovou interní signing CA — Renewaly přes interní organizační CA účet nyní zachovávají ID podkladové
CertificateAuthorityna obnoveném certifikátu a zároveň dál podepisují přes nakonfigurovaný CA account provider. Renewaly přes externí CA účty interní CA pole nadále nevyplňují. - Audit approval continuation obsahuje rotační kontext — Automatické pokračování rotace po approval nyní zapisuje audit události s projektem rotačního intentu a iniciátorem, pokud je dostupný. Zlepšuje to dohledatelnost bez změny idempotence continuation toku nebo vynucení approval.
- Inference HSM algoritmu u interní CA je krytá regresními testy — Interní CA HSM signer nyní používá čistší type switch pro inference RSA, RSA-PSS a ECDSA algoritmů a testy pokrývají očekávané JWA mapování.
- Terraform update write-only secretů už při změně metadat znovu neposílá ani nerotuje hodnotu — Metadata nebo TTL update Terraformem spravovaného
mazevault_secret, který používávalue_wo, nyní volá backend bez plaintext hodnoty, pokud se nezměnívalue_wo_version. MazeVault proto při metadata-only apply zachová existující secret material, historii verzí, offload stav, stav externího provideru i propagaci. Explicitně prázdné hodnoty secretu jsou odmítnuty místo toho, aby se zaměnily za vynechané hodnoty. - Terraform CA account provider typy se validují konzistentně — Terraform resource
mazevault_ca_accountnyní odmítá prázdné, whitespace-only, mixed-case a nepodporované hodnotyprovider_typeještě před voláním backend API. Akceptované kanonické hodnoty jsou sladěné s backend CA account resolvery, které se umí skutečně připojit, včetněinternal, SSLMarket aliasurapidsslavenafi; placeholder integrace I.CA/PostSignum a PSD2 zůstávají vyřazené, dokud backend nezačne hlásit connectable stav. Venafi account-backed provider resolution je nově zapojený v obou servisních cestách CA účtů, takže dokumentované Venafi CA účty už neselhávají v organization CA-account resolveru. Stávající dokumentované konfigurace s lowercase hodnotami fungují beze změny.
Poznámky k migraci¶
- Migrace
000189_fix_secret_version_null_uuidopravuje neplatné hodnotysecret_versions.idtak, že chybějící nebo nulové UUID nahradí nově vygenerovanými UUID. Jde pouze o opravu dat a nemění veřejné API kontrakty. - Migrace
000190_sync_problem_actionspřidává permissionsync:writedo oprávněných systémových rolí a vytváří tabulkusync_problem_dismissalspro trvalé acknowledgement aktuálních sync failure fingerprintů. Migrace je idempotentní a nemění konfigurační schéma ani environment proměnné.
Poznámky¶
- Dopad upgradu — Verze
1.0.59obsahuje dvě databázové migrace:000189_fix_secret_version_null_uuidpro opravu legacy UUID v historii verzí secretů a000190_sync_problem_actionspro sync remediation oprávnění a per-fingerprint dismissal tabulku. Přibývají sync-specific API endpointy pro acknowledgement aktuálních sync failures a blocked seed incidentů; nevyžadují nové environment proměnné ani změny formátu release balíčku. Terraform write-only hodnoty secretů vyžadují Terraform 1.11+, pokud sevalue_wopoužívá s ephemeral vstupy; existující konfigurace svalueageneratefungují dál. Update secretu nyní přijímá metadata/TTL-only požadavky bez vytvoření nové verze, což je rozšíření kompatibility API. Refresh pohledů rotace secretů je frontend-only změna a oprava zobrazení autora v historii verzí je backend servisní změna bez konfiguračního dopadu. Změny certificate chainu, exportu, ACME, external CA DCV, async issuance nových requestů, CA account settings, renewalu, auditu approval continuation, HSM, SDK a Terraform provideru nepřidávají žádné další migrace, environment proměnné, Helm values ani změnu formátu release balíčku. Terraform validace CA account provider typů nyní odmítá neplatné hodnoty dříve; dokumentované lowercase konfiguraceprovider_typefungují dál.CertificateRequest.statusmůže nově vracetsubmitted_to_ca, pokud request přes externí CA čeká na DCV/provider issuance, a nové renewal queue DCV endpointy používají existující certificate RBAC permissions.
Verze 1.0.58¶
Datum vydání: 2026-07-16
Nové funkce¶
- ACME challenge policy na šablonách certifikátů — Šablony certifikátů nyní obsahují pole
challenge_type(auto,dns-01,http-01,tls-alpn-01, výchozíauto), které řídí způsob ACME validace, pokud je vydávající CA účet ACME provider (Let's Encrypt, ZeroSSL, vlastní ACME). Politika se vynucuje při vydávání:dns-01vyžaduje nakonfigurovaný DNS solver a bez něj rychle selže,http-01odmítne wildcard identifikátory (které ACME přes HTTP neumí ověřit) atls-alpn-01vrací jasnou chybu „nepodporováno“ místo tichého fallbacku.autozachovává původní chování (wildcard → DNS-01 při dostupném solveru, jinak HTTP-01). Pole je dostupné v průvodci certifikátů v Project Templates, v detailu šablony a přes Terraform provider (mazevault_certificate_template.challenge_type). U neACME vydavatelů (interní CA, DigiCert, ADCS, …) se ignoruje. - ACME atributy v Terraform provideru — Resource
mazevault_ca_accountnyní podporuje ACME poleemail,directory_url,eab_kidaeab_hmac_key(HMAC klíč je označen jako citlivý/write-only). Mapují se do šifrovaného úložiště credentials na backendu a umožňují Terraformem spravované účty Let's Encrypt, ZeroSSL a vlastní/EAB ACME. Stávající atributyapi_key/base_urlzůstávají pro API-style providery. Provider nyní posílá backend-kompatibilní kontraktcredentials/display_namemísto dřívějšího generickéhoconfig, a write-only credentials se při čtení zachovávají (žádný falešný drift).
Vylepšení¶
- Jedna interní CA — ucelený životní cyklus a správa — Interní certifikační autorita organizace se nyní spravuje jako jediný prvotřídní objekt v Organization Settings → Project Settings → Certificate Authorities → Internal Certificate Authority. Nové endpointy interní CA vyhledají, inicializují a opraví (
GET/POST /organizations/{id}/internal-ca,POST /organizations/{id}/ca-accounts/{accountId}/initialize-ca) a vytvoření druhého interního rootu je odmítnuto (guard jedné CA). UI nabízí akci Initialize Internal CA (common name, velikost klíče, platnost) a opravnou akci Initialize CA pro interní účty dříve vytvořené bez klíčového materiálu. OCSP/CRL URL jsou editovatelné a regenerace CRL je dostupná přímo z karty interní CA. Agenti nadále beze změny distribuují certifikát CA do trust store serverů. - „Add CA Account“ je nyní pouze pro externí CA — Tok Add CA Account už nenabízí volbu Internal (která dříve vytvořila nefunkční „prázdný“ účet bez klíčového materiálu). Správa interní CA je výhradně v sekci Internal Certificate Authority. Interní CA je vyfiltrována z karet externích CA účtů, aby se nezobrazovala dvakrát, přičemž zůstává plně vybíratelná všude jinde (projektové integrace, vazba CA v šablonách, ACME/EAB dialogy).
- Striktní enforcement renewal: Template + CA povinný — Pipeline pro obnovu certifikátů nyní vyžaduje, aby každý certifikát měl přiřazený
TemplateIDa aby přiřazená šablona měla nastavenýCAAccountID. Certifikáty bez šablony nebo se šablonou bez CA účtu jsou odmítnuty s jasnou chybovou zprávou na vstupu do pipeline. Toto odstraňuje předchozí víceúrovňový fallback řetězec pro vyhledání CA (cert-level CA, project overrides, výchozí internal CA) a stanovujetemplate.CAAccountIDjako jediný zdroj pravdy pro výběr CA při obnově.
Opravy chyb¶
- Interní CA se už nehlásí jako „nenalezena“, když existuje — Záložka Certificate Authorities dříve pro zobrazení interních CA procházela CA vázané na projekty, takže org-level interní CA (bez vazby na projekt) byla neviditelná a sekce vždy ukazovala „No internal CAs found“. Sekce nyní vyhledá interní CA přes vazbu interního CA účtu organizace a správně ji zobrazí včetně OCSP/CRL konfigurace.
- OCSP/CRL konfigurace se ukládá i pro org-level interní CA — Editace OCSP/CRL URL interní CA nyní používá endpoint na úrovni CA (
PUT /ca/{id}) místo project-scoped cesty, která neuměla adresovat org-level CA (project_id = NULL). OCSP zůstává záměrně jen pro interní CA — externí CA (DigiCert, Let's Encrypt, ZeroSSL) nadále inzerují vlastní OCSP/CRL respondery přes vložené AIA/CDP ukazatele. - Dopad na integrace při mazání nyní ignoruje soft-deleted secrety — Raw SQL agregace za
affectedSecretCountacollectOrphanedSecretIDsfiltrovaly pouzearchived_at IS NULLa ignorovaly GORM soft-delete (deleted_at). To mohlo nafouknout hlášený počet „celkem dotčených“ / osiřelých secretů oproti všem ostatním cestám, které se nasecretsdotazují přes GORM (adeleted_at IS NULLdoplní automaticky). Oba raw dotazy nyní filtrují ideleted_at IS NULL, čímž se obnovuje jednotná a konzistentní množina secretů napříč výsledkem mazání, endpointem dopadu mazání, audit logem i rozpadem podle prostředí. - Rotace odloženého secretu už nehlásí refresh, který neproběhl —
markDelayedSecretReauthorizingnastavoval v metadatech exekucerefresh_performed=trueještě před samotným voláním re-autorizace, takže pád nebo chyba předAuthorizeRotationConfigPublishuložily zavádějícírefresh_performed=true, i když žádný refresh neproběhl. Placeholder nyní zapisujerefresh_performed=false; příznak se nastaví natruepouze na úspěšné cestě re-autorizace. Sémantika „nanejvýš jednou“ zůstává beze změny — loop guard se opírá orefresh_attempted+refresh_generation.
Odstranění¶
- ProjectCAOverride odstraněn — Tabulka
project_ca_overridesa veškerý přidružený kód (model, handlery, servisní metodafindProjectCAOverride) byly odstraněny. Tato funkce nebyla nikdy zpřístupněna přes API router (routes nebyly registrovány) a tabulka byla v produkci vždy prázdná. Renewal orchestrator nyní vyhledává CA výhradně ze šablony. Migrace000188odstraňuje tabulku. buildTemplateFromCertodstraněn — Syntetický fallback pro certifikáty bez šablony byl odstraněn. Certifikáty musí mít přiřazenou řádnou šablonu, než je lze obnovit.
Údržba¶
- Odstraněno mrtvé PKI UI — Tři osiřelé, nedosažitelné frontend komponenty byly smazány po ověření, že nedojde ke ztrátě funkce:
CAManagementTab(jeho funkce Initialize CA / HSM / CRL nahrazuje sekce Internal Certificate Authority) aCertificateTemplatesTab+CertificateTemplateModal(nahrazeno variable-driven tokem certifikátů v Project Templates, který pokrývá subject DN a SAN přes proměnné šablony). ŽivýCertificateTemplateViewModal(používaný záložkou Templates v projektu) je zachován. - Opraven komentář v hlavičce migrace 000188 — Komentář v hlavičce
000188_drop_project_ca_overrides.up.sqlchybně odkazoval na „Migration 000187“; nyní správně uvádí „000188“. Bez funkční změny.
Poznámky k migraci¶
- Migrace
000188_drop_project_ca_overridesodstraňuje tabulkuproject_ca_overrides. Jedná se o nedestruktivní změnu, protože tabulka nikdy nebyla naplněna aplikací (API routes nebyly nikdy zaregistrovány). - Certifikáty bez
TemplateID, které se dříve spoléhaly na fallback na interní CA, budou nyní v dashboardu rotací vykazovat stav „no template assigned" a nemohou se automaticky obnovovat, dokud jim nebude přiřazena šablona.
Poznámky¶
- Dopad upgradu — Verze
1.0.58přidává dvě databázové migrace:000182_add_challenge_type_to_certificate_templates(přidává docertificate_templatessloupecchallenge_type VARCHAR(20) DEFAULT 'auto's CHECK omezením) a000188_drop_project_ca_overrides(odstraňuje vždy prázdnou tabulkuproject_ca_overrides). Obě migrace jsou idempotentní a zpětně kompatibilní; existující šablony defaultují naautoa stávající chování ACME vydávání se nemění. Žádné změny konfiguračního schématu. - Terraform provider — Stávající konfigurace
mazevault_ca_accountfungují dál; nové ACME atributy jsou volitelné.mazevault_certificate_templatezískává volitelný atributchallenge_types výchozí hodnotou. Interní CA se záměrně nespravuje přes Terraform — spravuje se v UI MazeVault.
Verze 1.0.57¶
Datum vydání: 2026-07-07
Opravy chyb¶
- Synchronizační kroky rotace (pre/post_rotation_sync) nyní používají managed identity místo zastaralých credentials z konfigurace — Když kroky
pre_rotation_syncnebopost_rotation_syncorchestrátoru rotace rozpoznávaly Azure credentials přesgetAzureCredentialFromConfig, funkce automaticky detekovala poleclient_secretze zašifrovaného konfiguračního blobu integrace, i když byla integrace nakonfigurována sbackground_auth_method=managed_identity. To způsobovalo chybyAADSTS7000215(neplatný client secret) během synchronizačních kroků rotace, zatímco identické připojení ke Key Vaultu úspěšně procházelo během nesouvisejících synchronizačních cest. Credential helper nyní preferuje systémovou managed identity, pokud jeauth_methodprázdný a systém má nakonfigurovanou MI, čímž zabraňuje zachycení zastaralých SSO app credentials. Navíc vrstva delegování přes gateway již neblokuje delegaci pouze kvůli přítomnosti managed identity a delegované synchronizační kroky nyní nesou snapshotsecret_metadata, takže gateway-prováděné synchronizační kroky mohou rozpoznat cílový klíč secretu bez nutnosti přímého databázového dotazu. - Delegování přes gateway již není blokováno přítomností managed identity —
canDelegateEnvironment()dříve bezpodmínečně vracelofalse, pokud credential factory hlásila dostupnost managed identity, čímž bránilo jakémukoliv delegování synchronizace Azure KV na gateway v prostředích s nakonfigurovanou MI. Tato brána byla odstraněna; delegování přes gateway nyní závisí výhradně na párování prostředí a dostupnosti gateway, což umožňuje správné delegování synchronizačních operací autentizovaných přes MI. - Rotace v orchestrator mode již neprovádí duplicitní zápis do Key Vault — V orchestrator mode (
storage_mode=names_only) krokmazevault_secretdříve volalSecretService.Update, který interně posílal novou hodnotu do externího trezoru přesPushSecretToEnvironment. Protožepost_rotation_synczasílá tutéž hodnotu do trezoru také, každá rotace produkovala nadbytečný duplicitní zápis. Krok nyní v orchestrator mode volá pouzeBumpVersion()(lokální inkrementace čítače verze) a jedinou externí zápis přenechává krokupost_rotation_sync. - Compensate kroku mazevault_secret v orchestrator mode již neselhává na prázdném EncryptedValue — Když rotační sága prováděla rollback kroku
mazevault_secretv orchestrator mode,Compensate()se pokoušel dešifrovatEncryptedValuepředchozí verze, které je pro secretynames_onlyvždyNULL/prázdné. To způsobovalo falešné stavy „partially_rolled_back". Cesta kompenzace nyní pro orchestrator-mode secrety ihned vracínil— rollback hodnoty v externím trezoru zajišťujePostRotationSyncStep.Compensate, který má per-integration snapshot před přepsáním. - Pre-rotation sync již v orchestrator mode neprovádí zbytečný round-trip hodnoty zpět do Key Vault — Když
pre_rotation_syncdetekoval novější hodnotu v Azure Key Vault, volalUpdateSecret, který v orchestrator mode posílal tutéž hodnotu rovnou zpět do trezoru (redundantní síťové volání). V orchestrator mode krok nyní zachytí hodnotu z KV jako kontextprevious_valuepro následující kroky bez spouštění zápisu do lokální DB nebo externího pushe. - Discovery report agenta tiše nezapisoval aktualizaci metadat —
ProcessDiscoveryReport()ukládal nalezené certifikáty do databáze, ale nikdy neaktualizoval metadata samotného agenta (last_discovery_at,discovered_certificates_count). Po úspěšném discovery běhu zůstal řádek agenta zastaralý, takže operátoři nemohli z dashboardu zjistit, zda agent kdy provedl discovery ani kolik certifikátů nalezl. Transakce nyní končí atomickým count dotazem a aktualizací řádku agenta, takže statistiky na dashboardu odrážejí realitu ihned po každém reportu. - Verze agenta se neukládala z health heartbeatu —
UpdateHealth()ukládal celý health payload do JSONB sloupcehealth_statusa obnovovallast_seen, ale nikdy neextrahoval řetězecagent_versiondo jeho dedikovaného sloupce. Agenti hlásící svou verzi přes heartbeat se v UI zobrazovali jako verze-neznámá. Handler nyní kopírujeagent_versionz health mapy do modelu agenta před uložením. - Prázdný dropdown prostředí v dialogu Bind Agent — Dialog „Bind Agent" na záložce Project Integrations načítal data prostředí z
GET /projects/:id/environment-settings(který vracíProjectEnvironmentSetting[]s polemenvironment), ale vykresloval seznam s očekáváním objektůEnvironment[](s polisluganame). Protože se názvy polí neshodovaly, každá položka dropdownu se zobrazovala prázdná. Dialog nyní načítá zGET /organizations/:orgId/environments, který vrací správný tvarEnvironment[], a dropdown se tak správně naplní.
Verze 1.0.56¶
Datum vydání: 2026-07-01
Vylepšení¶
- Rozšířené bezpečnostní gate v release pipeline — Vývojová CI pipeline nyní skenuje všechny dodávané image včetně
docsainit-certsa release pipeline nově skenuje idocsa při nálezech Trivy se závažností CRITICAL/HIGH release ukončí chybou místo pasivního reportingu. Uzavírá se tím slepé místo, kdy pomocné image mohly projít do vydání s neopravenými zranitelnostmi, i kdyžbackend,frontendaocspbyly čisté. - Sjednocení base image a lokálního runtime —
init-certsse nyní v lokálnímdocker-composebuilduje ze stejného připnutéhoDockerfile.init-certsmísto ad-hoc bootstrapu nadalpine:latest. Imageinit-certspřešla na Alpine 3.21 s upgradem balíčků během buildu a runtime stage docs image nyní před zabalenímnginxobnovuje Alpine balíčky. Tím se snižuje drift mezi CI artefakty a lokálním během a zároveň expozice známým CVE v OS balíčcích. - Obnova backend závislostí pro dosažitelné integrační cesty — Byly připnuty opravené Go verze pro
github.com/Azure/go-ntlmssp,github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream,github.com/aws/aws-sdk-go-v2/service/s3,github.com/quic-go/quic-goago.mongodb.org/mongo-driver, což pokrývá dosažitelné volitelné cesty jako ADCS NTLM autentizaci, transport auditního archivu do S3, použití QUIC stacku a MongoDB reconciliaci a rotační kód.
Opravy chyb¶
- Request ID tracing sjednocen napříč middleware a logy —
RequestIDMiddlewarenyní plní oba Gin context klíčerequestIDi legacyrequest_ida dál vrací hlavičkuX-Request-ID; warning logy rozlišení prostředí současně čtou kanonický klíčrequestID. Tím se uzavírá mezera ve sledovatelnosti, kdy část logů zapisovala prázdné request ID, přestože už bylo požadavku přiřazeno. - Orchestrator mode guard používá přesné route patterny — Ingress guard v orchestrator mode už nespoléhá na heuristiky nad suffixy a substringy URL. Místo toho páruje registrované Gin route patterny přes
c.FullPath()pro write route secretů v/api/v1/secretsi/api/v2/secretsa současně se vyhýbá false positive zásahům do vnořených flow, jako je import certifikátů. Přímé payloady secretů s polemvaluezůstávají v orchestrator mode blokované, ale legitimní endpointy pro import certifikátů už nejsou ohroženy náhodným zachycením. - Synchronizace Entra pro vybrané aplikace nyní zůstává ve stavu pending, dokud neexistují bindingy — Pokud je Entra integrace nakonfigurována se scope
selected_apps, ale zatím k ní nejsou uloženy žádné bindingy vybraných aplikací, manuální synchronizace nyní vrací HTTP 409 Conflict místo obecného selhání. Integrace se zapíše slast_sync_status = pending,last_sync_errorzůstane prázdné a hodinový plánovač jen zaloguje přeskočení, dokud není nakonfigurována alespoň jedna vybraná aplikace. API i provozní stav tak pravdivě odrážejí postupný onboarding. - Stavy synchronizačních pravidel a auditní metadata nyní zachovávají provenienci spuštění — Běhy synchronizačních pravidel nyní persistují kanonický execution záznam a promítají výsledné
execution_id,trigger_source, zdrojový secret/prostředí a agregované počty výsledků do stavových polí pravidla i metadat synchronizačních logů. Obousměrná synchronizace navíc potlačuje okamžitý echo-push secretů, které byly právě nataženy nebo zůstaly po pull fázi beze změny, čímž omezuje zbytečný churn v externím systému a zároveň držísync_rules.last_sync_statusaproject_integrations.last_sync_*v souladu s finálním výsledkem. - Krok 0 rotace (connection_validation) nyní respektuje background_auth_method integrace — Když orchestrátor rotace provádí operaci lokálně (nedelegovaná cesta), metoda
TestConnection()pro integrace Azure Key Vault nyní voláprepareAzureIntegrationRuntimeConfig()před pokusem o připojení. Dříve zastaralé přihlašovací údajeclient_secretv zašifrované konfiguraci integrace přebíjely nakonfigurovanou hodnotubackground_auth_method=managed_identity, což způsobovalo chybyClientSecretCredential authentication failedběhem rotace, zatímco synchronizace (která již používala správnou přípravnou cestu) úspěšně pokračovala. Oprava zajišťuje konzistentní rozlišení autentizační metody napříč cestami synchronizace a rotace.
Poznámky¶
- Dopad upgradu — Verze
1.0.56neobsahuje databázové migrace ani změny konfiguračního schématu. Stávající API kontrakty zůstávají stabilní; hlavní provozní změnou je přísnější release gating, takže CI a release joby nyní mohou selhat, pokud imagedocsneboinit-certsobsahují nevyřešené nálezy se závažností CRITICAL/HIGH. - Dopad na lokální vývoj — První
docker compose up --buildpo upgradu znovu sestaví dedikovanou imageclient-init-certsmísto stažení generické Alpine base a inline instalace balíčků. Build může být mírně delší, ale lokální chování nyní mnohem přesněji odpovídá dodávané image.
Verze 1.0.55¶
Datum vydání: 2026-06-29
Nové funkce¶
- Správa cílů rotace secretů (Secret Rotation Targets) — Plná CRUD správa cílů rotace secretů je nyní dostupná přes API, frontend, Go SDK a Terraform. Cíle definují cílová umístění nasazení (Kubernetes secrets, rotace databázových hesel, synchronizace agenta, proměnné DevOps pipeline, cloudové trezory), do nichž MazeVault zasílá aktualizované přihlašovací údaje ihned po dokončení rotace. Nová komponenta
SecretRotationTargetListna záložce Secrets umožňuje operátorům přidávat, upravovat a odstraňovat cíle bez opuštění pohledu projektu. Terraform resourcemazevault_secret_rotation_targetumožňuje plně deklarativní správu; argumentconfig_jsonpřijímá JSON objekt zakódovaný pomocíjsonencode()popisující konfiguraci specifickou pro daný cíl. - Aktualizace konfigurace interní CA a doplnění AIA (Backfill) — Dva nové API endpointy umožňují aktualizovat měnitelná pole na účtu interní CA bez nutnosti jeho opětovného vytvoření:
PUT /api/v1/ca/:idaPUT /api/v1/projects/:id/ca/:caIdpřijímajíocsp_url,crl_urlaocsp_responder_cert_ids patch sémantikou (vynechaná pole zůstanou nezměněna). Doprovodný endpointPOST /api/v1/admin/certificates/backfill-aiazpětně kopíruje aktuální OCSP a CRL URL z účtu CA do všech existujících certifikátů, které vydal. Rozšíření OCSP URL, CRL Distribution Points a Issuer Certificate URL jsou nyní správně vkládána do šablony x509 v rámciInternalCAProvider.SignCSR()pro všechny nově vydávané certifikáty. - Výběr agenta v konfiguraci rotace —
SecretPostRotationActionsPanelaSecretRotationTargetEditornyní zobrazují rozbalovací nabídku, která operátorovi umožňuje svázat konkrétního registrovaného agenta s cílem rotace. Tím je zajištěna přesná kontrola nad tím, který on-premise agent provede krok nasazení, bez nutnosti spoléhat se výhradně na směrování dle prostředí. - Modal pro zobrazení šablony certifikátu — Nová komponenta
CertificateTemplateViewModalposkytuje podrobné zobrazení šablony certifikátu jen pro čtení (SAN vzory, key usage, extended key usage, platnost, vazba na CA účet) bez nutnosti opustit aktuální stránku. Modal je přístupný jak ze záložkyCertificateTemplatesTabna úrovni organizace, tak ze záložkyTemplatesTabna úrovni projektu. Zobrazení nyní také ukazuje algoritmus podpisu (s návratem na výchozí hodnotu CA, pokud není nastaven) a název ACME profilu a označuje omezení sloužící pouze k validaci a pole řízená externí CA, takže operátoři rozumí tomu, která nastavení vynucuje MazeVault a která vydávající CA. - Šablony certifikátů nyní řídí vydávání od začátku do konce — Šablony certifikátů byly povýšeny z částečně dekorativního metadatového záznamu na autoritativní governance „kuchařku" pro vydávání certifikátů v celém životním cyklu. Pole šablony, která byla dříve ukládána, ale nikdy aplikována, jsou nyní respektována podpisovým enginem a generátorem CSR:
max_path_length(s explicitním zpracováním path-length-zero pro CA certifikáty), policy OID certifikátů (policy_identifiers/certificate_policies),signature_algorithm, výchozí šablona common-name (cn_template) a subjektovýemail. Nová záložka Governance vCertificateTemplateModalzpřístupňuje požadavky na schválení, povolená prostředí a povolené velikosti klíčů a vyhrazená sekce Renewal & Rotation umožňuje nezávisle nastavit politiku opětovného použití klíče. Výchozí hodnoty šablon jsou nyní normalizovány při vytvoření/aktualizaci (validity_days→ 365,key_size→ 256/2048 dle algoritmu, okna minimální/maximální platnosti), takže šablona nikdy nemůže uložit neúčinné nulové hodnoty. - Modaly pro zobrazení šablon projektů a konfigurací — Dva nové modaly s detailem jen pro čtení,
ProjectTemplateViewModalaConfigTemplateViewModal, přinášejí stejný způsob rychlé inspekce, který je již dostupný pro šablony certifikátů, i k šablonám projektů (obecná nastavení, pravidla prostředí, schéma proměnných, konfigurace protokolu) a šablonám konfigurací (metadata, souhrn definice, surový JSON). Oba jsou dostupné přes akci zobrazení (ikona oka) v příslušných záložkách správy. - Terraform: Certificate Rotation Config, Entra Rotation Config a datový zdroj Rotation Resources — Tři nové Terraform povrchy doplňují IaC pokrytí rotační platformy:
mazevault_certificate_rotation_configspravuje plánování automatického obnovení a seznamy akcí po rotaci pro konkrétní certifikát;mazevault_entra_rotation_configspravuje nastavení rotace přihlašovacích údajů Entra ID včetně prahu dní před expirací a chování postupné rotace;mazevault_rotation_resourcesje datový zdroj, který vypisuje všechny rotací spravované zdroje s jejich aktuálním stavem, filtrovatelný podlekindaenvironment_scope.
Reforma identity prostředí¶
- Identifikátory prostředí jsou nyní ukládány doslovně a párovány přesně — Identifikátory prostředí zadané v Nastavení organizace jsou jediným zdrojem pravdy. Systém je nyní ukládá doslovně (se zachováním velikosti písmen) a páruje je přesně (s ohledem na velikost písmen) všude — RBAC, secrety, synchronizační pravidla, směrování gateway, úlohy gateway, zámky prostředí i frontend. Identifikátory, které se liší pouze velikostí písmen (například
developmentA,DeveLopmentB,DeveLopmentC), jsou považovány za odlišná prostředí. Systém nikdy tiše nepřepisuje, nepřevádí na malá písmena, neořezává ani nemapuje aliasy toho, co operátor zadal. CanonicalizeEnvironmentje nyní pouze validační: odmítá prázdné/jen z mezer složené, rezervované (*,default,all,system,none), příliš krátké/dlouhé a chybně tvarované identifikátory (povolený tvar^[A-Za-z][A-Za-z0-9_-]{1,31}$) a při úspěchu vrací vstup beze změny.- Mapa aliasů prostředí gateway (
pro→production,npr→nonproductionatd.) byla odstraněna z backendu i frontendu.SupportsEnvironment(),GetEnvironmentMode(), směrování gateway, failover health-monitoru a frontendový pomocníkenvironmentsnyní porovnávají identifikátory přesně. Frontendový pomocník prostředí již neaplikujetoLowerCase()/normalizaci tokenů a všechny selektory prostředí získávají své volby výhradně ze seznamu prostředí organizace. - Dopad: existující data prostředí zákazníků jsou jednotně malými písmeny, takže přesné párování dle velikosti písmen je pro stávající záznamy no-op — nulová regrese RBAC/secret/sync. Identifikátory se smíšenou velikostí písmen jsou podporovány pouze do budoucna.
Vylepšení¶
- Úplnost prověření před spuštěním rotace (gateway, agent a runtime Entra) — Orchestrátor rotace nyní ověřuje, že každý požadovaný cíl provedení je dosažitelný před prvním mutujícím krokem, a vrací strukturovanou chybu HTTP 412, pokud rotaci nelze bezpečně zahájit. Místo neprůhledné chyby 500/409 jsou nyní zobrazovány tři nové chybové kódy —
rotation_blocked_no_gateway,rotation_blocked_agent_offlinearotation_blocked_runtime_unavailable. Prověření nyní zohledňuje certifikáty (správně rozpozná cíleCertificateRotationConfig), shromažďuje všechna požadovaná ID agentů napříč všemi kroky workflow využívajícími agenta a je vynucováno také uvnitřexecuteCertificateWorkflow. Rotace přihlašovacích údajů Entra spouští stejné prověření runtime vRotateCredentialWithRequestdříve, než životní cyklus přejde do stavurotating, takže blokovaný runtime nikdy nezanechá přihlašovací údaj rotovaný jen napůl. Změna přihlašovacího údaje nebo certifikátu, kterou nelze nasadit, nyní selže rychle a viditelně namísto toho, aby se spustila a zasekla. - Delegování synchronizace Azure Key Vault přes gateway — Operace synchronizace push a pull s Azure Key Vault jsou nyní delegovány na příslušnou gateway, pokud backend zjistí, že přímá síťová cesta k endpointu Key Vault není dostupná. Úlohy gateway nesou konfiguraci integrace a provádějí skutečná volání Azure SDK; primární backend zaznamenává pouze výsledný stav synchronizace. Spuštění plánovače synchronizačních pravidel bylo odloženo až po úplné inicializaci delegování přes gateway, čímž se zamezuje přechodným chybám DNS při startu backendu.
- Automatické doplnění cílového prostředí v konfiguraci rotace — Když
GetConfigBySecretIDvytváří novou konfiguraci rotace pro secret, který ji dosud nemá, poletarget_environmentje nyní automaticky doplněno z prostředí daného secretu. Tím odpadá ruční krok aktualizace, který byl dříve vyžadován před prvním spuštěním rotace.
Opravy chyb¶
- Párování prostředí gateway přepracováno na doslovnou/přesnou identitu — Dříve v tomto vydávacím cyklu se párování prostředí gateway spoléhalo na mapu aliasů bez ohledu na velikost písmen (
pro→production,npr→nonproductionatd.), která mohla tiše mapovat nesouvisející identifikátory dohromady a mutovat hodnoty zadané operátorem. Tento přístup byl nahrazen doslovným/přesným modelem identity prostředí (viz Reforma identity prostředí výše):SupportsEnvironment()aGetEnvironmentMode()nyní porovnávají přesně, mapa aliasů byla odstraněna a dříve plánovaná migrace normalizace aliasů000176byla neutralizována na no-op (nikdy nebyla dodána zákazníkům). Dopředné migrace000178/000179odstraňují CHECK constrainty vynucující malá písmena a unikátní indexy bez ohledu na velikost písmen, takže jsou přijímány identifikátory lišící se velikostí písmen. - Rozšíření AIA nevkládána do vydávaných certifikátů —
InternalCAProvider.SignCSR()načítaloocsp_urlacrl_urlze záznamu CA, ale nikdy je nezapisovalo do šablony certifikátu x509, takže každý certifikát vydaný interní CA měl prázdná rozšíření Authority Information Access a CRL Distribution Points. Obě rozšíření jsou nyní správně vkládána do všech nových certifikátů. Existující certifikáty lze zpětně aktualizovat prostřednictvím nového backfill endpointu. - Device Fingerprint — souběžná podmínka (race condition) při vkládání — Služba detekce anomálií mohla produkovat porušení constraints s duplicitním klíčem, pokud se dvě souběžné autentizační požadavky od stejného dříve neviděného zařízení pokoušely současně zaregistrovat jeho otisk. Cesta vkládání nyní používá upsert vzor s ochranou
ON CONFLICT DO NOTHINGpro korektní zpracování souběžných registrací. - Plánovač synchronizačních pravidel — chyby DNS při startu backendu — Na backendech nakonfigurovaných s delegováním přes gateway mohlo první naplánované spuštění plánovače synchronizačních pravidel selhat s chybami DNS, protože se spustil dříve, než subsystém delegování gateway dokončil inicializaci. Spuštění plánovače je nyní odloženo až po připravenosti delegační vrstvy.
- Terraform resource organizace — tiché spolknutí chyb při mazání — Metoda
Deletev Terraform resourcemazevault_organizationvracela úspěch i v případě, kdy backend odpověděl stavovým kódem jiným než 2xx. Chyby backendu jsou nyní zobrazovány jako Terraform diagnostiky, takžeterraform destroyviditelně selže namísto ponechání resource v nekonzistentním stavu. - Policy OID certifikátů tiše vynechány z vydaných certifikátů (Go 1.24+) —
InternalCAProvider.SignCSR()vyplňoval pouze zastaralé polex509.Certificate.PolicyIdentifiers. Go 1.24+x509.CreateCertificatevydává rozšíření Certificate Policies místo toho z nového polePolicies([]x509.OID), takže policy OID deklarované v šabloně byly tiše vynechány z každého vydaného certifikátu.SignCSRnyní vyplňuje obě pole — moderní slicePolicies(pro současné enkodéry) i legacy slicePolicyIdentifiers(pro starší parsery) — takže policy OID jsou spolehlivě vkládány. - Podpisová a subjektová pole šablony certifikátu byla neúčinná —
max_path_length,signature_algorithm, policy OID certifikátů, výchozí šablona common-name a subjektovýemailbyly v šablonách certifikátů ukládány, ale nikdy se nedostaly do vydaného certifikátu ani vygenerovaného CSR. Všechna tato pole šablony jsou nyní aplikována při podpisu a generování CSR, čímž se uzavírá rozdíl mezi tím, co šablona deklaruje, a tím, co certifikát skutečně obsahuje. - Import šablony z externí CA ukládal nulové
validity_days/key_size— Šablony importované z externích poskytovatelů CA (ADCS, SmallStep) byly ukládány svalidity_days = 0akey_size = 0, což se následně projevovalo jako neplatné výchozí hodnoty v editoru šablon. Importované šablony nyní nesou rozumné výchozí hodnoty (key_size = 2048,valid_days = 365) a servisní vrstva normalizuje veškeré zbylé nulové hodnoty při vytvoření/aktualizaci jako obranu do hloubky.
Databázové migrace¶
000176_normalize_gateway_environments— Neutralizováno na no-op (SELECT 1). Tato migrace původně normalizovala legacy aliasy prostředí na kanonické identifikátory, ale reforma identity prostředí tento směr obrátila (identifikátory jsou nyní ukládány doslovně). Protože migrace nebyla nikdy vydána žádnému zákazníkovi, jsou nyní její.up.sqli.down.sqlzdokumentované no-opy, které ponechávají data gateway zákazníků nedotčená.000177_certificate_templates_signature_algorithm— Přidává sloupecsignature_algorithm VARCHAR(50)docertificate_templates(idempotentníADD COLUMN IF NOT EXISTS), aby šablony mohly fixovat algoritmus podpisu při vydávání. Odpovídající.down.sqlsloupec odstraňuje.ExpectedColumns["certificate_templates"]vdatabase_health.gobyl odpovídajícím způsobem aktualizován.000178_relax_canonical_environment_check— Odstraňuje 11 CHECK constraintůchk_*_canonical(přidaných migrací000125), které vyžadovalycolumn = LOWER(column)na každém sloupci nesoucím prostředí. Tyto constrainty by odmítaly identifikátory lišící se velikostí písmen, což odporuje doslovnému kontraktu; validace na straně aplikace (CanonicalizeEnvironment) nadále vynucuje pravidla tvaru, délky a rezervovaných slov. Dolní migrace constrainty znovu přidává. Idempotentní (DROP CONSTRAINT IF EXISTS).000179_case_sensitive_environment_indexes— Nahrazuje unikátní pojistkyLOWER()bez ohledu na velikost písmen z migrace000122přesným unikátním indexem s ohledem na velikost písmenuniq_environments_org_slug (organization_id, slug)a obnovuje běžné vyhledávací indexy nad surovými sloupci pro každý sloupec nesoucí prostředí. Existující unikátnost na úrovni projektu (idx_project_env) je již přesná. Dolní migrace obnovuje indexyLOWER(). Idempotentní.
Verze 1.0.54¶
Datum vydání: 2026-06-27
Opravy chyb¶
- Watchdog Entra přihlašovacích údajů — detekce zaseknutí trvale obcházena hodinovou synchronizací — PostgreSQL trigger
trg_entra_creds_updatedobnovujeupdated_at = NOW()při každémUPDATEzáznamu v tabulceentra_credentials, včetně zápisů do nesouvisejících polí prováděných hodinovou synchronizační smyčkou (syncedEntraCredentialUpdates). Podmínkaupdated_at < now() - 30minproto nebyla nikdy splněna pro žádné přihlašovací údaje, které prošly synchronizačním cyklem, a watchdog se nikdy nespustil. Nový sloupecrotation_started_at TIMESTAMPTZ(migrace000175) je nastaven při přechodulifecycle_statenarotatinga vymazán při rollbacku nebo zotavení watchdogem. Watchdog dotaz nyní používárotation_started_at IS NULL OR rotation_started_at < cutoff; podmínkaIS NULLpokrývá přihlašovací údaje zaseknuté před aplikací migrace. - Monitor expirace Entra — chyba GORM
Preload("")při každé hodinové kontrole —checkExpiringCredentialsvolal.Preload("")(prázdný řetězec) na GORM dotazu. GORM v2 toto odmítá chybouunsupported relations for schema EntraCredential, každou hodinu loguje chybu a zabraňuje nastavení stavuexpiring_soonu přihlašovacích údajů, které skutečně expirují. Neplatné volání.Preload("")bylo odstraněno; chování je jinak nezměněno. - Sync Rule Pull — porušení FK
secret_versions_created_by_fkeypro systémové aktory —SyncRuleService.executePullvoláSecretService.Updatesreq.UserID = uuid.Nil(žádný autentizovaný uživatel).Updatebezpodmínečně ukládal&req.UserIDjakocreated_bydo nového záznamuSecretVersion; GORM serializuje*uuid.Niljako řetězec'00000000-...'namísto SQLNULL, což porušuje non-null FK odkazující na tabulkuusers. Oprava přidává nil-guard:created_byje nastaven naNULL, pokud volající předá zero-value UUID, v souladu s kontraktem nullable sloupce. - Azure KV Integrace — synchronizované secrets zobrazeny jako „Uloženo lokálně" —
syncAzureKeyVaultLocalvytvářel a aktualizoval secrets v tabulcesecrets, ale nikdy nevkládal záznamSecretIntegrationLinkslink_purpose = 'sync_source'.GetSecretSyncStatusproto vrátillocal_onlypro každý KV-synchronizovaný secret a uživatelské rozhraní zobrazovalo „Uloženo lokálně" místo „Synchronizováno z KV". Oprava vkládá inline stejnou logiku upsert jakoSyncRuleService.upsertPullLinkpřímo vIntegrationServicepomocís.dbaclause.OnConflict, čímž se předchází závislosti napříč službami.
Vylepšení¶
- Oprávnění rolí —
agent:adminpřidáno do rolísecret_manageracertificate_manager— Operace správy agentů (agent:admin) byly přidány do systémových rolísecret_manageracertificate_manager(migrace000174). Operátoři vlastnící pouze jednu z těchto rolí nyní mohou registrovat a konfigurovat agenty bez nutnosti přiřazení samostatné roleadmin.
Databázové migrace¶
000174_agent_admin_for_managers— Uděluje oprávněníagent:adminvestavěným rolímsecret_manageracertificate_manager.000175_entra_credentials_rotation_started_at— Přidávárotation_started_at TIMESTAMPTZdoentra_credentials. Obsahuje partial indexidx_entra_creds_rotation_startedpřes(rotation_started_at)pro stavyrotatingapending_verification.
Verze 1.0.53¶
Datum vydání: 2026-06-26
Opravy chyb¶
- OCSP — existence certifikátu neověřena před staplingem — Služba OCSP odpovídala na požadavky staplingu bez ověření, zda odkazované sériové číslo v lokálním úložišti certifikátů existuje. Útočník s podělátým nebo znovu použitým sériovym číslem mohl získat platnou OCSP odpověď pro neexistující certifikát. Služba nyní ověřuje existenci certifikátu před sestavením odpovědi a pro neznámá sériová čísla vrací stav
Unknown. - Krok rotace — PostgreSQL GRANT/REVOKE zranitelný SQL injekcí —
rotation_steps/postgres_db.gosestavoval příkazyGRANT/REVOKEpřímým řetězovým spojením jména role a seznamu oprávnění bez escapování. Jména databázových rolí jsou nyní uzavřena do dvojitých uvozovek pomocí identifikátorového escapování podlepgx, což zavírá cestu SQL injekce. - SSH klíče —
ExportPrivateKeybez autorizační kontroly —ExportPrivateKeyneověřoval, zda žádající uživatel má vlastnictví nebo správcovská práva na SSH klíč, před vrácením šifrovaného privátního materiálu. Handler nyní vynucuje stejnou kontrolu členství v projektu a vlastnictví jako ostatní mutation endpointy SSH klíčů. - SSH rotace — chybné mapování polí API odpovědi pro páry klíčů — Handler odpovědi SSH rotace přímo prohazoval pole páru klíčů z API odpovědi, což způsobovalo vrácení prohozeného nebo prázdného
public_keyakey_idpo úspěšné rotaci. Mapování polí bylo opraveno. - Rotace keytabu — nestrukturované logování obcházející pipeline — Chyby rotace keytabu byly emitovány přes legacy balíček
log, který obchází strukturovaný logovací pipeline a ztrácí kontextová pole požadavku. Všechna volání logů vkeytab_rotation_executor.gojsou nyní směrována přesslog. - CA účty —
ca_authority_idneuložen při aktualizaci —UpdateCAAccounttiše zahazovalca_authority_idpři aktualizaci existujícího CA účtu, protože pole chybělo v mapěUpdatespro GORM. Pole je nyní zahrnuto a pokryto novým testem. - Drift schématu CRL / revokace — OCSP vrací 500 — Tabulky
revocation_entriesacertificate_revocation_listsbyly vytvořeny migrací000005s legádními názvy sloupců (reason_code,crl_pem), které se odchylují od aktuálních názvů polí GORM modelu (revocation_reason,raw_content). GORM přidávádeleted_at IS NULLke každému dotazu; protožedeleted_atv produkčním schématu chyběl, vracel celý subsystém CRL/OCSP chybySQLSTATE 42703. Migrace000173přidává všechny chybějící sloupce idempotentně pomocíADD COLUMN IF NOT EXISTSa doplní hodnoty z legádních sloupců.
Vylepšení¶
- Spuštění rotace — tělo požadavku volitelné — Endpointy spouštění rotace nyní přijímají požadavky s prázdným nebo chybějícím tělem;
reasonse v takovém případě nastaví na"manual". - CA Interní — podepisování OCSP přes HSM odloženo s explicitní dokumentací — Podepisování OCSP odpovědí přes HSM je explicitně odloženo; kódová cesta nyní obsahuje jasně označený komentář odložení a mezitím vrací odpověď podepsanou softwarově.
- Feature flags — zpříbnění režimu gateway a validace licence —
features.gozpřesňuje logiku vyhodnocovánígateway_modea funkcí chráněných licencí, eliminuje třídu falešně pozitivních výsledkůenabledpři částečně zpracovaném payloadu licence. - SRP — dokumentace pořadí kroků MFA — Tok ověřování SRP nyní obsahuje explicitní komentář dokumentující řazení kroků MFA a zdůvodnění aktuálního pořadí TOTP/záložních kódů.
- Průvodce pojmenováním secretů — kontext autentizace pro správu tokenů —
SecretNamingPolicyWizardnyní předává kontext autentizovaného uživatele voláním správy tokenů, čímž opravuje potenciálně neautentizovanou cestu volání v procesu ukládání průvodce.
Databázové migrace¶
000173_fix_revocation_crl_schema_drift— Přidává chybějící sloupce dorevocation_entries(crl_id,revocation_reason,updated_at,deleted_at) acertificate_revocation_lists(raw_content,updated_at,deleted_at). Doplní hodnoty z legádních sloupcůreason_codeacrl_pem. Plně idempotentní.
Verze 1.0.52¶
Datum vydání: 2026-06-23
Opravy chyb¶
- Schéma Renewal Policy — chybějící sloupce
key_reuse_enabledavalidity_duration— Tabulkacertificate_renewal_policiesbyla vytvořena migrací000010se sloupcemreuse_private_key; Go model byl následně přejmenován nakey_reuse_enabledbez doprovodné migrace, čímž každý zápis dotýkající se tohoto pole selhal na databázové vrstvě. Migrace000172přidávákey_reuse_enabled BOOLEAN NOT NULL DEFAULT FALSE(s doplněním hodnot z legacy sloupcereuse_private_key) avalidity_duration INT NOT NULL DEFAULT 0. Stejná migrace převádínotify_emailsz JSONB na TEXT pomocí třífázového přístupu (přidání TEXT staging sloupce → UPDATE přes set-returning funkci → drop JSONB sloupce → přejmenování), čímž obchází omezení PostgreSQL, které zakazuje subquery uvnitřALTER COLUMN TYPE … USING. - Fronta obnov — sloupec
certificates.organization_idneexistuje —GetRenewalQueuefiltrovalWHERE certificates.organization_id = ?, ale tabulkacertificatesobsahuje pouzeproject_id; organizaci lze dosáhnout přescertificates.project_id → projects.organization_id. Služba nyní provádí druhý JOIN (JOIN projects ON projects.id = certificates.project_id) a filtruje podleprojects.organization_id. - SDK a Terraform Provider — sémantická neshoda
notify_days_before []int— Go SDK (sdks/go/models.go) a Terraform provider (internal/resources/renewal_policy.go) deklarovaly polenotify_days_before []int, které v backendu nikdy neexistovalo. Backend ukládá prostý čárkami oddělený řetězec pod klíčemnotify_emails. Obě komponenty byly přepsány nanotify_emails stringa byla přidána dvě nová polekey_reuse_enabledavalidity_durationpro sladění s živým API kontraktem. Acceptance testy blokované pomocít.Skipz důvodu těchto nedostatků jsou nyní aktivní.
Databázové migrace¶
000172_fix_certificate_renewal_policy_schema— Přidávákey_reuse_enabled BOOLEAN NOT NULL DEFAULT FALSE(doplněno zreuse_private_key),validity_duration INT NOT NULL DEFAULT 0a převádínotify_emailsJSONB → TEXT v tabulcecertificate_renewal_policies.
Verze 1.0.51¶
Datum vydání: 2026-06-22
Nové funkce¶
- Potvrzení selhání rotace (Acknowledge Rotation Failure) — Operátoři nyní mohou trvale odložit (dismiss) prověřené selhání rotace z dashboardu Rotation Problems bez smazání záznamu spuštění. Nový endpoint
POST /api/v1/dashboard/rotation/failures/{id}/acknowledge(RBAC:dashboard:write) zapíšeacknowledged_ataacknowledged_bydo řádku spuštění. Dashboard dotaz filtruje potvrzené řádky a udržuje tak přehled zaměřený na položky stále vyžadující pozornost. Uživatelské rozhraní zpřístupňuje akci „Označit jako prověřeno" v panelu detailu selhání. - Watchdog pro zaseknuté Entra přihlašovací údaje — Nový background watchdog (
RecoverStuckEntraCredentials) běží každých 5 minut a resetuje Entra přihlašovací údaje zaseknuté ve stavurotatingnebopending_verificationdéle než 30 minut. Zabraňuje nekonečným stálům způsobeným restartem backendu nebo zrušením goroutiny uprostřed rotace. Každé zotavení zapíšestuck_watchdog_recovered_atdo záznamu přihlašovacích údajů pro auditní sledovatelnost. - Stav Entra přihlašovacích údajů —
pending_verification— Constraintentra_credentials_status_checkbyl rozšířen o hodnotupending_verification, kterou zapisujeRotateCredentialWithRequestpo každé rotaci, jsou-li nakonfigurované downstream propagační cíle. Bez tohoto rozšíření by jakákoli rotace s propagací produkovala porušení constraintu a zanechávala by přihlašovací údaje v nekonzistentním stavu. - CA účet — počet přiřazených certifikátů — Odpovědi pro seznam a detail CA účtu nyní obsahují
assigned_certificates_count, tedy počet aktivních certifikátů vydaných přes šablony certifikátů svázané s daným CA účtem. Operátoři tak okamžitě vidí aktivní záběr CA účtu bez dalšího dotazu. - Terraform Provider — User, User Role, Keytab, Project Settings, Shared Secret — Pět nových Terraform zdrojů doplňuje pokrytí providera o správu uživatelů a konfigurace projektů:
mazevault_user(CRUD platformních uživatelů),mazevault_user_role(přiřazení rolí uživatelům v organizaci),mazevault_keytab(správa Kerberos keytab souborů připojených k projektu),mazevault_project_settings(projektová konfigurační nastavení) amazevault_shared_secret(secrets sdílené napříč více projekty).
Vylepšení¶
- Rotation Problems — filtr potvrzených selhání — Stránka Rotation Problems a služba platformního přehledu nyní vylučují potvrzená spuštění z počtů selhání a seznamů, a to s využitím partial indexu
idx_rotation_executions_unacknowledgedzavedého migrací000170.
Databázové migrace¶
000169_entra_credentials_status_pending_verification— Rozšiřuje constraintentra_credentials_status_checko hodnotupending_verification.000170_rotation_execution_acknowledgement— Přidáváacknowledged_at TIMESTAMPTZaacknowledged_by UUID REFERENCES usersdorotation_executions. Obsahuje partial indexidx_rotation_executions_unacknowledgedpokrývající pouze nepotvrzené řádky.000171_entra_credential_stuck_watchdog— Přidávástuck_watchdog_recovered_at TIMESTAMPTZdoentra_credentials. Přidává partial indexidx_entra_creds_stuck_watchdogpřes(lifecycle_state, updated_at)pro dva in-flight stavy.
Verze 1.0.50¶
Datum vydání: 2026-06-21
Nové funkce¶
- Šablony konfigurace rotace (Rotation Config Templates) — Nový katalog v rozsahu organizace umožňuje operátorům evidovat opakovaně použitelná nastavení rotace (interval, lead days, retention window, max. počet opakování, timeout). Spravuje se přes pět API endpointů
GET|POST /api/v1/rotation/templatesaGET|PUT|DELETE /api/v1/rotation/templates/{id}s RBAC (rotation:read/rotation:write). Nový Terraform zdrojmazevault_rotation_templateumožňuje správu katalogu přes IaC. Šablony se na konfigurace rotace automaticky neaplikují. Frontend zpřístupňuje plnou CRUD stránku na/rotation/templates. Migrace000168přidává tabulkurotation_config_templatesa cizí klíčtemplate_idnarotation_configs. - Sync Rule — obousměrný režim a strategie konfliktu —
SyncRuleModalnyní zobrazuje konfigurovatelný směr synchronizace (pull/push/bidirectional) a synchronizační režim (incremental/full_sync). Oba atributy jsou persistovány na straně serveru a zdokumentovány v novém Terraform zdrojimazevault_sync_rule. Operace pull-sync nyní zapisujílast_pulled_at,link_purposeaexternal_secret_pathdosecret_integration_links(migrace000167), čímž umožňují zobrazení stavového odznakusynced_from_externalu secrets vytažených z externího poskytovatele. - Dry-run pro rotaci certifikátů — Záložka Rotace certifikátů nyní obsahuje tlačítko „Dry Run" vedle existující akce „Trigger Rotation Now". Dry-run provede kompletní validaci workflow rotace — včetně preflight post-rotačních akcí a gateway probing — bez potvrzení jakýchkoli změn. Příznak
dry_runje propagován end-to-end přes API a všechny kroky rotace. - Post-rotační akce — přímé napojení na gateway a přepsání prostředí —
PostRotationActionnyní přijímá volitelné polegateway_id, které připne akci na konkrétní gateway a obchází routing na základě prostředí. Doprovodné poletarget_environmentpřepisuje kontext prostředí při rozlišování cílové gateway. Obě pole jsou dostupná v Go SDK (PostRotationActionWF) i v Terraform zdrojimazevault_rotation_workflow. - Terraform Provider — Sync Rules a Rotation Templates — Dva nové Terraform zdroje pokrývají kompletní životní cyklus create/read/update/delete:
mazevault_sync_rule(směr synchronizace, strategie konfliktu, transformace klíče, prefix cesty) amazevault_rotation_template(interval, lead days, retence, politika opakování). Oba jsou registrovány v provideru a zdokumentovány vdocs/resources/. - Rotation Problems — detail zobrazení selhání — Stránka Rotation Problems nyní zobrazuje detailní tabulku neúspěšných spuštění s drill-down na jednotlivé zdroje, koláčový graf rozložení podle druhu zdroje a přehled chybějících secrets. Navigace v postranním panelu zvýrazňuje sekci ikonou varování.
Vylepšení¶
- Distribuovaný synchronizační semafor přes Redis —
SyncRuleServicenyní používá distribuovaný zámek podporovaný Redis (SET NX PX) prostřednictvím nového páruTryAcquireLock/ReleaseLocknaCacheService. Pokud Redis není dostupný, služba přejde na in-process zámek pomocísync.Map. Tím se zabraňuje duplicitním souběžným synchronizacím pro stejné pravidlo v deploymentech s více replikami. - Dry-run guard ve všech krocích rotace — Všech sedm vestavěných kroků rotace (generátor hesel, Azure Key Vault, Spring Actuator, agent command, shell script, IIS recycle, Kubernetes secret) nyní kontroluje příznak
dry_runpřed jakýmkoli mutujícím externím voláním a místo toho vrátí náhledový výsledek. - Rozšířený rozsah validace připojení — Krok rotace
connection_validationbyl rozšířen na pokrytí typů providerů mimo databáze (Azure Key Vault, Kubernetes, LDAP, GitHub, GitLab, generický webhook), čímž jsou zajištěny pre-execution kontroly konektivity i pro secrets napojené na tyto integrace. - Guard pro secrets s
names_onlystorage mode — Orchestrátor rotace nyní odmítá požadavky na rotaci secrets sstorage_mode = names_onlys jasnou chybovou zprávou, čímž zabraňuje zavádějícím záznamům o spuštění pro secrets, jejichž životní cyklus hodnoty je zcela řízen externím poskytovatelem. - Stav synchronizace secretu — indikátor
synced_from_external—GetSecretSyncStatusnyní vracísynced_from_external, pokud byl secret úspěšně vytažen z externího poskytovatele. Záložka Secrets zobrazuje tuto informaci jako informační odznak „Synced from KV". - Compliance report — statistiky pokrytí nasazení a synchronizace —
PasswordPolicyStatsje rozšířen o čítačesecrets_with_deployment_target,secrets_with_external_syncasecrets_with_template. Compliance report service je shromažďuje v jediném dalším DB průchodu. - Gateway Task Service — přímé připnutí na gateway ID —
GatewayTaskService.CreateTasknyní přijímá volitelnýGatewayID, který při nastavení zcela přeskočí vyhledávání v routing service a odešle úlohu přímo na pojmenovanou gateway. Tím jsou podpořeny připnuté post-rotační akce bez nejednoznačnosti routingu. - Čitelnost kódu — Pole struct interních služeb a modelů byla přeformátována pro konzistenci. Parametry
resolveRotationResourceIncidentTargetbyly zjednodušeny odstraněním redundantních mezilehlých proměnných.
Opravy chyb¶
- Dashboard Dismiss — TypeScript zúžení typů — Obslužná rutina dismiss pro položky akciovatelných rotací nyní správně zužuje
item.statusz'overdue' | 'failed' | 'running'na serverem přijímaný union'overdue' | 'failed'před odesláním požadavku, čímž opravuje TypeScript chybu kompilace, která se objevila po přidání'running'do typového výčtu stavů položky. - Chybějící routes pro Rotation Templates po refaktoru — Pět registrací routes
/api/v1/rotation/templatesbylo neúmyslně odstraněno při průchodu formátováním kódu. Všech pět routes bylo obnoveno s RBAC middleware (rotation:read/rotation:write). - Swagger path drift pro Rotation Templates — Swagger anotace
@Routervhandlers_rotation_templates.gonesprávně používaly/rotation-templatesmísto skutečné gin cesty/rotation/templates. Všech pět anotací bylo opraveno a OpenAPI spec byl vygenerován znovu. - Chybějící audit logging pro operace se Secret Links — Handlery
CreateSecretLinkaDeleteSecretLinknyní emitují záznamy auditního loguSECRET_LINK_CREATEDaSECRET_LINK_DELETEDse správným typem zdroje, ID a IP volajícího.
Databázové migrace¶
000167_secret_integration_links_pull_tracking— Přidává sloupcelast_pulled_at TIMESTAMPTZ,link_purpose VARCHAR(64)aexternal_secret_path VARCHAR(512)dosecret_integration_links. Obsahuje unikátní constraintuq_sil_secret_integrationa partial index pro aktivní linky.000168_rotation_config_templates— Přidává tabulkurotation_config_templatess kompletními CRUD sloupci (název, popis, org scope, výchozí příznak, interval rotace, lead days, retention days, politika opakování, timeout). Přidávátemplate_id UUID REFERENCES rotation_config_templatesdorotation_configs.
Verze 1.0.49¶
Datum vydání: 2026-06-20
Nové funkce¶
- Panel akciovatelných rotací na dashboardu — Přehledový dashboard nyní obsahuje vyhrazený panel „Rotation operations", který zobrazuje rotační zdroje po splatnosti nebo ve stavu selhání vyžadující okamžitou pozornost. Každá položka ukazuje druh, projekt a stavový odznak a podporuje jednoklikové odložení (Dismiss) s auditní poznámkou. Zobrazuje se nejvýše pět položek, seřazených podle stáří (po splatnosti) a aktuálnosti (selhání).
- Expirující certifikáty na dashboardu — filtr 30 dnů — Sekce „Direct actions" na přehledovém dashboardu nyní filtruje expirující certifikáty na příštích 30 dní, čímž je seznam okamžitě akciovatelný místo zobrazení všech budoucích expirací. Sekce se nyní jmenuje „Expiring certificates (next 30 days)". Endpoint
GET /api/v1/dashboard/certificates/expiringpřijímá nový volitelný parametrdays(1–3650) pro omezení rozsahu; vynechání parametru vrátí všechny budoucí expirace (zpětně kompatibilní). - Entra — staged rotace a dry-run — Rotace Entra přihlašovacích údajů nyní podporuje staged rotaci (
staged_rotation_enabled) s konfigurovatelným soak window (soak_window_hours). Obě pole jsou persistována v metadatech rotačního zdroje a správně se přenášejí při GET/PUT cyklu rotační konfigurace. Dry-run cesta validuje workflow rotace vůči živému Entra tenantu bez aplikace jakýchkoli změn. - Entra integrace — Instance ID a verzování protokolu — Entra integrace nyní nesou identifikátor instance a pole verze protokolu, umožňující přesnější cílení a budoucí kompatibilitu ve scénářích s více tenanty a delegovanou orchestrací.
- Rotation scheduler — obnova zaseknutých položek — Rotation scheduler nyní detekuje zdroje zaseknuté ve stavu „running" nebo „approval-pending" po překročení konfigurovatelného limitu a resetuje je do znovu spustitelného stavu, čímž zabraňuje tichým nekonečným stálům. Orchestrace obnovení rovněž získala explicitní koordinační logiku pro zdroje procházející oknem obnovení.
- Rotace certifikátů — výpočet příštího data splatnosti — Logika výpočtu data splatnosti rotace certifikátů je nyní pokryta dedikovanými unit testy. Příští datum splatnosti je počítáno z efektivní politiky lead days napříč vrstvami certifikátu, šablony a CA účtu, čímž je zajištěno konzistentní chování okna obnovení.
Vylepšení¶
- Odolnost načítání dat dashboardu — Načítání dat dashboardu nyní používá
Promise.allSettledmístoPromise.all. Selhání jednotlivých widgetů (síťová chyba, 401, 404) již nezahazují data ze všech ostatních widgetů. Každé selhání je logováno přes strukturovaný logger pro observabilitu. - RBAC oprávnění pro rotační endpointy — Oprávnění pro čtení a zápis rotačních zdrojů jsou nyní konzistentně aplikována na všech nových dashboard a rotačních endpointech, včetně filtrování archivovaných zdrojů v dotazech servisní vrstvy.
- Dashboard — vyloučení archivovaných zdrojů — Dotazy platformního přehledu rotací a akciovatelných rotací nyní explicitně vylučují archivované zdroje, čímž se brání nafukování počtů po splatnosti nebo ve stavu selhání historickými daty.
Opravy chyb¶
- Editace Entra rotační konfigurace — regrese zakázaného stavu — Editace existující rotační konfigurace Entra přihlašovacích údajů již nezobrazuje všechna pole jako zakázaná pro ne-primární přihlašovací údaje. GET odpověď nyní vrací
rotation_enabledz uložené uživatelské preference (metadata.rotation_enabled) namísto ze scheduler gate (resource.Enabled = RotationEnabled && IsPrimary), která byla vždyfalsepro ne-primární přihlašovací údaje. - Entra rotační konfigurace — staged pole se neobnovovala při editaci —
staged_rotation_enabledasoak_window_hoursjsou nyní zahrnuty v metadatech projektoru rotačního zdroje a jsou proto správně obnoveny při otevření existující rotační konfigurace pro editaci. - Entra scope binding — Tenant ID není povinné — Vytvoření Entra scope bindingu již nevyžaduje
tenant_id, pokud integrace používá autentizaci managed identity. Backend validace i frontend průvodce byly aktualizovány tak, abytenant_idbylo pro managed identity flow volitelné.
Infrastruktura¶
- Step-CA network policy — Přidáno pravidlo network policy umožňující příchozí provoz na Step-CA na portu 9000 z interního clusteru, čímž se odblokují ACME issuance flow na stagingu routované přes interní Step-CA provisioner.
Verze 1.0.48¶
Datum vydání: 2026-06-16
Nové funkce¶
- Domain Control Validation (DCV) pro objednávky externích CA — Poskytovatelé externích CA (DigiCert CertCentral v2, SSLMarket), kteří vyžadují doklad vlastnictví domény před vydáním certifikátu, nyní mají plnou podporu životního cyklu DCV. Nová tabulka
certificate_dcv_tokens(migrace 000166) ukládá ověřovací tokeny pro každou doménu. Backend automaticky načítá tokeny po odeslání objednávky, přepne položku ve frontě obnovení do stavupending_dcva provádí polling každých 5 minut. Frontend komponentaDCVStatusPanelzobrazuje detaily výzvy pro každou doménu (název/hodnota DNS TXT záznamu, cesta/obsah HTTP souboru nebo e-mail schvalovatele) s tlačítky pro kopírování do schránky, indikátorem průběhu a ručním spuštěním ověření. Nové API endpointyGET /api/v1/renewal-queue/{id}/dcvaPOST /api/v1/renewal-queue/{id}/dcv/retryzpřístupňují stav DCV s RBAC (certificate:read/certificate:write). - ADCS čekající na schválení — neblokující DCOM odeslání — Metoda ADCS DCOM již neblokuje goroutinu HTTP handleru smyčkou 5 × 5 s opakovaných pokusů, pokud správce CA ještě neschválil požadavek (stav ADCS 5). Nyní okamžitě vrátí
ErrADCSPendingApproval; stávající background jobADCSApprovalPollerzajistí asynchronní načtení certifikátu po schválení. - Možnosti kompatibilního profilu PFX — Export certifikátu do PFX nyní podporuje výběr kompatibilního profilu (
legacy/modern), který řídí šifrovací a MAC algoritmy použité v PKCS#12 kontejneru.legacycílí na OpenSSL 1.x, nástroje Java KeyStore a starší Windows endpointy;moderncílí na OpenSSL 3.x, .NET 6+ a aktuální Go runtime. - Žádost o certifikát — rozšířená pole Subject DN — Modal Žádost o certifikát nyní nabízí volitelná pole Subject DN: Organizace (O), Organizační jednotka (OU), Lokalita (L), Stát/Provincie (ST) a Země (C). Vyplněné hodnoty jsou odeslány jako strukturovaný objekt
requested_subjectv payload CSR požadavku. - Žádost o certifikát — přepis algoritmu klíče — Pro páry klíčů generované MazeVault mohou operátoři nyní přepsat algoritmus klíče (RSA, ECDSA, Ed25519) a velikost klíče přímo v modalu Žádost o certifikát. Výběr je odeslán jako
requested_key_algorithmarequested_key_sizev payload CSR.
Vylepšení¶
- Redakce logů — zachování původní URL požadavku — Middleware redakce logů nyní uchovává původní
RequestURIv Gin kontextu před jakýmkoli přepisováním nebo normalizací cesty. Tím se zajistí, že auditní a strukturované log záznamy odráží URL, kterou klient skutečně odeslal, nikoli artefakt po-zpracování. Regresní test pokrývá kontrakt zachování URL. - Stahování binárních souborů — ArrayBuffer a odložené odvolání URL — Stahování certifikátů a binárních souborů agentů nyní používá typ odpovědi
arraybuffera oddaluje odvolání object URL dokud stahování není spolehlivě doručeno do prohlížeče, čímž se eliminuje race condition na pomalých připojeních, kde odvolání proběhlo dříve než dokončení stahování.
Aktualizace závislostí¶
- form-data a hasown — Aktualizovány balíčky
form-dataahasownna nejnovější patch vydání, řeší drobná upozornění na kompatibilitu s aktuálními verzemi Node.js runtime.
Verze 1.0.47¶
Datum vydání: 2026-06-14
Nové funkce¶
- Sdílené Entra rollout akce a readiness kontroly — Rotace Entra přihlašovacích údajů nyní podporuje seřazené rollout akce nad sdílenou rotační platformou, včetně Azure Key Vault, Kubernetes Secretů, agentem spravovaných runtime souborů, Spring refresh a webhook doručení a recycle IIS app poolu na Windows cílech. Dry-run a preflight kontroly validují stejné runtime cesty ještě před produkčním execution.
- Per-certifikátová politika obnovy klíče — Operátoři nyní mohou pro každý certifikát určit, zda obnova vygeneruje nový privátní klíč, nebo pokud to provider a custody cesta dovolí, znovu použije stávající klíčový materiál. Pořadí zpracování rotačních cílů je nově zachováno explicitně v renewal workflow.
- Silnější validace autentizační konfigurace Entra integrace — Integration Wizard i backend nyní společně validují interaktivní a background Entra autentizační nastavení, takže už nelze uložit konfiguraci, která by nefungovala pro background sync, dry-run nebo post-rotation execution.
Vylepšení¶
- Sjednocený pohled na readiness v Project Rotations — Pohled Project Rotations nyní zobrazuje inline readiness a preflight stav pro Entra přihlašovací údaje, zdroje obnovy certifikátů i deployment zdroje certifikátů, včetně čitelnějšího surfacování stavů
manual review requiredu rollout cílů, které nelze ověřit automaticky. - Sladění rolí a kontraktů pro rotační operace — RBAC migrace a permission kontroly na projektových surface byly sladěny s rozšířenými rotačními a konfiguračními workflow, takže se snižuje počet situací, kdy operátor otevře obrazovku bez oprávnění potřebných k dokončení akce.
- Obnova Swaggeru a provozních signálů — Generovaný Swagger nyní odráží rozšířenou slovní zásobu severity stavů a lepší práci s host konfigurací, zatímco kontroly zdraví certifikátů a databáze vracejí přesnější diagnostiku pro rotation readiness a exportní cesty.
- Obnovený kontrakt Secret Rotation API — Secret rotation API i generovaný Swagger nyní přesněji popisují explicitní lifecycle create/edit/delete, včetně perzistence post-rotation akcí a čisté reset cesty po odstranění rotace secretu.
Opravy chyb¶
- Konzistentní cleanup Entra lifecycle záznamů — Smazání Entra integrace nebo lokálně spravované registrace aplikace nyní ve stejné lifecycle operaci odstraní i související rotační zdroje Entra přihlašovacích údajů. Upgrade migrace
000155navíc odstraňuje historické osiřelé řádky a repository čtení obranně skrývá zastaraléentra_credentialzáznamy, které cleanup předcházely. - Výchozí chování rotace certifikátů po importu — Pokud je importovaný certifikát způsobilý pro spravovanou obnovu, MazeVault nyní připraví rotační konfiguraci bez tichého zapnutí automatizace. Počáteční lead days se navíc určují z efektivní politiky certifikátu, šablony a CA účtu místo přepsání modelovým defaultem.
- Robustnější validace rolloutu a exportu — Validace kroků s
agent_idversus přímýmagent_urlje přísnější a exporty certifikátů nyní vracejí čitelnější chyby pro PFX a soukromé klíče místo částečně maskovaných selhání. - Mazání a znovuvytvoření secret rotace — Smazání secret rotace nyní odstraní rotační konfiguraci, kanonický secret rotation resource i navázané rotační integrace, aniž by smazalo samotný secret. Po smazání zobrazují secretové status surface stav
Rotation not configureda opětovné otevření modalu zůstává v create režimu, dokud operátor explicitně neuloží novou konfiguraci.
Verze 1.0.46¶
Datum vydání: 2026-06-09
Nové funkce¶
- Základ pro External CA Order Poller — MazeVault přidal background polling pro externě vydávané objednávky certifikátů, takže asynchronní workflow třetích stran mohou dokončit issuance a propsat změnu do životního cyklu certifikátu bez ručního sledování.
Poznámky¶
- Upřesnění release notes — Entra rotation rollout, sjednocení UI rotace certifikátů a související readiness a preflight práce, které byly dříve rozepsané pod
v1.0.46, byly dokončeny až po tagu a jsou proto zdokumentovány podv1.0.47.
Verze 1.0.45¶
Datum vydání: 2026-06-09
Nové funkce¶
- Registr rotačních zdrojů a rozšíření platformního vlastnictví — Rotační platforma se rozšiřuje z certifikátové orchestrace na model zdrojů postavený nad registry. Nové control-plane služby zavádějí druhy zdrojů, registry cílů a sdílené vlastnictví plánování rotací, takže budoucí rotace secrets, certifikátů i Entra přihlašovacích údajů budou stát na stejných platformních primitivech.
- Discovery policy bundle pro agenty a perzistentní index konfigurací — Agenti nyní dostávají discovery policy bundle generovaný backendem z aktivních konfiguračních šablon. Filesystem discovery ukládá lokální metadata index a znovu používá kešované nálezy konfigurací i certifikátů mezi běhy, aniž by se ztrácela autorita změn politik.
- Odesílání výsledků konfigurační discovery — Agenti nyní umí odesílat výsledky discovery konfigurací zpět do backendu včetně klasifikace a metadat rewrite plánu s využitím stávajícího modelu discovery výsledků.
- Deduplikace kódů certifikátových šablon a řešení konfliktů — Správa certifikátových šablon na úrovni organizace nyní deduplikuje kódy šablon a blokuje nejednoznačné konflikty. Migrační krok zároveň normalizuje existující duplicity, aby routování šablon a issuance zůstaly deterministické.
- Klasifikace systémových certifikátů — Certifikáty nyní nesou příznak
is_systempro interní mTLS a identity-management materiál. MazeVault tyto certifikáty může nadále používat interně, aniž by se míchaly do běžného operátorského inventáře. - Integrační skupiny — Projekty nyní podporují pojmenované integrační skupiny mapující logická seskupení na integrační cíle se strukturovanou JSONB konfigurací. Skupiny lze vytvářet, prohlížet, aktualizovat a mazat prostřednictvím nových API endpointů
/api/v1/projects/{id}/integration-groupsa/api/v1/integration-groups/{id}(migrace 000152). - Reálné Slack notifikace incidentů — Správa incidentů nyní odesílá real-time Slack notifikace prostřednictvím nakonfigurovaného Incoming Webhooku. Při vzniku incidentu u projektu s aktivní Slack integrací platforma odešle typ incidentu a název zdroje do nakonfigurovaného kanálu.
- Testy konektivity GCP Secret Manager a Kubernetes — Kontroly zdraví integrace nyní ověřují živé připojení k GCP Secret Manager API (výpis secrets v daném projektu) a dosažitelnost Kubernetes API serveru pomocí in-cluster nebo kubeconfig přihlašovacích údajů, doplňují tak stávající testy providerů.
- Operace s klíči HSM — HSM provideři (PKCS#11, AWS CloudHSM, GCP Cloud HSM, Azure Managed HSM) nyní poskytují úplné lifecycle operace s klíči:
GetPublicKey(rekonstruuje RSA/EC PKIX DER z hardware),DeleteKey(zničí všechny objekty klíče na zařízení),ListKeys(výpis všech spravovaných key handle) aGetKeyInfo(vrací typ, velikost a příznak exportovatelnosti klíče). - Vault PKI – úplný lifecycle — HashiCorp Vault CA provider nyní implementuje kompletní CA rozhraní:
RenewCertificate,GetCertificateStatus(kontrola časového razítka revokace),ListIssuedCertificates(výpis přes PKI list endpoint),GetOrderStatusaCancelOrder(revokuje podkladový certifikát). - ADCS – načtení odloženě vydaného certifikátu — ADCS (WCCE) provider nyní načítá certifikáty vydané CA asynchronně prostřednictvím SOAP Renew požadavku. Dříve nevyřízené certifikáty jsou po dokončení issuance načteny a vráceny ve formátu PEM.
- Venafi VaaS – úplný lifecycle — Venafi CA provider nyní implementuje
RenewCertificate,GetOrderStatus(načítá stav pick-up z VaaS) aCancelOrder. - Hlášení rate limitů DigiCert — Provider DigiCert nyní dotazuje živé rate limit hlavičky (
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset) a zpřístupňuje je přes rozhraníGetRateLimits. - Injekce konfigurací s živými hodnotami secretů — Verzování konfigurací nyní při vytváření snapshotu nahrazuje tokeny
${VAULT:<placeholder>}skutečnými hodnotami MazeVault secretů, takže injektované konfigurační soubory obsahují reálné přihlašovací údaje, aniž by byly ukládány do historie verzí konfigurace.
Vylepšení¶
- Projektově vázané politiky viditelnosti zdrojů — Azure discovery endpointy nyní aplikují filtrování
resource_visibility_policyv kontextu vybraného projektu. Výběr v Integration Wizardu tak odpovídá scope projektu i pro ne-admin operátory. - Auditovatelnost správy konfigurace — Workflow správy konfigurace nyní zaznamenávají auditovatelné aktivity rewrite plánů, takže provozní změny jsou dohledatelné stejně jako ostatní lifecycle události platformy.
- Metadata generovaného CSR a custody klíče — Certificate request flow nyní nese metadata o generovaném CSR a custody soukromého klíče dál do dalších lifecycle kroků, takže je zřejmé, zda MazeVault klíč vlastní, znovu používá, nebo musí zachovat externí správu.
- Delegovaný krok synchronizace secretu přes agenta — Rotační a execution pipeline nyní mají explicitní krok synchronizace secretu přes agenta, což zlepšuje soulad mezi platformní orchestrací a tím, co agent skutečně aplikuje na cílových systémech.
- Navigace certifikátů na vlastnické surface — Odkazy na certifikáty z hlavního dashboardu, projektových rotací i certifikátového inventáře nyní vedou přímo na vlastnickou surface. Projektové certifikáty otevírají detail v projektu, zatímco nezařazený inventář otevírá Discovered Certificates přes lookup podle
managed_certificate_id, čímž se nahrazuje duplicitní legacy flow/certificates. - Konzistence dat na Secrets Dashboardu — Záložka Secrets Overview nyní používá sdílené dashboard API, znovu zpřístupňuje drill-in pro chybějící secrets a drží overview počty i dešifrované názvy v souladu s hlavní dashboard datovou vrstvou.
- Filtr lookupu objevených certifikátů — Discovery API a generovaná Swagger dokumentace nyní podporují filtrování podle
managed_certificate_id, což umožňuje cílené deep linky z certifikátových přehledů na odpovídající discovered certificate záznam.
Opravy chyb¶
- Převzetí vlastnictví plánování rotací — Scheduling obnov se přesouvá pod sdílený model platformního vlastníka rotací, aby navazující workflow pracovaly s aktuálním certifikátovým zdrojem místo zastaralých anchorů před obnovou.
- Konzistence project contextu v discovery — Integration discovery helpery nyní konzistentně předávají project context, čímž mizí prázdné nebo příliš široké Azure discovery výsledky při zapnutém filtrování viditelnosti zdrojů.
- Autentizace Detect Drift —
POST /api/v1/secrets/drift/detectse nyní vykonává uvnitř autentizované secrets route group, což opravuje 401 chyby způsobené chybějícím auth kontextem při detekci driftu. - Regrese dashboard drill-in odkazů — Opraveny zastaralé odkazy na certifikáty mířící na odstraněnou globální stránku certifikátů a obnoveny odkazy na chybějící secrets v Secrets Dashboard overview.
Verze 1.0.44¶
Datum vydání: 2026-05-25
Nové funkce¶
- Post-akce po rotaci certifikátu — Rotace certifikátů nyní podporuje explicitní řetězení post-rotation akcí včetně webhooků a dalších registrovaných post-processing kroků, takže po úspěšné obnově nebo deploymentu lze spustit navazující refresh a rollout workflow.
- Delegovaná obnova a publish kontroly rotace — Orchestrace obnov získala delegované execution cesty, runtime probe validace a publish-gate ochrany, které lépe oddělují readiness validaci od side-effecting deployment práce.
- Lifecycle enforcement Archive Centeru — Obnova z archivu a permanentní mazání jsou nyní chápány jako centralizované archive-lifecycle operace s admin-only vynucením v runtime RBAC i při editaci rolí.
- Rozšířené pokrytí binárek agentů — Distribuce MazeVault agentů nyní zahrnuje širší ARM64 pokrytí a silnější build validaci pro heterogenní Windows i Linux prostředí.
Vylepšení¶
- Sledování key custody u objevených certifikátů — Adoptované discovered certifikáty nyní zachovávají explicitní stav key custody, takže MazeVault tiše nepřebírá vlastnictví privátních klíčů během obnovy nebo deploymentu.
- Vyšší robustnost issuance a renewal certifikátů — Flows vydávání certifikátů, zpracování CSR a obnov nyní používají silnější locking, normalizované post-action payloady a jasnější actor attribution napříč cross-project secret operacemi.
- Širší pokrytí providerů pro CA účty — Správa CA účtů a EAB přihlašovacích údajů nyní pokrývá více inicializačních cest providerů včetně Smallstep fallback polí používaných při zakládání a validaci účtu.
Opravy chyb¶
- Inicializace Smallstep CA účtu — Vytváření Smallstep CA účtu nyní správně fallbackuje na credential pole jako
server_urla metadata provisioneru místo selhání ještě před kontaktem s CA. - Sladění kontraktu rotačních akcí — Certificate post-action handling nyní nabízí jen typy akcí podporované certificate rotation executorem, takže se v UI neobjevují neplatné volby a nesoulad názvů kroků.
Verze 1.0.43¶
Datum vydání: 2026-05-11
Nové funkce¶
- Podpora Managed Identity pro Azure Key Vault — Integrace Azure Key Vault nyní podporují Managed Identity a Workload Identity jako způsob autentizace vedle Service Principal. Při výběru Azure Key Vault v průvodci integrací se metoda autentizace pro synchronizaci na pozadí automaticky nastaví na
managed_identity. Konkrétní klientské ID managed identity nastavte přesAZURE_MANAGED_IDENTITY_CLIENT_ID, nebo proměnnou ponechte prázdnou — platforma identitu rozpozná z prostředí (AZURE_FEDERATED_TOKEN_FILE+AZURE_CLIENT_ID+AZURE_TENANT_IDpro workload identity). - Instalace agenta jako systemd služba — Instalační skript agenta nyní nasazuje MazeVault agenta jako správnou systemd službu. Automaticky se vytvoří dedikovaný systémový uživatel
mazevault-agenta adresáře se omezujícími oprávněními (/etc/mazevault,/var/lib/mazevault,/var/log/mazevault) s vlastnictvím a právy0750. Služba je nakonfigurována s automatickým restartováním při selhání. Stávající nasazení by měla znovu spustit deployment skript pro získání aktualizované service unit. - Endpoint pro stažení binárního souboru agenta — Nový endpoint vázaný na deployment
GET /deployments/:id/agent-binaryobsluhuje binární soubor agenta pro dané nasazení. UUID deploymentu slouží jako autentizační token (náhodný 128-bitový identifikátor, který nelze uhodnout), shodně s endpointy/scripta/config. Starší pravidla přepisu pro stahování agenta v reverzní proxy byla odstraněna. - Podpora více endpointů Redis — Správa Redis připojení nyní podporuje konfiguraci více adres endpointů pro nasazení s vysokou dostupností a záložním přepínáním. Primární endpoint se konfiguruje přes
REDIS_URL, záložní adresy přesREDIS_FALLBACK_URLS(oddělené čárkou, středníkem nebo novým řádkem). Klient automaticky přechází na další dostupný endpoint při výpadku, a pokud jsou nedostupné všechny Redis endpointy, přepne se na in-memory fallback. - Politika složitosti hesel v nastavení organizace — Nastavení organizace nyní obsahuje vyhrazený editor Politiky složitosti hesel. Pravidla jsou vynucována při změně hesla (minimální délka, požadavky na třídy znaků, hloubka historie). Při upgradu jsou organizace automaticky migrovány ze zastaralého pole
secret_complexity_policy.
Vylepšení¶
- Historie rotace Entra přihlašovacích údajů — Operace rotace Entra ID přihlašovacích údajů nyní vytvářejí trvalý záznam historie rotace pro každou událost. Historie zachycuje typ rotace, staré a nové identifikátory klíčů, workflow a execution ID, průběh po krocích, finální stav, případné chybové detaily a trvání. Umožňuje plnou sledovatelnost životního cyklu rotace Entra přihlašovacích údajů.
- Sladění RBAC oprávnění — Oprávnění rolí aktualizována dle dohodnuté produktové politiky:
secret_manager— přidánokeytab:readaconfig:read(stránky Správa KeyTab a Správa konfigurace jsou nyní přístupné)certificate_manager— přidánoconfig:read(stránka Správa konfigurace je nyní přístupná)auditor— odebránokeytab:read(Správa KeyTab již není viditelná pro auditní role; pro auditní přístup ke KeyTab přiřaďte explicitně oprávněníkeytab:read)
- Rozšíření typů referencí admin přihlašovacích údajů — Admin přihlašovací údaje k databázi nyní podporují dva nové typy referencí:
mazevault(přihlašovací údaje uložené jako MazeVault spravované tajemství) aexternal(obecné externí reference). Úplná sada podporovaných typů:internal,mazevault,external,keyvault,aws_sm. - Asynchronní seedování synchronizace tajemství s přehledem stavu — Operace seedování synchronizace nyní běží asynchronně a ihned vrací odkaz na průběh s detailním přehledem stavu (tajemství vytvořena, aktualizována, přeskočena, selhala). Zablokované seed incidenty jsou nyní zobrazeny na stránce Řešení konfliktů.
- Vydávání certifikátů propojeno s agentem — Certifikáty vydané registrovanému agentovi jsou nyní při vydání propojeny se záznamem vydávajícího agenta, čímž je životní cyklus certifikátu propojen s agentem v dashboardu a rotační orchestraci.
- Bezpečnostní vylepšení — obsluha bootstrap a KeyTab — Handlery pro aktualizaci a mazání KeyTab nyní vynucují kontrolu vlastnictví organizace (ochrana proti IDOR): přístup ke KeyTab patřícímu jiné organizaci vrátí 404. Endpoint pro změnu hesla při bootstrapu je uzamčen po dokončení prvotního bootstrapu a odmítá další volání s kódem 403 Forbidden. Do CI pipeline byl přidán DAST (Dynamic Application Security Testing) workflow.
- Aktualizace kontaktu pro obnovu licence — Kontaktní e-mail pro obnovu licence je nyní
info@mazevault.comve všech notifikačních bannerech a modalech exspirace.
Opravy chyb¶
- SSO Provider Modal: zachování ID poskytovatele při uložení — Opravena chyba, při níž uložení stávající konfigurace SSO poskytovatele způsobilo ztrátu ID poskytovatele, což vedlo k vytváření duplicitních poskytovatelů při dalším uložení.
- Zpětné doplnění politiky složitosti hesel — Organizace, které měly nakonfigurovanou politiku složitosti tajemství přes starší pole
secret_complexity_policy, byly chybně vyhodnoceny jako nemající žádnou politiku hesel, což způsobovalo falešná selhání kontrol souladu s PCI-DSS 8.3. Politika je nyní při upgradu automaticky propagována do vyhrazeného pole politiky složitosti hesel. Organizace bez jakékoliv nastavené politiky navíc při upgradu obdrží bezpečnou výchozí politiku (minimálně 16 znaků, všechny třídy znaků povinné, historie 10 hesel, rotace každých 30 dní).
Verze 1.0.42¶
Datum vydání: 2026-05-11
Nové funkce¶
- Metadata certifikátů — Certifikáty nyní podporují tři uživatelsky editovatelné pole metadat dostupná z detailu certifikátu a přes
PUT /api/v1/certificates/:id:- Tagy — Volně zadávatelné textové štítky pro seskupování a filtrování certifikátů. Tagy nastavené při importu jsou nyní uloženy a zůstávají editovatelné po importu. Odešlete prázdné pole pro smazání všech tagů.
- URL dokumentace — Volitelný odkaz (http/https) na externí dokumentaci, runbooky nebo záznamy CMDB pro certifikát. Maximálně 500 znaků.
- Poznámky — Krátká volně editovatelná anotace (maximálně 256 znaků). Odešlete prázdný řetězec pro smazání poznámky.
- Všechny změny metadatových polí jsou zaznamenány do auditního logu.
Vylepšení¶
- Vynucení kanonizace prostředí při vytváření úkolů — Vytváření gateway úkolů nyní vynucuje kanonizaci slugů prostředí. Všechny gateway úkoly jsou ukládány s malými písmeny slugů prostředí bez ohledu na velikost písmen volajícího, navazujíc na kanonizační infrastrukturu zavedenou ve v1.0.41. Proměnná
MAZEVAULT_ENV_CANONICAL_ENFORCE(nastavením natruese přejde do fail-closed režimu pro nekanonické vstupy) platí pro vytváření úkolů od tohoto vydání.
Verze 1.0.41¶
Datum vydání: 2026-04-26
Vylepšení¶
- Synchronizace dokumentace — Komplexní aktualizace dokumentace pro soulad s kódovou základnou v1.0.41. Reference proměnných prostředí rozšířena o pět nových sekcí: Registrace licence/organizace, Režim Orchestrátora, ACME DNS-01, Správa KeyTab a Proxy binárních souborů agenta. Všechny stávající sekce doplněny o dosud chybějící proměnné.
- Opraven název proměnné Office 365 — Opraven nesprávný název proměnné
O365_ENABLED→O365_EMAIL_ENABLEDv celé dokumentaci. Zdokumentována kompletní konfigurace autentizace Office 365 (metody: client secret, certifikát a managed identity). - Reference API pro KeyTab — Zveřejněna kompletní dokumentace API pro všech 14 endpointů správy KeyTab. Viz API pro KeyTab.
- Reference API pro reporty — Zveřejněna kompletní dokumentace API pro týdenní reporty exspirace. Viz API pro reporty.
- Synchronizace verze platformy — Všechny stránky dokumentace aktualizovány tak, aby odrážely aktuální verzi platformy.
Verze 1.0.40¶
Datum vydání: 2026-04-25
Nové funkce¶
- Vynucení nonce OIDC — Nový příznak
MAZEVAULT_ENFORCE_OIDC_NONCEpovoluje přísné ověření nonce v OIDC tokenech. Při nastavení natruejsou tokeny bez platného nároku nonce odmítnuty, což chrání před útoky opakovaným přehráním tokenu. Doporučeno pro všechna produkční prostředí. - Řízení trust store agenta — Nové proměnné prostředí
MAZEVAULT_AGENT_INSTALL_CHAIN_TO_TRUSTSTOREaMAZEVAULT_AGENT_TRUST_STORE_PATHřídí, zda agent MazeVault nainstaluje interní řetězec CA do systémového úložiště důvěryhodných certifikátů a umožňují přepsat výchozí cestu trust store na Linuxu.
Vylepšení¶
- Stav synchronizace cílů rotace certifikátů —
GET /api/v1/certificates/:id/targets/:targetId/statusnyní vrací úplné detaily výsledků každého kroku, což usnadňuje diagnostiku neúspěšných synchronizací cílů. - Stabilita registrace gateway — Vylepšená logika opakování pro výměnu bootstrap tokenů snižuje počet neúspěšných registrací způsobených přechodnými síťovými problémy při prvním nastavení gateway.
- Validace URL OCSP — Proměnná
OCSP_URLnyní ověřuje formát URL při spuštění, aby se zabránilo tichému selhávání OCSP v důsledku špatné konfigurace.
Opravy chyb¶
- Opravená rezoluce
AGENT_VERSION=latest, aby vždy načítala nejvyšší označenou verzi namísto nejnovějšího commitu. - Opraveno překrývání zobrazení v modalu importu certifikátů v režimu Orchestrátora při současné viditelnosti sekcí keytab i soukromého klíče.
Verze 1.0.39¶
Datum vydání: 2026-04-22
Nové funkce¶
- Řízení distribuce binárních souborů agenta — Nové konfigurační proměnné umožňují podrobné řízení distribuce aktualizací agenta.
AGENT_ROLLOUT_PERCENTAGEomezuje, které procento agentů dostane notifikaci o aktualizaci (0–100), což umožňuje postávkové zavedení.AGENT_MAX_CONCURRENT_DOWNLOADSomezuje paralelní stahování binárních souborů. - Proxy binárních souborů agenta — MazeVault nyní může zprostředkovávat stahování binárních souborů agenta z privátního repozitáře GitHub, čímž odpadá požadavek na přímý přístup hostů agenta k veřejnému GitHub Releases. Konfigurujte přes
AGENT_BINARY_GITHUB_TOKEN,AGENT_BINARY_CACHE_DIR,AGENT_DOWNLOAD_BASE_URLaAGENT_VERSION. - Semenáření prostředí primárního backendu — Nová proměnná
MAZEVAULT_PRIMARY_ENVIRONMENTSpřed-nasévá seznam prostředí obsluhovaných přímo primárním backendem při prvním spuštění, což zjednodušuje počáteční konfiguraci nasazení s více prostředími.
Vylepšení¶
- Obnovování dashboardu KeyTab — Opraven graf souladu šifer, který se neaktualizoval po importu keytabu se zastaralými šiframi.
- Spolehlivé vícekanálové doručení týdenního reportu — Opravena podmínka plánovače, která mohla tiše vynechat jeden doručovací kanál při současném povolení více kanálů.
Opravy chyb¶
- Opravena chyba, kdy časové razítko heartbeatu gateway nebylo správně aktualizováno po obnovení ze síťové partice.
Verze 1.0.38¶
Datum vydání: 2026-04-19
Nové funkce¶
- Správa KeyTab — kompletní životní cyklus Kerberos — Enterprise správa Kerberos KeyTab souborů s kompletní podporou životního cyklu. Import, discovery a správa keytab souborů napříč infrastrukturou. Klíčové schopnosti:
- Import a parsování — Import MIT Kerberos v2 keytab binárních souborů s automatickou extrakcí principálů, realmů, verzí klíčů (KVNO) a šifrovacích typů. Podporuje nahrání v base64 kódování.
- Discovery agentem — Agenti automaticky objevují
.keytabsoubory na spravovaných hostech, hlásí cestu k souboru, oprávnění, vlastníka a otisk šifrovacího typu. Objevené keytaby lze importovat do spravovaného inventáře jedním kliknutím. - Vynucování šifrovacích politik — Definujte šifrovací politiky na úrovni organizace s povolenými a zastaralými šifrovacími typy Kerberos. Tři režimy vynucení:
audit(pouze reportování),warn(povolit s varováním),block(zakázat neshody). Výchozí politika blokuje starší šifry (DES, RC4-HMAC) a povoluje moderní AES a Camellia. - Historie verzí — Všechny aktualizace keytabů vytvářejí neměnitelné záznamy verzí se sledováním důvodu změny pro plný auditní soulad.
- Dashboard a analytika — Vyhrazený dashboard KeyTab zobrazující celkový/aktivní/exspirovaný počet, rozpad souladu s šiframi (vyhovující/varování/kritický), prognózy exspirace a distribuci typů šifer.
- Podpora režimu Orchestrátora — V režimu Orchestrátora se binární data keytab odesílají do externího poskytovatele; lokálně se ukládají pouze metadata.
- Týdenní report exspirací — Automatické týdenní reporty zobrazující certifikáty a secrets exspirující do 60 dnů, doručované na více kanálů současně:
- Email — HTML formátovaný report na konfigurovaný seznam příjemců
- Slack / Microsoft Teams — Notifikace přes webhook se souhrnem exspirací
- JIRA — Automatické vytvoření úkolu s detaily exspirace pro sledování
- Generický webhook — HTTP POST s kompletním payloadem reportu pro vlastní integrace
- Reporty lze před odesláním zobrazit jako náhled a spustit ručně na vyžádání.
- Registrace lokální gateway — Primární backend se nyní může zaregistrovat jako lokální gateway, což umožňuje jednotné UI správy gateway pro lokální i vzdálené gateway. Unikátní omezení zajišťuje pouze jednu lokální gateway na nasazení.
Vylepšení¶
- Podpora více prostředí na gateway — Gateway nyní mohou obsluhovat více prostředí současně, čímž se odstraňuje předchozí omezení jedna-gateway-na-prostředí.
- RBAC oprávnění pro reporty — Nová oprávnění
report:readareport:writeposkytují jemné řízení přístupu k reportovacímu systému. Všechny standardní role (User, Certificate Manager, Secret Manager, Auditor) získávajíreport:read; Admin a Project Admin navíc získávajíreport:write. - RBAC oprávnění pro KeyTab — Nová oprávnění
keytab:read,keytab:write,keytab:deleteakeytab:adminřídí přístup ke správě keytabů. Standardní uživatelé a auditoři získávají přístup pro čtení; operátoři a org admini získávají zápis a mazání; org admini navíc získávají admin přístup pro správu politik.
Opravy chyb¶
- Čistění pravidel synchronizace Entra — Odstraněna osiřelá sync pravidla ponechaná smazanými integracemi a vyčištěna duplicitní sync pravidla pro typ poskytovatele
entra_id(nyní řešeno dedikovaným Entra Sync Schedulerem). Opravuje opakující se chyby „sync failed for rule" v produkčních prostředích.
Verze 1.0.37¶
Datum vydání: 2026-04-16
Vylepšení¶
- Šifrování payloadu úloh gateway — Citlivé payloady úloh vyměňované mezi primárním backendem a gateway jsou nyní šifrovány v klidu v databázi. Příznak
payload_encryptedna úlohách gateway zajišťuje, že JSONB payloady obsahující přihlašovací údaje a soukromé klíče jsou chráněny i v případě kompromitace přístupu k databázi. - Exponenciální backoff fronty zápisů — Fronta zápisů pro více datových center nyní sleduje časové razítko každého pokusu o opakování, což umožňuje správný výpočet exponenciálního backoff pro neúspěšné synchronizační operace. Zlepšuje spolehlivost a snižuje zbytečnou zátěž vzdálených gateway během výpadků konektivity.
Bezpečnostní aktualizace¶
- Šifrování payloadu gateway v klidu — Výsledky úloh a payloady ve frontě úloh gateway jsou nyní šifrovány před uložením do databáze, čímž se uzavírá potenciální vektor expozice dat v nasazeních s více datovými centry.
Verze 1.0.36¶
Datum vydání: 2026-04-15
Nové funkce¶
- Databázové schéma KeyTab — Nové databázové tabulky pro správu keytab:
keytabs(šifrované úložiště keytab se sledováním souladu šifer),keytab_versions(neměnitelná historie verzí),keytab_cipher_policies(vynucování šifer na úrovni organizace) adiscovered_keytabs(výsledky discovery agentů s detekcí zastaralých záznamů). - RBAC oprávnění KeyTab — Nová sada oprávnění (
keytab:read,keytab:write,keytab:delete,keytab:admin) přiřazená příslušným systémovým rolím pro správu životního cyklu keytab.
Vylepšení¶
- Vylepšení API tokenů gateway — Vylepšená autentizace gateway s dedikovanými API tokeny a podporou bootstrapového provisioningu.
- Discovery KeyTab agentem — Agenti nyní mohou objevovat Kerberos keytab soubory na spravovaných hostech a hlásit zjištění včetně cesty k souboru, oprávnění, vlastníka, typů šifrování a SHA-256 otisku.
Verze 1.0.35¶
Datum vydání: 2026-04-14
Opravy chyb¶
- PEM Import — Zachování soukromého klíče — Opravena kritická chyba, kdy import PEM souboru obsahujícího řetěz certifikátů a soukromý klíč tiše zahodil soukromý klíč. Systém správně detekoval klíč při náhledu souboru, ale ztratil ho během vlastního importu, což způsobovalo selhání následných exportů do PFX/JKS. Parser PEM bundlů nyní správně extrahuje PKCS#8, RSA a EC soukromé klíče.
- Import certifikátu — Název projektu v chybových zprávách — Při importu certifikátu, který již existuje, chybová zpráva nyní obsahuje název projektu, kde se duplikát nachází (např. „certifikát již existuje … project=MůjProjekt"), což usnadňuje identifikaci konfliktů.
Vylepšení¶
- Viditelnost soukromého klíče v UI — Certifikáty nyní zobrazují stav soukromého klíče ve všech pohledech:
- Seznamy certifikátů zobrazují zelenou ikonu štítu, když je uložen soukromý klíč.
- Dashboard certifikátů zobrazuje zelenou ikonu klíče u certifikátů se soukromým klíčem.
- Detail certifikátu zobrazuje chip indikující, zda je klíč uložen lokálně, externě, nebo není k dispozici.
Verze 1.0.34¶
Datum vydání: 2026-04-10
Nové funkce¶
- Discovery skupin Identity Provideru — Nový API endpoint
GET /identity-providers/{id}/groupsnačítá skupiny přímo z nakonfigurovaného poskytovatele identity (Entra ID přes Microsoft Graph, LDAP přes adresářové vyhledávání). Podporuje filtrování pomocí vyhledávání podle názvu skupiny pro snadné mapování rolí. - Test pokrytí Identity Provideru — Přidáno komplexní pokrytí unit testy pro CRUD operace poskytovatele identity, test-connection flow a endpointy pro discovery skupin.
Vylepšení¶
- JKS Export — Čistá Go implementace — Nahrazena externí závislost na
keytool(JDK) nativní Go implementací pomocíkeystore-go/v4. Export JKS nyní funguje v jakémkoliv prostředí bez nutnosti Java runtime, obsahuje kompletní řetěz certifikátů a má komplexní pokrytí testy. - Autentizace Gateway API tokenem — Nová tabulka
gateway_api_tokensa middleware pro autentizaci gateway-to-backend API. Gateway se nyní mohou autentizovat pomocí dedikovaných API tokenů s automatickým provisioningem při bootstrapu. - Fronta zápisů Gateway — Přidána tabulka
gateway_write_queuepro bufferování zápisových operací z gateway, což umožňuje spolehlivou synchronizaci dat v nasazeních s více datovými centry. - Posílení bootstrapu Gateway — Vylepšený bootstrap flow gateway s rozšířenou validací, kontrolami konektivity Azure SQL a spolehlivější počáteční registrací.
- Terraform pro Azure testovací prostředí — Nová konfigurace Terraformu pro automatizovaný provisioning Azure testovacího prostředí, včetně Entra ID enterprise aplikací, Key Vaultů a Azure SQL.
Bezpečnostní aktualizace¶
- Middleware autentizace Gateway — Nový dedikovaný middleware validuje API tokeny gateway se správnými kontrolami scope a propagací kontextu požadavku.
Verze 1.0.33¶
Datum vydání: 2026-04-09
Nové funkce¶
- Endpointy pro kontrolu Azure oprávnění — Přidány nové API endpointy pro validaci přístupů a viditelnosti zdrojů v Azure:
POST /api/v1/admin/azure/mi-permissions-checkGET /api/v1/azure/user-permissions-summaryGET /api/v1/azure/subscriptions/{subscriptionId}/sql-servers- Validace oprávnění Managed Identity — Nový kontrolní tok Managed Identity ověřuje přístup ke konfigurovaným Azure integracím a vrací stav po jednotlivých integracích.
- Souhrn uživatelských oprávnění — Přidán konsolidovaný přehled Azure zdrojů viditelných pro přihlášeného uživatele na úrovni subscription, včetně Key Vault a SQL server discovery.
Vylepšení¶
- RBAC integrace pro Azure permission checks — Endpointy kontroly Azure oprávnění jsou nyní chráněné MazeVault RBAC pomocí guardů
integration:readaintegration:write. - Pokrytí Swagger schémat — Definice OpenAPI nyní obsahuje response modely pro Azure permission check (
MIPermissionsCheckResponse,MICheckResult) pro přesnější generování API klientů.
Bezpečnostní aktualizace¶
- Sjednocení oprávnění rolí — Migrace
000109_add_audit_settings_permissionspřidává oprávněníaudit:readaproject:writerolímcertificate_managerasecret_managerpro konzistentní chování řízení přístupu.
Verze 1.0.32¶
Datum vydání: 2026-04-08
Nové funkce¶
- Integrace Azure Managed HSM — Plná podpora pro ukládání a manipulaci klíčů v Azure Managed HSM s automatickými aktualizacemi certifikátů a rotací klíčů. Všechny operace se soukromými klíči se provádějí v HSM s metadaty vrácenými do databáze.
- Zásady hesel na úrovni organizace — Definujte pravidla pro vynucování hesel (minimální délka, složitost, doba platnosti) pro všechny uživatele organizace. Pravidla se vynucují při vytvoření a změně hesla s kompatibilitou pro staré integrace.
Vylepšení¶
- Výkon synchronizace CRDT — Optimalizované řešení konfliktů pro datasety >100k záznamů, zlepšení rychlosti o 40% na setupech s více datovými centry.
- Rozšířené auditní protokoly — Komplexní zaznamenávání všech operací týkajících se hesel, certifikátů a administrativních akcí.
Opravy chyb¶
- Opraveno časování zneplatnění cache v clusterových nasazeních.
- Vyřešena selhání synchronizace s velkými CSR transakcemi.
Verze 1.0.31¶
Datum vydání: 2026-04-07
Nové funkce¶
- Režim Orchestrátora — Uchovávání klíčů externě — MazeVault nyní může běžet v režimu, kde jsou všechny soukromé klíče a tajemství ukládány výhradně v externích úschovnách klíčů (Azure Key Vault, AWS Secrets Manager, HashiCorp Vault). Místní databáze obsahuje pouze metadata.
- Sledování souladu s licencí — Dashboard zobrazuje stav licence v reálném čase, včetně použitých licencí, nadcházejících vypršení a stavů varování.
Vylepšení¶
- Migrace ze standardního režimu do režimu Orchestrátora — Nové příkazy CLI pro bezpečnou migraci existujících systémů v standardním režimu do režimu Orchestrátora.
- UI režimu Orchestrátora — Přepínač v průvodci onboardingem a v nastavení organizace.
Opravy chyb¶
- Opraveno selektivní kopírování certifikátů v režimu Orchestrátora.
Verze 1.0.30¶
Datum vydání: 2026-04-07
Nové funkce¶
- ACME Server — plná implementace RFC 8555 — MazeVault nyní funguje jako plně kompatibilní ACME certifikační autorita. Jakýkoliv standardní ACME klient (cert-manager, Certbot, acme.sh, Kubernetes) může přímo od MazeVault získávat a obnovovat certifikáty bez manuálního zásahu. Podporované typy výzev: HTTP-01, DNS-01, TLS-ALPN-01.
- External Account Binding (EAB) — Registrace ACME účtů lze omezit pouze na autorizované klienty pomocí předsdílených EAB přihlašovacích údajů (HMAC). Zabraňuje neoprávněnému vydávání certifikátů neznámými ACME klienty.
- Dashboard synchronizace — Nová sekce dashboardu zobrazuje stav synchronizace v reálném čase: přehled konfigurací, aktivní konflikty a selhání synchronizace s návodem pro řešení jednotlivých položek.
- Oprávnění sync:read — Nové oprávnění
sync:readumožňuje členům projektů, auditorům a držitelům rolí přístup k stavovým endpointům synchronizace bez potřeby zvýšených oprávnění.
Vylepšení¶
- Posílení ACME Authorization Nonce — Vyhrazená tabulka nonce (
acme_server_nonces) s TTL exspirací zajišťuje přísnou ochranu replay-nonce dle RFC 8555 §6.5. - Indexování ACME challenge tokenů — Challenge tokeny nyní využívají vyhrazený indexovaný sloupec pro validaci s O(1) dotazy místo skenování JSON, čímž se zvyšuje propustnost při vysokém objemu ACME požadavků.
- RBAC — sjednocení oprávnění synchronizace — Role
project_admin,certificate_manager,secret_manager,useraauditornyní zahrnujísync:readpro konzistentní přístup ke sync dashboard endpointům.
Opravy chyb¶
- Opravena race condition v přechodech stavu ACME order při souběžných finalize požadavcích.
- Vyřešen problém s pořadím vytváření ACME authz tabulek (idempotentnost migrace).
Verze 1.0.29¶
Datum vydání: 2026-04-06
Nové funkce¶
- Rozhraní pro správu konfigurace — Nové záložkové UI pro správu životního cyklu konfiguračních souborů: discovery YAML/JSON/INI souborů napříč prostředími, přípravná oblast pro koncepty a propagace konfigurací do produkce. Poskytuje přehled o počtu discoveredvs. spravovaných konfigurací.
- Polymorfní konfigurace rotace certifikátů — Záznamy rotace nyní podporují jak rotaci secretů, tak certifikátů v unified modelu. Pole
config_typerozlišuje oba typy, čímž eliminuje samostatné tabulky workflow. - Sledování zdroje nastavení obnovení — Každý certifikát nyní zaznamenává, zda jeho nastavení obnovení pochází z projektové šablony (
template) nebo bylo nastaveno ručně (manual), což poskytuje jasnou auditní stopu pro chování rotace.
Vylepšení¶
- Organizační izolace žádostí o certifikáty — Žádosti o podpis certifikátů (CSR) jsou nyní vázány na organizaci původce. Pole
organization_idje zpětně doplněno z projektových asociací, čímž se zabraňuje úniku CSR dat mezi organizacemi. - Databázová schémata ACME serveru — Databázové schéma pro ACME serverový protokol (autorizační objekty a nonce tabulky) bylo připraveno pro vydání ACME serveru v 1.0.30.
- Čistění workflow rotace — Odstraněny zastaralé tabulky
rotation_workflowsarotation_step_executionsnahrazené unified modelem spuštění rotace.
Opravy chyb¶
- Opraveno přejmenování sloupce
rotation_configs.next_rotationnanext_rotation_at— dotazy plánovače nyní používají správný název sloupce. - Vyřešeno omezení cizího klíče na
rotation_executions.config_id, které bránilo polymorfním odkazům na konfiguraci rotace.
Verze 1.0.28¶
Datum vydání: 2026-04-05
Nové funkce¶
- Zásady pojmenování secretů — Definujte celoorganizační konvence pojmenování secretů pomocí regex pravidel se třemi úrovněmi vynucení:
block(zakáže vytvoření),warn(povolí s varováním) adisabled(informativní). Zásady jsou spravovány jako konfigurační šablony a validovány v reálném čase při vytváření secretu. - Dashboard souladu s pojmenováním — Nová záložka v Secrets Dashboardu zobrazuje heat mapu porušení zásad, míru souladu na úrovni jednotlivých pravidel a automaticky generované návrhy pravidel na základě existujících vzorců pojmenování secretů.
- Framework konzistence — Vytvořte skupiny konzistence pro ověření existence specifikovaných secretů ve všech požadovaných prostředích. Endpoint
POST /projects/{id}/consistency/groupsa záložka dashboardu povrchně zobrazují chybějící hodnoty a mezery v prostředích s podporouresolve-warningpro dokumentované výjimky. - Výchozí nastavení zabezpečení databáze — Organizace nyní mohou konfigurovat TLS/šifrování pro databázové integrace na úrovni prostředí. Produkční prostředí výchozím nastavením vyžaduje přísné TLS (verify-full, encrypt, TCPS); neprodukční prostředí využívají permisivní výchozí nastavení. Podporovatelé: Oracle, MSSQL, PostgreSQL, MongoDB, MySQL.
- Vylepšené sdílené secrety — Sdílené secrety nyní podporují volitelnou ochranu heslem (bcrypt),
recipient_emailpro sledování záměru, automatické označení typu obsahu (secretnebocertificate) a atribuci zdroje rotace (source_type,source_id) pro automatizovanou distribuci po rotaci.
Bezpečnostní aktualizace¶
- Oprávnění RBAC pro konzistenci — Nová oprávnění
consistency:readaconsistency:writeřídí přístup ke skupinám konzistence a řešení varování. Přiřazena rolímproject_admin,certificate_manager,secret_manager,useraauditor. - Zpřesnění role auditora — Role
auditorjiž nemá přístup k deployment dashboardu ani obecným dashboard pohledům, čímž se role striktně zaměřuje na audit logy, správu uživatelů, stav gateway a agentů — redukuje útočnou plochu účtů pouze pro čtení.
Opravy chyb¶
- Opraveno ukládání zásad pojmenování secretů: zásady jsou nyní persistovány v
config_management_templatesmísto zastaralého JSONB sloupceorganizations.secret_complexity_policy.
Verze 1.0.27¶
Datum vydání: 2026-04-04
Nové funkce¶
- Nové role: Certificate Manager a Secret Manager — Dvě nové specializované role poskytují jemné řízení přístupu bez udělení viditelnosti napříč doménami:
certificate_manager— Plná správa životního cyklu certifikátů, CA účtů, šablon, discovery a deploymení. Bez přístupu k secretům.secret_manager— Plná správa životního cyklu secretů, rotace, deploymení a integrací. Bez přístupu k certifikátům.- Vzor autorizačního kódu SSO — Přístupové tokeny se již nepředávají přes URL parametry při SSO callbacku. Callback nyní doručuje krátkodobý kód (
sso_code, 60sekundová TTL), který frontend vymění za tokeny prostřednictvímPOST /auth/sso/exchange. Eliminuje se tím expozice tokenů v historii prohlížeče, serverových přístupových lozích a hlavičkáchReferer. Platí pro poskytovatele SSO: Entra ID, GitHub a GitLab. - Konsolidace mapování skupin Entra — Mapování skupin Entra ID na role jsou nyní uložena v unified tabulce
group_role_mappingsse sloupcemsource(localneboentra). To umožňuje konzistentní správu skupin z lokálních LDAP skupin i cloudových skupin Entra ID z jednoho rozhraní.
Bezpečnostní aktualizace¶
- Validace OIDC Nonce — OAuth2 stav nyní nese serverem generovaný nonce validovaný při výměně tokenu. Zabraňuje CSRF/únosu tokenu prostřednictvím cross-site OAuth substituce stavu.
- Odebrání zastaralých rolí — Starší role (
operator,developer,org_admin,secret_editor,secret_viewer,certificate_admin,system_admin) byly odebrány. Stávající uživatelé s těmito rolemi byli automaticky migrováni:operator→project_admin,developer→user. Integrace používající zastaralé názvy rolí v API voláních musí být aktualizovány. - Integrita dat uživatelských rolí — Opravena korupce primárního klíče s nulovou UUID v tabulce
user_roleszpůsobená chybějícím hookemBeforeCreate. Byl přidán kompozitní unikátní index k zabránění duplicitním přiřazením rolí. Postižené záznamy byly zpracovány deduplikací během migrace. - Index soft-delete emailu uživatele — Omezení unikátnosti emailu je nyní partial index (
WHERE deleted_at IS NULL). Soft-smazaní uživatelé již neblokují vytvoření nového účtu ani SSO registraci se stejnou emailovou adresou.
Opravy chyb¶
- Opravena duplikace mapování skupin Entra po opětovném přihlášení SSO.
- Vyřešena selhání přiřazení rolí pro uživatele vytvořené prostřednictvím LDAP group sync.
Verze 1.0.26¶
Datum vydání: 2026-04-03
Nové funkce¶
- Vylepšení importu PFX/PKCS#12 — Vylepšený import PFX certifikátů s lepším parsováním a validací
- Opravy šablon certifikátů — Vyřešeny problémy s konfigurací šablon ovlivňující workflow enrollmentu certifikátů
- Úpravy mapování rolí — Aktualizovaná logika mapování skupin na role pro lepší SSO integraci
- Rozšíření auditních logů — Rozšířené auditní logování s dalšími typy událostí a vylepšenou sledovatelností
Bezpečnostní aktualizace¶
- Komplexní remediace zranitelností — Vyřešeno 18 z 24 identifikovaných zranitelností napříč všemi komponentami platformy prostřednictvím systematického skenování a aktualizace závislostí
- Oprava obejití SAML podpisu (KRITICKÉ) — Opravena kritická zranitelnost obejití XML podpisu v SAML SSO autentizačním toku (
goxmldsigv1.3.0 → v1.6.0) - Oprava HTTP/2 CONTINUATION flood (KRITICKÉ) — Vyřešena aktivně zneužitelná HTTP/2 denial-of-service zranitelnost v Kubernetes Operátoru (
golang.org/x/netv0.19.0 → v0.52.0) - Oprava obejití autorizace gRPC — Opraveno obejití autorizace gRPC přes chybějící lomítko v cestě (
google.golang.org/grpc→ v1.80.0) - Opravy JOSE/JWE Denial-of-Service — Vyřešeny 3 samostatné DoS zranitelnosti v JSON Web Encryption (
go-jose/v3v3.0.0 → v3.0.4) - Kritická oprava Node.js SDK — Eliminováno 8 kritických Handlebars.js advisories včetně JavaScript injection a prototype pollution
- Posílení bezpečnosti CI/CD — Připnutí Trivy security scanneru na konkrétní verzi (ochrana supply chain), povolení bezpečnostního skenování na všech CI událostech
Vylepšení¶
- Přepracování Kubernetes Operátoru — Velká aktualizace závislostí na
controller-runtimev0.22.5 ak8s.io/*v0.34.3 s vylepšením kvality kódu včetně extrahovaných reconciliačních metod, konfigurovatelných intervalů obnovení, správné propagace watch a strukturovaného logování - Oprava Terraform Provideru — Opravena chyba kompilace a aktualizovány všechny závislosti na nejnovější stabilní verze (
terraform-plugin-frameworkv1.19.0,grpcv1.80.0) - Vylepšení Go SDK — Přidáno pole
Environmentdo modelu Project pro vylepšenou správu projektů - Posílení Docker obrazů — Připnutí základního obrazu OCSP Responderu na
alpine:3.21(reprodukovatelné buildy), přepnutí Frontendu nanpm cipro deterministickou instalaci závislostí - Sjednocení závislostí — Sjednocení
golang.org/x/crypto,golang.org/x/neta dalších standardních knihoven napříč všemi 7 Go moduly na nejnovější stabilní verze
Verze 1.0.25¶
Datum vydání: 2026-04-01
Nové funkce¶
- Přepracování Swagger API dokumentace — Kompletní regenerace Swagger/OpenAPI dokumentace s úplným pokrytím endpointů, vylepšenými definicemi schémat a přesnými příklady požadavků/odpovědí
- Konfigurace prostředí Entra ID SSO — Nové proměnné prostředí pro konfiguraci Entra ID SSO a Azure Managed Identity v
.env.examplepro zjednodušené nasazení
Vylepšení¶
- Konfigurace LDAP a OAuth poskytovatele — Vylepšené nastavení SSO poskytovatele s lepším zpracováním LDAP bind DN a konfigurací OAuth2 flow
- Endpoint stavu emailů — Nový endpoint
GET /api/v1/system/email-statuspro monitorování stavu doručení emailových notifikací - Handlery rotace certifikátů — Nové API handlery pro provádění rotace certifikátů a sledování stavu
- Vylepšení integrace agentů — Vylepšené handlery pro discovery a integraci agentů s lepším hlášením chyb
- Správa SSH klíčů — Rozšířená služba SSH klíčů s vylepšeným importem a rotačními schopnostmi
Bezpečnostní aktualizace¶
- Aktualizovaná autentizační služba s vylepšenou validací tokenů a správou sessions
- Vylepšený Entra ID Graph klient s dodatečnými bezpečnostními hlavičkami
Verze 1.0.24¶
Datum vydání: 2026-03-30
Opravy chyb¶
- Oprava Entra ID SSO — Vyřešen kritický problém s autentizací Entra ID SSO ovlivňující přihlašovací flow a obnovu tokenů
- Vyčištění kódu — Odstraněn zastaralý kód handlerů a nepoužívané endpointy mapování Entra pro čistší codebase
Vylepšení¶
- Aktualizované modely schématu s dodatečnými definicemi polí pro lepší integritu dat
Verze 1.0.23¶
Datum vydání: 2026-03-30
Vylepšení¶
- Šablony certifikátů a správa expirace — Vylepšená konfigurace šablon certifikátů s lepším sledováním expirace, optimalizacemi plánovače a lepšími indikátory stavu CA integrace
- Validace importu certifikátů — Vylepšená služba importu certifikátů s přísnější validací řetězce a lepšími chybovými zprávami
- Synchronizace SSLmarket CA — Rozšířený poskytovatel SSLmarket CA s vylepšenou synchronizací produktů a sledováním stavu certifikátů
- Rozšířené logování — Vylepšené logování napříč certifikátovými službami pro lepší troubleshooting a audit trail
Opravy chyb¶
- Opravena kalkulace stavu certifikátu v X.509 utility funkcích
- Vyřešeny problémy se zobrazením dashboardu pro expirující certifikáty
- Opraven modal editace certifikátu zachovávající nesprávné hodnoty při uložení
Verze 1.0.22¶
Datum vydání: 2026-03-30
Nové funkce¶
- Podpora multi-gateway prostředí — Nová databázová migrace a servisní vrstva pro multi-gateway nasazení s konfigurací gateway specifickou pro prostředí, monitorováním zdraví a prováděním úloh
- Monitor zdraví gateway — Real-time monitorování zdraví gateway s sledováním heartbeatu, automatickou detekcí failoveru a Prometheus metrikami
- Služba routování gateway — Inteligentní routování požadavků napříč více instancemi gateway s load balancingem a povědomím o prostředí
- Exekutor úloh gateway — Distribuovaný framework pro provádění úloh gateway s retry logikou a sledováním stavu
- Správa identity providerů — Nové API handlery pro konfiguraci a správu identity providerů
Vylepšení¶
- Posílení cipher key resolveru — Kompletní testovací pokrytí pro rozlišení cipher klíčů s 715+ řádky nových testů eliminujících nekonzistence duálního úložiště
- Kontroly zdraví databáze — Aktualizované očekávané tabulky a sloupce pro nové databázové schéma související s gateway
- Průvodce integrací — Nové vícekrokové UI průvodce integrací pro konfiguraci CA providerů, správců secrets a externích integrací
- Oprava derivace klíčů — Vyřešen problém s derivací klíčů ovlivňující šifrovací operace
Bezpečnostní aktualizace¶
- Eliminována zranitelnost duálního úložiště cipher klíčů prostřednictvím migrace
000089 - Vylepšená autentizační služba s lepší správou sessions
Opravy chyb¶
- Opraveny selhání testů v orchestrátoru certifikátů a službách správy konfigurace
- Vyřešen problém s přesměrováním EntraID SSO na některých konfiguracích prohlížeče
Verze 1.0.21¶
Datum vydání: 2026-03-26
Nové funkce¶
- Azure Resource Discovery — Nové API handlery pro discovery cloudových zdrojů Azure s enumerací Key Vault, certifikátů a secrets
- UI průvodce integrací — Vícekrokový průvodce pro konfiguraci integrací s CA providery a správci secrets, včetně výběru typu, konfigurace poskytovatele a kroků revize
Vylepšení¶
- Služba CA účtů — Vylepšená správa CA účtů s lepším zpracováním chyb a sledováním stavu
- Aktualizace schémat modelů — Aktualizované datové modely napříč SSH klíči, MFA, OAuth, CRL a zero-trust moduly pro lepší konzistenci a validaci
- Testovací pokrytí — Rozšířené testovací pokrytí pro poskytovatele integračních služeb, službu offloadu klíčů a operace offloadu secrets
Opravy chyb¶
- Opravena nekonzistence modelu audit událostí certifikátů
- Vyřešeny problémy se zarovnáním polí modelu objevených certifikátů
Verze 1.0.20¶
Datum vydání: 2026-03-23
Nové funkce¶
- Office365 OAuth2 emailové notifikace — Odesílání emailových notifikací přes Microsoft Graph API pomocí OAuth2 client credentials flow místo legacy SMTP; podpora 3 autentizačních metod (client secret, certifikát, managed identity); využívá existující Entra ID infrastrukturu s cachováním spojení a retry logikou; transparentní náhrada — všech 6 email trigger bodů (upozornění na expiraci, incidenty, týdenní reporty, selhání rotace, souhrny discovery, testovací notifikace) funguje automaticky; nový endpoint
GET /api/v1/system/email-statusa frontend status indikátor v System Outputs → záložka Notifications - SmallStep CA poskytovatel — Integrace open-source step-ca jako backend certifikační autority s podporou provisioners JWK, X5C a OIDC; mTLS autentizace, podepisování, obnova, revokace certifikátů a podepisování CRL s ověřením otisku kořenového certifikátu; ideální pro zero-trust architektury s krátkodobými certifikáty
- Multi-target rotace certifikátů — Nasazení certifikátů na 5 typů cílů: Secret Managers (Azure Key Vault, AWS Secrets Manager, HashiCorp Vault), Kubernetes Secrets (TLS/Opaque), Agent Keystores (JKS, PKCS12, Windows), Agent Files (PEM) a Database Wallets (Oracle OCI); výběr režimu obsahu (veřejný, veřejný+řetězec, kompletní řetězec s klíčem, pouze klíč), automatická detekce formátu, politiky opakování s konfigurovatelným počtem pokusů a prodlevami, spouštění post-install příkazů
- Enterprise Entra ID správa životního cyklu přihlašovacích údajů — Kompletní správa životního cyklu se stavy (vytvořen, aktivní, expirující, expirovaný, odvolaný, grace period), konfigurovatelná lhůta odkladu (výchozí 30 dní), sledování historie rotace se starými/novými ID klíčů a trasováním workflow, dashboard monitoringu expirace, ochrana idempotence proti duplicitním rotacím a řešení synchronizačních konfliktů lokálního vs. vzdáleného stavu
- Prohlížeč compliance reportů — Generování a zobrazení compliance reportů s formátováním na základě šablon, analýza shody certifikátů na úrovni organizace a exportovatelný výstup reportů
- Historie provádění rotace — Detailní historie rotace per certifikát s časovými značkami provádění, sledováním stavu (úspěch/selhání/čekání) a vizualizací stavu synchronizace na úrovni cíle
- Sledování fáze životního cyklu certifikátu — Nové fáze životního cyklu (stabilní, obnovování, rotace, revokace) brání duplicitním CA požadavkům během probíhajících operací; nezávislé na stavu certifikátu, certifikáty zůstávají platné během přechodů fází
Vylepšení¶
- Cíle audit streamů — Nový Elasticsearch cíl se správou index šablon, podpora cluster módu a CosmosDB; nový Syslog cíl s TCP/UDP transportem, podporou formátů CEF a Syslog; rozšířená služba log streamů s validací konfigurace specifickou pro jednotlivé cíle
- Vylepšení LDAP autentizace — Rozšířená LDAP služba s vylepšeným zpracováním bind DN, rozlišením členství ve skupinách, flexibilitou konfigurace schématu a lepší diagnostikou chyb připojení
- Redesign plánovače notifikací — Vylepšená logika plánování notifikací o expiraci certifikátů s podporou dávkování pro snížení zahlcení výstrahami, integrace JIRA pro vytváření incidentních tiketů a vylepšení e-mailových notifikací
- Služba týdenních reportů expirace — Přepracované generování reportů se správou příjemců, přizpůsobitelným obsahem a zlepšenou spolehlivostí doručení
- Vylepšení šablon projektů — Rozšířená konfigurace šablon s integrací konvencí pojmenování, pokročilými výchozími nastaveními a vylepšeným workflow aplikace šablony na projekt
- Služba konvencí pojmenování — Rozšířený engine konvencí pojmenování s podporou dalších vzorů, validačních pravidel a propojení konvencí se šablonami pro automatické vynucování
- Prometheus metriky — Nové histogram a counter metriky pro rotaci certifikátů, compliance reporting a monitorování výkonu audit streamů
- CI/CD pipeline — Nový GitHub Actions workflow pro automatizovaný build, testování a nasazení
- SSO Provider Modal — Přidána konfigurace LDAP poskytovatele se serverem, bind DN a nastavením schématu přímo z rozhraní konfigurace SSO
- WebLogic Deploy krok rotace — Nový typ kroku rotace pro nasazení keystore na Oracle WebLogic Server s automatickou aktualizací konfigurace domény
Bezpečnostní aktualizace¶
- Rotace přihlašovacích údajů Entra ID s kompletním audit trailem — každá rotace zaznamenána s aktérem, časovým razítkem, starými/novými ID klíčů a stavem provádění
- Operace SmallStep CA logovány do audit streamu s kompletními metadaty požadavku/odpovědi
- Fáze životního cyklu certifikátu brání souběžným CA operacím, eliminující race conditions ve workflow obnovy a rotace
- Detekce synchronizačních konfliktů Entra s automatickým sledováním nesrovnalostí lokálního vs. vzdáleného stavu
Verze 1.0.19¶
Datum vydání: 2026-03-20
Nové funkce¶
- Nasazení Azure Gateway — Multi-regionální infrastruktura Azure Gateway s Terraform moduly pro AKS, Key Vault, PostgreSQL, Redis, síťování, monitoring a správu identit; Helm chart values pro konfiguraci gateway; Azure DevOps CI/CD pipeline pro automatizované nasazení
- Key Vault RBAC služba — Granulární řízení přístupu na základě rolí pro operace Azure Key Vault s oprávněními na úrovni jednotlivých tajemství a certifikátů
- Key Vault Watch Connector — Real-time synchronizace mezi MazeVault a Azure Key Vault s detekcí změn a automatickou aktualizací tajemství
- Engine konvencí pojmenování — Doménově specifická pravidla pojmenování s wildcard pattern matchingem, řazením priorit a vynucováním na úrovni šablon pro konzistentní pojmenování zdrojů napříč projekty
- Dashboard záložka reportů — Přepracovaný dashboard reportů se statistikami přehledu certifikátů, interaktivními grafy a exportovatelnými daty reportů
- Node.js SDK — Oficiální MazeVault SDK pro Node.js s TypeScript definicemi, podpora autentizace (SRP), organizací, projektů a správy tajemství
Vylepšení¶
- Audit log scoping na projekt — Auditní události nyní obsahují vazbu na projekt pro efektivní filtrování per projekt a compliance reporting; existující události zpětně doplněny z vazeb entit
- Oprava storage mode pro Orchestrator Mode — Normalizovány nekonzistentní hodnoty storage mode pro nasazení Orchestrator Mode, vyřešeny porušení omezení
- Entra Group Mappings — Vylepšená spolehlivost mapování skupin na role s lepším zpracováním chyb a zpětnou vazbou v UI
- Zpevnění šifrování konfigurace — Rozšířená služba šifrování konfigurace s dodatečným pokrytím testy a vylepšeným zpracováním chyb pro okrajové případy
- Validace importu certifikátů — Vylepšená služba importu certifikátů s přísnější validací řetězce
- Aktualizace Go SDK — Aktualizované definice projektů a modelů pro konzistenci s nejnovějším API
- Aktualizace Python SDK — Zarovnání modelů s nejnovějším API schématem
Opravy chyb¶
- Opraveno zbytečné vytváření prostředí pro nepoužívané projekty
- Vyřešen problém s přesměrováním SSO přihlášení Entra ID na určitých konfiguracích prohlížečů
- Opraven modál šablony projektu nezachovávající vazby na prostředí při uložení
Verze 1.0.18¶
Datum vydání: 2026-03-14
Vylepšení¶
- Zákaznická dokumentace aktualizována — Kompletní návod pro automatizaci certifikátů pomocí ACME s postupem nastavení Kubernetes krok za krokem, příklady cert-manager ClusterIssuer, směrování ACME profilů, řešení problémů a kompletní end-to-end YAML příklady; aktualizovaná API reference certifikátů s ACME endpointy a správou EAB; poznámky k verzím přeformátovány na správné verzovací schéma 1.0.x
- Vylepšená integrace Azure Entra ID — Vylepšené zpracování obnovení tokenů, spolehlivější mapování skupin na role, rychlejší přihlašování SSO se sníženou latencí přesměrování a lepší chybové hlášky pro špatně nakonfigurovaná nastavení tenanta
Verze 1.0.17¶
Datum vydání: 2026-03-14
Nové funkce¶
- ACME Server (RFC 8555) — MazeVault nyní funguje jako plnohodnotná ACME certifikační autorita, umožňující automatické vydávání certifikátů přes cert-manager a další ACME klienty
- External Account Binding (EAB) — Bezpečná registrace clusterů pomocí jednorázových přihlašovacích údajů propojujících ACME klienty s organizacemi a projekty
- Směrování ACME profilů — Mapování názvů profilů cert-manageru na šablony certifikátů MazeVault pro automatický výběr CA backendu (cert-manager v1.18+)
- Pravidla domén — Konfigurace pravidel pro směrování domén na šablony s podporou wildcardů a priorit
- Automatické schválení interních domén — Certifikáty pro domény
.local,.internal,.lana.corpjsou vydány okamžitě bez HTTP-01 výzvy - ADCS most přes ACME — Vydávání certifikátů z Microsoft Active Directory Certificate Services přes standardní ACME protokol
- Vylepšení ADCS agenta — DCOM logika opakování pro čekající žádosti o certifikáty s konfigurovatelným intervalem
- UI pro správu EAB přihlašovacích údajů — Generování, výpis a odvolání EAB přihlašovacích údajů z webového rozhraní s příklady YAML pro cert-manager
Vylepšení¶
- ACME directory endpoint s meta profily pro automatické vyhledávání klienty
- JWS middleware s ověřením podpisů ES256 a RS256
- Ochrana proti opakování na bázi nonce dle RFC 8555 §6.5
- Doručení kompletního PEM řetězce certifikátů pro ACME klienty
- Tabulka EAB přihlašovacích údajů se sledováním stavu (Dostupný / Použitý / Odvolaný)
- Kopírování jedním kliknutím pro URL ACME adresáře a vygenerované přihlašovací údaje
Bezpečnostní aktualizace¶
- EAB HMAC klíče šifrovány v úložišti pomocí AES-256-GCM
- EAB přihlašovací údaje jsou jednorázové a podporují expiraci a odvolání
- Ověření JWK Thumbprint (RFC 7638) pro vazbu účtu
- Všechny ACME operace zaznamenány v auditním logu
Verze 1.0.16¶
Datum vydání: 2026-02-28
Vylepšení¶
- Redesign nastavení organizací s navigací pomocí záložek
- Karty účtů certifikačních autorit se stavovými indikátory synchronizace
- Vylepšené zjišťování produktů CA a spouštění synchronizace přes UI
- Optimalizace intervalu heartbeatu agentů pro velké flotily
- Ladění pool připojení k databázi pro nasazení s vysokou souběžností
Opravy chyb¶
- Opravena validace řetězce certifikátů pro intermediate CA certifikáty
- Vyřešen race condition při souběžném plánování rotace tajemství
- Opravena invalidace cache OCSP responderu při revokaci certifikátu
Verze 1.0.15¶
Datum vydání: 2026-02-14
Vylepšení¶
- Import PFX/PKCS#12 s konfigurovatelným úložištěm klíčů (software / HSM)
- Podpora přepsání šablony certifikátu pro výchozí hodnoty na úrovni CA účtu
- Vylepšená logika opětovného připojení agenta po přerušení sítě
- Rozšířené filtrování auditního logu podle typu události a časového rozsahu
Opravy chyb¶
- Opraven export certifikátu s řetězcem pro cross-signed intermediate
- Vyřešeno neukládání nastavení šablony projektu po uložení
- Opravena deduplikace zjišťování SSH klíčů pro rotované klíče
Verze 1.0.14¶
Datum vydání: 2026-01-31
Vylepšení¶
- Vylepšení správy SSH klíčů — sledování a zjišťování autorizovaných klíčů
- Vylepšení spouštěčů rotace s ošetřením referenční integrity
- Sdílení tajemství po rotaci s automatickým přešifrováním
- Vylepšené chybové hlášky pro selhání ověření proxy agenta
Opravy chyb¶
- Opraveno zpracování časových zón plánovače rotace pro instalace mimo UTC
- Vyřešen nesoulad počtu certifikátů na dashboardu po hromadném importu
- Opravena kontrola expirace API tokenu pro servisní identity
Verze 1.0.13¶
Datum vydání: 2026-01-24
Vylepšení¶
- Modernizace React importů — optimalizované MUI importy pro tree-shaking
- Snížení velikosti frontend buildu (~15% menší bundle)
- Vylepšené vyhledávání certifikátů s wildcard SAN matchingem
- Rozšířené Prometheus metriky monitoringu s histogram buckety
Opravy chyb¶
- Opravena kontrola RBAC oprávnění pro vnořená prostředí projektů
- Vyřešeno formátování Terraform exportu pro komplexní hodnoty tajemství
- Opraven health check endpoint vracející zastaralý stav Redis
Verze 1.0.12¶
Datum vydání: 2026-01-17
Vylepšení¶
- Integrace skenování kontejnerových obrazů Trivy v CI/CD pipeline
- Remediace bezpečnostních zranitelností v řetězci závislostí
- Vylepšená konfigurace TLS cipher suite s profilem Mozilla Intermediate
- Rozšířený rate limiting s algoritmem posuvného okna
Opravy chyb¶
- Opraveno plánování obnovy certifikátů s vlastní platností
- Vyřešen konflikt synchronizace pro současně editovaná tajemství mezi datacentry
- Opravena validace registračního tokenu agenta pro znovu registrované agenty
Verze 1.0.11¶
Datum vydání: 2026-01-10
Vylepšení¶
- Monitoring zdraví připojení PostgreSQL s automatickým opětovným připojením
- Vylepšení architektury obousměrné synchronizace pro multi-region nasazení
- Opravy instalačního skriptu agenta pro air-gapped prostředí
- Vylepšení onboarding procesu pro scénáře vzdáleného nasazení
Opravy chyb¶
- Opraven rollback databázové migrace při selhání upgradu
- Vyřešena synchronizace LDAP skupin nereflektující změny členství
- Opravena paginace seznamu certifikátů pro projekty s > 1000 certifikáty
Verze 1.0.10¶
Datum vydání: 2026-01-03
Vylepšení¶
- Rozšířená detekce externích změn pro certifikáty spravované CA
- Vylepšená dokumentace hodnot Helm chartu s inline komentáři
- Dávkování notifikací o expiraci certifikátů pro snížení únavy z alertů
- Aktualizované Go závislosti s bezpečnostními záplatami
Opravy chyb¶
- Opraven CRDT merge pro souběžné vytváření verzí tajemství
- Vyřešena logika opakování synchronizace Azure Key Vault pro přechodné selhání
- Opraven OCSP responder vracející nesprávný stav pro obnovené certifikáty
Verze 1.0.9¶
Datum vydání: 2025-12-15
Nové funkce¶
- Systém šablon certifikátů — Předkonfigurované certifikátové profily pro běžné případy použití (Web Server, Client Auth, Code Signing, Email/S-MIME)
- Hromadné operace s certifikáty — Import a správa certifikátů hromadně přes PEM bundly
- Vylepšené zjišťování agentů — Automatické zjišťování certifikátů v infrastruktuře spravované agenty
- Vylepšení synchronizace — CRDT synchronizace mezi více datacentry s vylepšeným řešením konfliktů
- Export do Terraform — Export konfigurací projektů jako Terraform HCL pro infrastructure-as-code workflow
Vylepšení¶
- Vylepšená validace importu certifikátů a hlášení chyb
- Zvýšený výkon OCSP responderu s cachováním odpovědí
- Aktualizovaný RBAC s granulárními oprávněními pro správu certifikátů
- Vylepšené auditní logování se strukturovaným JSON výstupem
- Rozšířené endpointy kontroly zdraví se stavem na úrovni komponent
Bezpečnostní aktualizace¶
- TLS 1.3 jako výchozí protokol
- Vylepšená CSRF ochrana s double-submit cookie pattern
- Rozšířený rate limiting s konfigurací per endpoint
- Aktualizované kryptografické závislosti
Verze 1.0.8¶
Datum vydání: 2025-11-20
Nové funkce¶
- Integrace s externí CA — Propojení s DigiCert, Venafi, Microsoft ADCS a dalšími externími certifikačními autoritami
- Podpora HSM — Integrace Hardware Security Module pro ochranu klíčů (PKCS#11, Azure Managed HSM)
- ACME protokol — Automated Certificate Management Environment pro automatizované vydávání certifikátů
- Vícefaktorová autentizace — MFA založená na TOTP pro zvýšenou bezpečnost účtů
Vylepšení¶
- Přepracované rozhraní pro správu certifikátů
- Vylepšené plánování rotace tajemství
- Rozšířený API rate limiting
- Rozšířená integrace s Azure Key Vault
Verze 1.0.7¶
Datum vydání: 2025-09-10
Nové funkce¶
- Zero-Knowledge šifrování — Šifrování na straně klienta pro tajemství osobního trezoru
- Podpora SCEP protokolu — Simple Certificate Enrollment Protocol pro správu certifikátů zařízení
- Podpora EST protokolu — Enrollment over Secure Transport pro moderní registraci certifikátů
- Proxy agenta — Agenti mohou zprostředkovat přístup k tajemstvím pro lokální aplikace
Vylepšení¶
- Vylepšený systém databázových migrací
- Rozšířené logování a monitoring
- Aktualizované manifesty pro Kubernetes nasazení
- Vylepšení výkonu pro velká úložiště certifikátů
Verze 1.0.6¶
Datum vydání: 2025-06-15
Nové funkce¶
- Synchronizace více datacenter — Obousměrná synchronizace mezi instalacemi MazeVault
- Azure Entra ID SSO — Single Sign-On s Azure Active Directory
- RBAC na úrovni projektů — Granulární řízení přístupu na základě rolí per projekt
- Distribuce CRL — Automatizované generování a distribuce Certificate Revocation List
Vylepšení¶
- Vylepšený dashboard s aktualizacemi stavu v reálném čase
- Rozšířené vyhledávání a filtrování certifikátů
- Aktualizovaná API dokumentace se specifikací OpenAPI 3.0
- Vylepšená bezpečnost kontejnerových obrazů
Verze 1.0.5¶
Datum vydání: 2025-03-20
Nové funkce¶
- OCSP Responder — Real-time Online Certificate Status Protocol responder
- Verzování tajemství — Kompletní historie verzí s možností rollbacku
- Správa agentů — Centralizovaná registrace a monitoring agentů
- LDAP integrace — Podpora autentizace přes adresářové služby
Verze 1.0.4¶
Datum vydání: 2024-12-10
Nové funkce¶
- Interní certifikační autorita — Kompletní PKI s podporou root a intermediate CA
- Správa životního cyklu certifikátů — Žádost, schválení, vydání, obnova a revokace certifikátů
- Helm charty — Standardizované nasazení v Kubernetes přes Helm
Verze 1.0.3¶
Datum vydání: 2024-09-15
Nové funkce¶
- Integrace s Azure Key Vault — Synchronizace tajemství s Azure Key Vault
- Rotace tajemství — Automatizovaná a manuální rotace tajemství
- Kubernetes nasazení — AKS nasazení s Terraform
Verze 1.0.2¶
Datum vydání: 2024-06-20
Nové funkce¶
- Řízení přístupu na základě rolí — Uživatelské role a oprávnění
- Správa projektů — Organizace tajemství do projektů
- API v1 — Kompletní REST API pro správu tajemství
Verze 1.0.1¶
Datum vydání: 2024-03-01
Úvodní vydání¶
- Šifrované úložiště tajemství s AES-256-GCM
- Webové správcovské rozhraní
- PostgreSQL backend s Redis cachováním
- Docker Compose nasazení
- Lokální autentizace s SRP protokolem
Zásady podpory
MazeVault podporuje aktuální verzi a jednu předchozí minor verzi. Zákazníkům na starších verzích doporučujeme provést upgrade pro získání bezpečnostních aktualizací a nových funkcí.