# Kubernetes and VM Basic Auth Needed One Endpoint, Not Four

> A deployed service's web address with no password on it is one click away from being locked down. ZopDay puts that click right next to the address itself: an admin clicks a lock icon, and the service…

Source: https://zop.dev/resources/blogs/basic-auth-for-services-needed-one-endpoint-not-four
Published: 2026-09-30 · Author: riya-mittal · Tags: cloudops, kubernetes, zopday

---

A [deployed service's web address](https://zop.dev/resources/blogs/shareable-install-link-zopday) with no password on it is one click away from being locked down. ZopDay puts that click right next to the address itself: an admin clicks a lock icon, and the service gets HTTP Basic Auth. ZopDay generates both the username and the password. The password shows exactly once, with a Copy credentials control that grabs both values at once, because there won't be a second chance to see it on screen again. From that same place, the password can be rotated while the username stays fixed, or the whole thing can be removed. It works the same way whether the service runs on Kubernetes or on a VM, ZopCloud included.

## Only a Hash Is Ever Stored

The provisioner builds the username as the service's own name plus six random characters, and generates a 24-character password alongside it. What actually persists afterward is the bcrypt hash of that password, nothing else. The real credential pair is handed back to whoever enabled the feature exactly once, at creation time, and never persisted anywhere in a form that could be read back out later. A system that can't produce your password even under compulsion is a meaningfully stronger guarantee than one that merely promises not to show it to anyone.

## One Feature, Three Enforcement Surfaces

Where that hash actually gets enforced depends entirely on which infrastructure owns the service's route, and each one works differently.

<img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGRhdGEtZDItdmVyc2lvbj0iMC43LjEiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHZpZXdCb3g9IjAgMCAxNjE2IDQzNCIgd2lkdGg9IjE2MTYiIGhlaWdodD0iNDM0Ij48c3ZnIGNsYXNzPSJkMi00MTExMzk2MjkgZDItc3ZnIiB3aWR0aD0iMTYxNiIgaGVpZ2h0PSI0MzQiIHZpZXdCb3g9Ii0xMDEgLTEwMSAxNjE2IDQzNCI+PHJlY3QgeD0iLTEwMS4wMDAwMDAiIHk9Ii0xMDEuMDAwMDAwIiB3aWR0aD0iMTYxNi4wMDAwMDAiIGhlaWdodD0iNDM0LjAwMDAwMCIgcng9IjAuMDAwMDAwIiBmaWxsPSIjRkZGRkZGIiBjbGFzcz0iIGZpbGwtTjciIHN0cm9rZS13aWR0aD0iMCIgLz48c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhW0NEQVRBWwouZDItNDExMTM5NjI5IC50ZXh0LWJvbGQgewoJZm9udC1mYW1pbHk6ICJkMi00MTExMzk2MjktZm9udC1ib2xkIjsKfQpAZm9udC1mYWNlIHsKCWZvbnQtZmFtaWx5OiBkMi00MTExMzk2MjktZm9udC1ib2xkOwoJc3JjOiB1cmwoImRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2Jhc2U2NCxkMDlHUmdBQkFBQUFBQkE0QUFvQUFBQUFHR2dBQWd1RkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlBVeTh5QUFBQTlBQUFBR0FBQUFCZ1h4SFhybU50WVhBQUFBRlVBQUFBdXdBQUFRSUZJd1hYWjJ4NVpnQUFBaEFBQUFsbUFBQU1rRStsT3JKb1pXRmtBQUFMZUFBQUFEWUFBQUEyRzM4ZTFHaG9aV0VBQUF1d0FBQUFKQUFBQUNRS2Z3WHBhRzEwZUFBQUM5UUFBQUNrQUFBQXFGQ1VCbVZzYjJOaEFBQU1lQUFBQUZZQUFBQldTZFpIQkcxaGVIQUFBQXpRQUFBQUlBQUFBQ0FBUWdEM2JtRnRaUUFBRFBBQUFBTW9BQUFJS2dqd1ZrRndiM04wQUFBUUdBQUFBQjBBQUFBZy85RUFNZ0FEQWlvQ3ZBQUZBQUFDaWdKWUFBQUFTd0tLQWxnQUFBRmVBRElCS1FBQUFnc0hBd01FQXdJQ0JHQUFBdmNBQUFBREFBQUFBQUFBQUFCQlJFSlBBQ0FBSVAvL0F1Ny9CZ0FBQTlnQkVTQUFBWjhBQUFBQUFmQUNsQUFBQUNBQUEzaWNqTTQ3Sy9VQkFNZnh6M25PL3psdXgvMSsvN3VkQmFXWXppYWpUTXBna1ZFWnBDUXZDSm1VTEd3Vzc4Tm9rTzBZREQ5bFl2T2RQOE1YRlZVVjFCVmFhQ2dWYWtyTFZxeGFzNkZweTdZZHUvYnNPM0RreEptTGhCOXVYZFBtTDNmbzJLbnpKQy81VENzZmVjOWJYdk9VeHp6a1BuZTV6WE51Y3AyclhINWYvS1dLaG5tTFpwWG1MUGlucXZCZlRadDJIWlowNmxMWHJVZXZQdjBHREJveWJNU29NZU1tVEpveWJZWXZBQUFBLy84QkFBRC8vM3M0TXR3QWVKeGNWbXR3RzlYWmZzL1JXbXZMNjR1MFdxM3V0NVYyVjVJdDIxcXQ1SXRzMmJFc3g0NGQzeExiQVY4Z0E4RjhkcHg4aWZuaThJWHlveFJhY0lhMlRoblRNRnd5WmFabGttbVl0dE9VbWRBWnBrQXo4S1BUUVBuVEZqcnRaT2gwQ29hcURGQjcxVGtyT1hIeVkzMDhtdDN6UHMvelB1OXpEbFRBS0FBK2pNK0JBYXFnRGl6QUFTam1nRG1zU0pKQXA1VjBXdUFOYVFtWjZWRnMwVjcra1JTaEloRXE2dC93UFR3L2o0Ym44TG50cGJ1SER4LytZcjZqUTN2K1Y2OXBaOUhKMXdCdzhXc0EzSXZYb0FyTUFDeXRTS0lvQ1VhamdWVllRUkxvRy9WUDFkVzRhaWpHOGZXN3I3NzduUHkyakFZem1aWmxKWGxVK3haZTIxNDVmeDRBd0FEREFEaUQxOEFNVGdnU2JFckNadU9zUnByVEY2TmdVQklwTlNrS2dsbEo2T3Z3aDdtbDdrWTUwWnM3MFQvZmwycEpKUE1UcHpPZEUzak5rOC9HSnVxb21uMDl2UWNpNkltb0lQcTE2ZWxZR0FCQnZGakF6WGdEWEFBVlFWRlVrNm1Va3JEeHRDZ0tRYU9SczlxVVJDck5HOUhzK0pNVEI4K09aKzhMN0hla2hZYUIyT1JlT1d2ZlA4NE0vZURvMHJOalNuQ085eVRtOXR4M1BPU1l1UWVRam44SnJ3R2pZemNyckdKZ0JRUE5EYTlUYjF4NDgrOHZ2VENFMTdSL28ycHRTMXRGN0gwL2hmSTNsL0FhK1BSdldKdU5WMUtwTkt1WUJRSXJMZEMwSUVtQ0YzUGM4RXNQbWl3bXltUTJQZkRpNDNTVmdWSm54MmFURkZWSjR6WHR6KzR1cjdmTGpZTGJLNS82UjBaOTU3LzY2cnh2ZE1UL0tha2hGQXZZaERjZ3F2T1YwalpiU1VkSml1UGJ5WE5XRzgrWHhFYlc3a2NUQjRSSk9kNm94QTRHTW1MSGc3blc0OUY5L201SmJHeUxIdWpJdHk4enpmSDd2V0xRNC9OWVFyVk4rYWJVZExJaE91dHcrZHhlcnpsb1A5Q1htbWtGVlB3S0FDdDREV29BRk1NdWpvYlgzM3h1ZngxZlI5WGFhNGVmK1ExZTAzNm5Ia21sanFpb2VYc0ZFSVFBMEpidUsxQlVGRkFESEFwd0llVFgvb05lMHo1Q3dpSDB5ek9IdElFekFCaWl4UUo2RDIyQkF3UUFQa2lhbXRZcDBaSk9rRE1MeEpQcFJDcXQ2ajErUFRmNjJEb1dJcjd1a05xMDJENS9aTlZFK2ZvckhXRjJmOGJIVEdYM1Q5Y0ZKRHQzcnllMGZFTDdtK0lXVHZEc2xDbm1zZk5BNnZVVUM5aUdyNEtWZEk2b0t0Q0NXZUZvdlpndW9FUTBGb0xFdktndjBPdWhtSlBybENjWHpFdzNaZWFueGRSa1E4UXFNd0cvaXE5ZUhISjZ1djUzNk9EcDdHcCs2UEhHZHl5MVFQb1dLaGJRVmJRRnpqdDlXdXBVeWFWRzVPZzcxclAzLzNMeGZuZWY0RmV6MldaN25HMFBUektkRDQxUHJIUjYrWG5QVUUvM01GZDNqOThGT25hcFdFQmIrQ3F3NE4vUlN0OVlVcFZkS3UwWTR2T1pZeDN6eVVpcnc3aSthcUtjZVd5WExHek1LcVNhbUtkT2p6M1U1YllQL1dTN3Q4VXByRm9kNzFocWUvc0grZ0RyMlArQ3RzQmUxbWVuaUQ3UEFlSkFndDJnSkVrVjVPcy9zYWQzcWFOL3RvbkMyZ2VtZkl1YWFoSG5mdmd6cVNHWVlycFd4c2RXc3RuRkhCdXVTaW1CUTA0dmFvK29UYUJyWkFkQUsvZ2FXY25NcE8vd002ZHdndm11UFh0Q283MitaTDJyeHNtNHZJY09vVWVPVnJqVXlTUmpYS3FvQ0lqZWs5bzNTZjRFaTQyWVJsdlFCQjB3cUNzanFra2lCREdUdWtPQlZ6aWhuRWRCU2U4RHNaZlZhRFNVd2trWGpTMEhWVkRVWC9tOGZhNjFuM1g1N2M1SSs1emFFUGpGQ0YyVm5FNTdmSlpnWkhUbTN0eVpRWThrZVR5U0ZFbDBTMkhGRVdCY25kZWRyUTBabWFxUmZhNUVQV1hKeFRJak1yTllIYlMyRFlaTWRUYlcwdEdyak1YUnRXaEVpc2h5SktxdGh4eDh2Y0ZnZDdnOUpXMTZTTE4xajVKc0tYdVRNd3RtSFNWdDdsbW4zZnNTWXdQckhyOWJ0dU9yRnc4NVlvdXoycnNva0pJZHZQWXFGSXVRQm9BLzRldFlCQWtBYUpEaHlkTGV4UUt5NEt0UVYzS1FXVEhmTk9Sdmh6cld6VlVWdE5IQ2hKbTc5MkZoK3dQZWd0RFJDcnFFeWVCQld4RFFNWkVnSU4yNkRSbDljKzBoTTVsdlVYdll3R0RMNkw1MWp6L2NUUDQwb2MxdVgyTk1EcmJzd0czV1hpMHZPN3pSVnBsM3VjWnUzcXNteWo5OGt6amF6SG9iYitOZDhxL3VoYm83VG9sYm8xM3VOTEpsaitWeXg3TFo1Vnh1T2RzWWp6ZkdHeHZMczllNU1qSCtVT2VwNGU2ZUlUS0NwZHpZaTIxb0MxandBdkMzME9sMkVpV2VZMi9GQnNIcEdaRHVXc2pNcC93Wlo4V0ltSnFNUmEzeUZmempGcWZ3blpNSFY3TXV4OGozVU9obWFPamMwZE5vQ3l5MzZWdWFoaEp6MTVESXVVMzJHa2U5dTlPS05xY1NMUlVWajFKVUpLRjlCQWk0WWdHOWdMWkl0L25kWjRWWU9pdHVia1pPQ2kvbXJNYnJMUStJZTRKWlg4RHJpVHU5SGZLREI5dW1mSHVjU1dkYm0ranZqQ3d3b20vRzRlSlpzNDAxTWFHMlNOK2taSisyMmlTN283WmFhSXYzenBhOGFpNFcwREplQVY1WFcxVUZOWjFXeVBUdUNqcVlHY2tObVI4K2RVcndNQTRUejZhWi81bThkdFQ0MkdNbjM0NkdqZFNpa1NudGxTa1cwSmRvay9UL05tK2F5L0gyaDdHQmRhL2ZMZHJXVjZzTnZrRm1jUllsdFEvVmlOT0Q5bXIxZmVHR1VxN2dUYlNwKzlTZzhPVXpLNzNyUDROUXZ1ZlE5TGt6MzI4Mm1vd1VYVk9WZnJTMXFvNm02Q3E2NmR1bkxqYlNOVFJGVjlNTmFQTkdlSzhvRGdvMzlIVnYrSVpXLzVhUWwrVzg4SmFPbVRTdmdEYkJBYUN3MHE0eU5IK3JUdTNHMDg4M21Hd21xdEpTR2R6NDdyUFBOek04UTFWWnF5U0VQeG5sWWh3WDQwYUxuNDF6RFJ3WHM0MlRmWmxpRjlwR204VEZ0L3FaVHUrbVpLakZxN1pBblpPMlZJWmxFLzNyYy8zVkZoTlZhYTdLbkwzSXQ0NjhZYVNPbzRxUXg0bisrbjR3SHhiNmhmZTE2cTZEMGRKWkVpNFcwRC93RTFCZG5wT1NSemdybVJIZE4rVXJsUTFWSG5ua2tTUGtjY2c4THp2c3N0MHVNNjljdVBEeXl4Y3V2SElpUERjMU5STU16a3hOemVsM05GdXhnRDdFVDBEa1RoOEs2czd3N1p6c3R5NkkveG8rS3VROGVibXAxVDNZTjlrdGk4RzBkN0RoY1B2aDAya2wzZCt6eUNUa1dYZElDcmtqdG9VbU1SRDJPdThTWTNkUHRPUnRWUDF3VjhkRXJNU0pCVUJmNHYrSEt1SWdWaUhwVCtSbjFZREtraUFWdUJjZnIwQVU0NnhOYVAvOCtPY0RBNmp5QWQrWTE1bHlhY3NiOTZOdmFHZVBiNVR1bVYwSTRCS1pSVjVLcGFSZ1VOZ2wwSkMzdFIxaENndXBsSmhJenJ5eDM5b1Rqc2xpZkxCbmZCV0FaRzluc1FDZm9zK3dSRlJBT1RDU0ZSREU0Qm9Lb0JZd0FLUlZoWXQ5Y1cxaG9kVHJGZlJ4OFczeU82OEdPQWI5Y1cxaUFoQUVZUTU5Z2xOUVRkNFhWRVV0RGRidkwxOWV1bng1N3NyQ2xTc0xWOHJaQWUraFRmSTl1Yi8ycktOTnJSNVE4Ukp1Z3dsOG5YeHYza1VnSEkrSHcvRTRib3NLUXBROFpBOGRNMXdpNy9LNzNuMUdWQlJSVkJSR2xXUlZsU1VWL2dzQUFQLy9BUUFBLy84c2Fwb0lBQUFBQVFBQUFBSUxoYXNNV2FsZkR6ejFBQUVENkFBQUFBRFlYYUNFQUFBQUFOMW1MemIrTi83RUNHMEQ4UUFCQUFNQUFnQUFBQUFBQUFBQkFBQUQyUDd2QUFBSW1QNDMvamNJYlFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBS25pY0hNb3hhc0pnR0lmeDUvMEhTZ3VsVFdrYXNyUkRtbEpvUHJKV01OL3dMazRHWEJ3Y1hMMkdOL0FtTHE1ZXdOMnJ1SmdsWXRibitlbkFnaE1vRHIzV2RKclJhRU9ubms2QmI0WGhxazhxdmZLbmlOdVpTcEZmUFZEWmtrSTVwYWE0WmZ6YkY1NnNjTFc0NnRHNTdYQTc4bUZiM2pTaFRSNHBKRjcweExOU2ZwU1NLK1hkQW8wRm9zMnA3VEsrMGpJY2h2Mjkzd0FBQVAvL0FRQUEvLzh1UFJnNUFBQUFMQUFzQUZBQWhBQ3dBTW9BL0FFOEFWZ0JiZ0dtQWRnQ0JBSTJBbW9Da0FMNEF4b0RKZ05DQTNRRGxnUENBL0lFRWdST0JIUUVsZ1RPQlBvRktnVldCWlFGdUFYWUJlUUY4QVg4QmhBR0hBWXlCa2dBQUFBQkFBQUFLZ0NRQUF3QVl3QUhBQUVBQUFBQUFBQUFBQUFBQUFBQUJBQURlSnljbE05dUcxVVV4bjlPYk5NS3dRSkZWYnFKN29KRmtlallWRW5WTml1SDFJcEZGQWVQQzBKQ1NCUFArSTh5bmhsNUpnN2hDVmp6RnJ4RlZ6d0V6NEZZby9sODdOZ0YwU2FLa254Mzd2bnpuWE8rYzRFZC9tYWJTdlVoOEVjOU1WeGhyMzV1ZUlzSDlSUEQyN1RyVzRhclBLbjlhYmhHV0pzYnJ2TjVyV2Y0STk1V2Z6UDhnUDNxVDRZZnNsdHRHLzZZWjlVZHc1OXNPLzR5L0NuN3ZGM2dDcnpnVjhNVmRza01iN0hEajRhM2VZVEZyRlI1Uk5Od2pjL1lNMXhuRCtnem9TQm1Rc0lJeDVBSkk2NllFWkhqRXpGandwQ0lFRWVIRmpHRnZpWUVRbzdSZjM0TjhDbVlFU2ppbUFKSGpFOU1RTTdZSXY0aXI1UnpaUnpxTkxPN0ZnVmpBaTdrY1VsQWdpTmxSRXBDeEtYaUZCUmt2S0pCZzV5QitHWVU1SGprVElqeFNKa3hva0dYTnFmMEdUTWh4OUZXcEpLWlQ4cVFnbXNDNVhkbVVYWm1RRVJDYnF5dVNBakYwNGxmSk84T3B6aTZaTEpkajN5NkVlRkxITi9KdStTV3l2WXJQUDI2TldhYmVaZHNBdWJxWjZ5dXhMcTUxZ1RIdWkzenR2aFd1T0FWN2w3OTJXVHkvaDZGK2w4bzhnVlhtbitvU1NWaWt1RGNMaTE4S2NoM2ozRWM2ZHpCVjBlK3AwT2ZFN3E4b2E5eml4NDlXcHpScDhOcitYYnA0ZmlhTG1jY3k2TWp2TGhyU3pGbi9JRGpHenF5S1dOSDFwL0Z4Q0orSmpOMTUrSTRVeDFUTXZXOFpPNnAxa2dWM24zQzVRNmxHK3JJNVRQUUhwV1dUdk5MdEdjQkkxTkZKb1pUOVhLcGpkejZGNW9pcHFxbG5PM3RmYmtOYzl1OTVSYmZrR3FIUzdVdU9KV1RXekI2MzFTOWR6UnpyUitQZ0pDVUMxa01TSm5Tb09CR3ZNOEp1Q0xHY2F6dW5XaExDbG9ybnpMUGpWUVNNUldERG9uaXpNajBOekRkK01aOXNLRjdaMjlKS1ArUzZlV3FxdnRrY2VyVjdZemVxSHZMTzkrNkhLMU5vR0ZUVGRmVU5CRFh4TFFmYWFmVytmdnl6Zlc2cFR6bGlKU1k4Rjh2d0RNOG11eHp3Q0ZqWlJqb1ptNnZRMU12UkpPWEhLcjZTeUpaRGFYbnlDSWM0UEdjQXc1NHlmTjMrcmhrNG95TFczRlp6OTNpbUNPNkhINVFGUXY3TGtlOFhuMzcvNnkvaTJsVHRUaWVyazR2N2ozRkozZFE2eGZhczl2M3NxZUpsWk9ZVzdUYnJUZ2pZRnB5Y2J2ck5ibkhlUDhBQUFELy93RUFBUC8vOUxkUFVYaWNZbUJtQUlQLzV4aU1HTEFBQUFBQUFQLy9BUUFBLy84dkFRSURBQUFBIik7Cn1dXT48L3N0eWxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbLnNoYXBlIHsKICBzaGFwZS1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwp9Ci5jb25uZWN0aW9uIHsKICBzdHJva2UtbGluZWNhcDogcm91bmQ7CiAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDsKfQouYmxlbmQgewogIG1peC1ibGVuZC1tb2RlOiBtdWx0aXBseTsKICBvcGFjaXR5OiAwLjU7Cn0KCgkJLmQyLTQxMTEzOTYyOSAuZmlsbC1OMXtmaWxsOiMwQTBGMjU7fQoJCS5kMi00MTExMzk2MjkgLmZpbGwtTjJ7ZmlsbDojNjc2QzdFO30KCQkuZDItNDExMTM5NjI5IC5maWxsLU4ze2ZpbGw6Izk0OTlBQjt9CgkJLmQyLTQxMTEzOTYyOSAuZmlsbC1ONHtmaWxsOiNDRkQyREQ7fQoJCS5kMi00MTExMzk2MjkgLmZpbGwtTjV7ZmlsbDojREVFMUVCO30KCQkuZDItNDExMTM5NjI5IC5maWxsLU42e2ZpbGw6I0VFRjFGODt9CgkJLmQyLTQxMTEzOTYyOSAuZmlsbC1ON3tmaWxsOiNGRkZGRkY7fQoJCS5kMi00MTExMzk2MjkgLmZpbGwtQjF7ZmlsbDojMEQzMkIyO30KCQkuZDItNDExMTM5NjI5IC5maWxsLUIye2ZpbGw6IzBEMzJCMjt9CgkJLmQyLTQxMTEzOTYyOSAuZmlsbC1CM3tmaWxsOiNFM0U5RkQ7fQoJCS5kMi00MTExMzk2MjkgLmZpbGwtQjR7ZmlsbDojRTNFOUZEO30KCQkuZDItNDExMTM5NjI5IC5maWxsLUI1e2ZpbGw6I0VERjBGRDt9CgkJLmQyLTQxMTEzOTYyOSAuZmlsbC1CNntmaWxsOiNGN0Y4RkU7fQoJCS5kMi00MTExMzk2MjkgLmZpbGwtQUEye2ZpbGw6IzRBNkZGMzt9CgkJLmQyLTQxMTEzOTYyOSAuZmlsbC1BQTR7ZmlsbDojRURGMEZEO30KCQkuZDItNDExMTM5NjI5IC5maWxsLUFBNXtmaWxsOiNGN0Y4RkU7fQoJCS5kMi00MTExMzk2MjkgLmZpbGwtQUI0e2ZpbGw6I0VERjBGRDt9CgkJLmQyLTQxMTEzOTYyOSAuZmlsbC1BQjV7ZmlsbDojRjdGOEZFO30KCQkuZDItNDExMTM5NjI5IC5zdHJva2UtTjF7c3Ryb2tlOiMwQTBGMjU7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1OMntzdHJva2U6IzY3NkM3RTt9CgkJLmQyLTQxMTEzOTYyOSAuc3Ryb2tlLU4ze3N0cm9rZTojOTQ5OUFCO30KCQkuZDItNDExMTM5NjI5IC5zdHJva2UtTjR7c3Ryb2tlOiNDRkQyREQ7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1ONXtzdHJva2U6I0RFRTFFQjt9CgkJLmQyLTQxMTEzOTYyOSAuc3Ryb2tlLU42e3N0cm9rZTojRUVGMUY4O30KCQkuZDItNDExMTM5NjI5IC5zdHJva2UtTjd7c3Ryb2tlOiNGRkZGRkY7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1CMXtzdHJva2U6IzBEMzJCMjt9CgkJLmQyLTQxMTEzOTYyOSAuc3Ryb2tlLUIye3N0cm9rZTojMEQzMkIyO30KCQkuZDItNDExMTM5NjI5IC5zdHJva2UtQjN7c3Ryb2tlOiNFM0U5RkQ7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1CNHtzdHJva2U6I0UzRTlGRDt9CgkJLmQyLTQxMTEzOTYyOSAuc3Ryb2tlLUI1e3N0cm9rZTojRURGMEZEO30KCQkuZDItNDExMTM5NjI5IC5zdHJva2UtQjZ7c3Ryb2tlOiNGN0Y4RkU7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1BQTJ7c3Ryb2tlOiM0QTZGRjM7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1BQTR7c3Ryb2tlOiNFREYwRkQ7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1BQTV7c3Ryb2tlOiNGN0Y4RkU7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1BQjR7c3Ryb2tlOiNFREYwRkQ7fQoJCS5kMi00MTExMzk2MjkgLnN0cm9rZS1BQjV7c3Ryb2tlOiNGN0Y4RkU7fQoJCS5kMi00MTExMzk2MjkgLmJhY2tncm91bmQtY29sb3ItTjF7YmFja2dyb3VuZC1jb2xvcjojMEEwRjI1O30KCQkuZDItNDExMTM5NjI5IC5iYWNrZ3JvdW5kLWNvbG9yLU4ye2JhY2tncm91bmQtY29sb3I6IzY3NkM3RTt9CgkJLmQyLTQxMTEzOTYyOSAuYmFja2dyb3VuZC1jb2xvci1OM3tiYWNrZ3JvdW5kLWNvbG9yOiM5NDk5QUI7fQoJCS5kMi00MTExMzk2MjkgLmJhY2tncm91bmQtY29sb3ItTjR7YmFja2dyb3VuZC1jb2xvcjojQ0ZEMkREO30KCQkuZDItNDExMTM5NjI5IC5iYWNrZ3JvdW5kLWNvbG9yLU41e2JhY2tncm91bmQtY29sb3I6I0RFRTFFQjt9CgkJLmQyLTQxMTEzOTYyOSAuYmFja2dyb3VuZC1jb2xvci1ONntiYWNrZ3JvdW5kLWNvbG9yOiNFRUYxRjg7fQoJCS5kMi00MTExMzk2MjkgLmJhY2tncm91bmQtY29sb3ItTjd7YmFja2dyb3VuZC1jb2xvcjojRkZGRkZGO30KCQkuZDItNDExMTM5NjI5IC5iYWNrZ3JvdW5kLWNvbG9yLUIxe2JhY2tncm91bmQtY29sb3I6IzBEMzJCMjt9CgkJLmQyLTQxMTEzOTYyOSAuYmFja2dyb3VuZC1jb2xvci1CMntiYWNrZ3JvdW5kLWNvbG9yOiMwRDMyQjI7fQoJCS5kMi00MTExMzk2MjkgLmJhY2tncm91bmQtY29sb3ItQjN7YmFja2dyb3VuZC1jb2xvcjojRTNFOUZEO30KCQkuZDItNDExMTM5NjI5IC5iYWNrZ3JvdW5kLWNvbG9yLUI0e2JhY2tncm91bmQtY29sb3I6I0UzRTlGRDt9CgkJLmQyLTQxMTEzOTYyOSAuYmFja2dyb3VuZC1jb2xvci1CNXtiYWNrZ3JvdW5kLWNvbG9yOiNFREYwRkQ7fQoJCS5kMi00MTExMzk2MjkgLmJhY2tncm91bmQtY29sb3ItQjZ7YmFja2dyb3VuZC1jb2xvcjojRjdGOEZFO30KCQkuZDItNDExMTM5NjI5IC5iYWNrZ3JvdW5kLWNvbG9yLUFBMntiYWNrZ3JvdW5kLWNvbG9yOiM0QTZGRjM7fQoJCS5kMi00MTExMzk2MjkgLmJhY2tncm91bmQtY29sb3ItQUE0e2JhY2tncm91bmQtY29sb3I6I0VERjBGRDt9CgkJLmQyLTQxMTEzOTYyOSAuYmFja2dyb3VuZC1jb2xvci1BQTV7YmFja2dyb3VuZC1jb2xvcjojRjdGOEZFO30KCQkuZDItNDExMTM5NjI5IC5iYWNrZ3JvdW5kLWNvbG9yLUFCNHtiYWNrZ3JvdW5kLWNvbG9yOiNFREYwRkQ7fQoJCS5kMi00MTExMzk2MjkgLmJhY2tncm91bmQtY29sb3ItQUI1e2JhY2tncm91bmQtY29sb3I6I0Y3RjhGRTt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItTjF7Y29sb3I6IzBBMEYyNTt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItTjJ7Y29sb3I6IzY3NkM3RTt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItTjN7Y29sb3I6Izk0OTlBQjt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItTjR7Y29sb3I6I0NGRDJERDt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItTjV7Y29sb3I6I0RFRTFFQjt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItTjZ7Y29sb3I6I0VFRjFGODt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItTjd7Y29sb3I6I0ZGRkZGRjt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItQjF7Y29sb3I6IzBEMzJCMjt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItQjJ7Y29sb3I6IzBEMzJCMjt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItQjN7Y29sb3I6I0UzRTlGRDt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItQjR7Y29sb3I6I0UzRTlGRDt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItQjV7Y29sb3I6I0VERjBGRDt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItQjZ7Y29sb3I6I0Y3RjhGRTt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItQUEye2NvbG9yOiM0QTZGRjM7fQoJCS5kMi00MTExMzk2MjkgLmNvbG9yLUFBNHtjb2xvcjojRURGMEZEO30KCQkuZDItNDExMTM5NjI5IC5jb2xvci1BQTV7Y29sb3I6I0Y3RjhGRTt9CgkJLmQyLTQxMTEzOTYyOSAuY29sb3ItQUI0e2NvbG9yOiNFREYwRkQ7fQoJCS5kMi00MTExMzk2MjkgLmNvbG9yLUFCNXtjb2xvcjojRjdGOEZFO30uYXBwZW5kaXggdGV4dC50ZXh0e2ZpbGw6IzBBMEYyNX0ubWR7LS1jb2xvci1mZy1kZWZhdWx0OiMwQTBGMjU7LS1jb2xvci1mZy1tdXRlZDojNjc2QzdFOy0tY29sb3ItZmctc3VidGxlOiM5NDk5QUI7LS1jb2xvci1jYW52YXMtZGVmYXVsdDojRkZGRkZGOy0tY29sb3ItY2FudmFzLXN1YnRsZTojRUVGMUY4Oy0tY29sb3ItYm9yZGVyLWRlZmF1bHQ6IzBEMzJCMjstLWNvbG9yLWJvcmRlci1tdXRlZDojMEQzMkIyOy0tY29sb3ItbmV1dHJhbC1tdXRlZDojRUVGMUY4Oy0tY29sb3ItYWNjZW50LWZnOiMwRDMyQjI7LS1jb2xvci1hY2NlbnQtZW1waGFzaXM6IzBEMzJCMjstLWNvbG9yLWF0dGVudGlvbi1zdWJ0bGU6IzY3NkM3RTstLWNvbG9yLWRhbmdlci1mZzpyZWQ7fS5za2V0Y2gtb3ZlcmxheS1CMXtmaWxsOnVybCgjc3RyZWFrcy1kYXJrZXItZDItNDExMTM5NjI5KTttaXgtYmxlbmQtbW9kZTpsaWdodGVufS5za2V0Y2gtb3ZlcmxheS1CMntmaWxsOnVybCgjc3RyZWFrcy1kYXJrZXItZDItNDExMTM5NjI5KTttaXgtYmxlbmQtbW9kZTpsaWdodGVufS5za2V0Y2gtb3ZlcmxheS1CM3tmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItNDExMTM5NjI5KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUI0e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktQjV7ZmlsbDp1cmwoI3N0cmVha3MtYnJpZ2h0LWQyLTQxMTEzOTYyOSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1CNntmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItNDExMTM5NjI5KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnNrZXRjaC1vdmVybGF5LUFBMntmaWxsOnVybCgjc3RyZWFrcy1kYXJrLWQyLTQxMTEzOTYyOSk7bWl4LWJsZW5kLW1vZGU6b3ZlcmxheX0uc2tldGNoLW92ZXJsYXktQUE0e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktQUE1e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktQUI0e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktQUI1e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktTjF7ZmlsbDp1cmwoI3N0cmVha3MtZGFya2VyLWQyLTQxMTEzOTYyOSk7bWl4LWJsZW5kLW1vZGU6bGlnaHRlbn0uc2tldGNoLW92ZXJsYXktTjJ7ZmlsbDp1cmwoI3N0cmVha3MtZGFyay1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOm92ZXJsYXl9LnNrZXRjaC1vdmVybGF5LU4ze2ZpbGw6dXJsKCNzdHJlYWtzLW5vcm1hbC1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOmNvbG9yLWJ1cm59LnNrZXRjaC1vdmVybGF5LU40e2ZpbGw6dXJsKCNzdHJlYWtzLW5vcm1hbC1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOmNvbG9yLWJ1cm59LnNrZXRjaC1vdmVybGF5LU41e2ZpbGw6dXJsKCNzdHJlYWtzLWJyaWdodC1kMi00MTExMzk2MjkpO21peC1ibGVuZC1tb2RlOmRhcmtlbn0uc2tldGNoLW92ZXJsYXktTjZ7ZmlsbDp1cmwoI3N0cmVha3MtYnJpZ2h0LWQyLTQxMTEzOTYyOSk7bWl4LWJsZW5kLW1vZGU6ZGFya2VufS5za2V0Y2gtb3ZlcmxheS1ON3tmaWxsOnVybCgjc3RyZWFrcy1icmlnaHQtZDItNDExMTM5NjI5KTttaXgtYmxlbmQtbW9kZTpkYXJrZW59LmxpZ2h0LWNvZGV7ZGlzcGxheTogYmxvY2t9LmRhcmstY29kZXtkaXNwbGF5OiBub25lfV1dPjwvc3R5bGU+PGcgY2xhc3M9ImRHOW5aMnhsIj48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSI1NTguMDAwMDAwIiB5PSIwLjAwMDAwMCIgd2lkdGg9IjE5Ny4wMDAwMDAiIGhlaWdodD0iNjYuMDAwMDAwIiBzdHJva2U9IiMwRDMyQjIiIGZpbGw9IiNGN0Y4RkUiIGNsYXNzPSIgc3Ryb2tlLUIxIGZpbGwtQjYiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIC8+PC9nPjx0ZXh0IHg9IjY1Ni41MDAwMDAiIHk9IjM4LjUwMDAwMCIgZmlsbD0iIzBBMEYyNSIgY2xhc3M9InRleHQtYm9sZCBmaWxsLU4xIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5CYXNpYyBBdXRoIHRvZ2dsZWQgb248L3RleHQ+PC9nPjxnIGNsYXNzPSJhemh6Ij48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSIwLjAwMDAwMCIgeT0iMTY2LjAwMDAwMCIgd2lkdGg9IjQzNC4wMDAwMDAiIGhlaWdodD0iNjYuMDAwMDAwIiBzdHJva2U9IiMwRDMyQjIiIGZpbGw9IiNGN0Y4RkUiIGNsYXNzPSIgc3Ryb2tlLUIxIGZpbGwtQjYiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjsiIC8+PC9nPjx0ZXh0IHg9IjIxNy4wMDAwMDAiIHk9IjIwNC41MDAwMDAiIGZpbGw9IiMwQTBGMjUiIGNsYXNzPSJ0ZXh0LWJvbGQgZmlsbC1OMSIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweCI+S3ViZXJuZXRlczogb3duZXItbGFiZWxsZWQgU2VjcmV0ICsgbmdpbnggYW5ub3RhdGlvbnM8L3RleHQ+PC9nPjxnIGNsYXNzPSJkbTA9Ij48ZyBjbGFzcz0ic2hhcGUiID48cmVjdCB4PSI0OTQuMDAwMDAwIiB5PSIxNjYuMDAwMDAwIiB3aWR0aD0iMzI1LjAwMDAwMCIgaGVpZ2h0PSI2Ni4wMDAwMDAiIHN0cm9rZT0iIzBEMzJCMiIgZmlsbD0iI0Y3RjhGRSIgY2xhc3M9IiBzdHJva2UtQjEgZmlsbC1CNiIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgLz48L2c+PHRleHQgeD0iNjU2LjUwMDAwMCIgeT0iMjA0LjUwMDAwMCIgZmlsbD0iIzBBMEYyNSIgY2xhc3M9InRleHQtYm9sZCBmaWxsLU4xIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5WTTogU2VjcmV0IE1hbmFnZXIgKyBDYWRkeSBiYXNpY19hdXRoPC90ZXh0PjwvZz48ZyBjbGFzcz0iY0c5dmJBPT0iPjxnIGNsYXNzPSJzaGFwZSIgPjxyZWN0IHg9Ijg3OS4wMDAwMDAiIHk9IjE2Ni4wMDAwMDAiIHdpZHRoPSI1MzUuMDAwMDAwIiBoZWlnaHQ9IjY2LjAwMDAwMCIgc3Ryb2tlPSIjMEQzMkIyIiBmaWxsPSIjRjdGOEZFIiBjbGFzcz0iIHN0cm9rZS1CMSBmaWxsLUI2IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiAvPjwvZz48dGV4dCB4PSIxMTQ2LjUwMDAwMCIgeT0iMjA0LjUwMDAwMCIgZmlsbD0iIzBBMEYyNSIgY2xhc3M9InRleHQtYm9sZCBmaWxsLU4xIiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4Ij5ab3BDbG91ZCBwb29sOiBzY29wZWQgdG8gY2FsbGVyLCBzaGFyZWQgc3BhY2UsIHVuaWZvcm0gNDAzIG90aGVyd2lzZTwvdGV4dD48L2c+PGcgY2xhc3M9IktIUnZaMmRzWlNBdEptZDBPeUJyT0hNcFd6QmQiPjxtYXJrZXIgaWQ9Im1rLWQyLTQxMTEzOTYyOS0zNDg4Mzc4MTM0IiBtYXJrZXJXaWR0aD0iMTAuMDAwMDAwIiBtYXJrZXJIZWlnaHQ9IjEyLjAwMDAwMCIgcmVmWD0iNy4wMDAwMDAiIHJlZlk9IjYuMDAwMDAwIiB2aWV3Qm94PSIwLjAwMDAwMCAwLjAwMDAwMCAxMC4wMDAwMDAgMTIuMDAwMDAwIiBvcmllbnQ9ImF1dG8iIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+IDxwb2x5Z29uIHBvaW50cz0iMC4wMDAwMDAsMC4wMDAwMDAgMTAuMDAwMDAwLDYuMDAwMDAwIDAuMDAwMDAwLDEyLjAwMDAwMCIgZmlsbD0iIzBEMzJCMiIgY2xhc3M9ImNvbm5lY3Rpb24gZmlsbC1CMSIgc3Ryb2tlLXdpZHRoPSIyIiAvPiA8L21hcmtlcj48cGF0aCBkPSJNIDU1Ni4wMzQzMjEgNTIuMzY4OTI1IEMgMjg1LjIwMDAxMiAxMDMuMTk5OTk3IDIxNy4wMDAwMDAgMTI2LjAwMDAwMCAyMTcuMDAwMDAwIDE2Mi4wMDAwMDAiIHN0cm9rZT0iIzBEMzJCMiIgZmlsbD0ibm9uZSIgY2xhc3M9ImNvbm5lY3Rpb24gc3Ryb2tlLUIxIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiBtYXJrZXItZW5kPSJ1cmwoI21rLWQyLTQxMTEzOTYyOS0zNDg4Mzc4MTM0KSIgbWFzaz0idXJsKCNkMi00MTExMzk2MjkpIiAvPjwvZz48ZyBjbGFzcz0iS0hSdloyZHNaU0F0Sm1kME95QjJiU2xiTUYwPSI+PHBhdGggZD0iTSA2NTYuNTAwMDAwIDY4LjAwMDAwMCBDIDY1Ni41MDAwMDAgMTA2LjAwMDAwMCA2NTYuNTAwMDAwIDEyNi4wMDAwMDAgNjU2LjUwMDAwMCAxNjIuMDAwMDAwIiBzdHJva2U9IiMwRDMyQjIiIGZpbGw9Im5vbmUiIGNsYXNzPSJjb25uZWN0aW9uIHN0cm9rZS1CMSIgc3R5bGU9InN0cm9rZS13aWR0aDoyOyIgbWFya2VyLWVuZD0idXJsKCNtay1kMi00MTExMzk2MjktMzQ4ODM3ODEzNCkiIG1hc2s9InVybCgjZDItNDExMTM5NjI5KSIgLz48L2c+PGcgY2xhc3M9IktIUnZaMmRzWlNBdEptZDBPeUJ3YjI5c0tWc3dYUT09Ij48cGF0aCBkPSJNIDc1Ni40NzIyNDEgNTAuMzMyMDYxIEMgMTA2OC4wOTk5NzYgMTAyLjgwMDAwMyAxMTQ2LjUwMDAwMCAxMjYuMDAwMDAwIDExNDYuNTAwMDAwIDE2Mi4wMDAwMDAiIHN0cm9rZT0iIzBEMzJCMiIgZmlsbD0ibm9uZSIgY2xhc3M9ImNvbm5lY3Rpb24gc3Ryb2tlLUIxIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7IiBtYXJrZXItZW5kPSJ1cmwoI21rLWQyLTQxMTEzOTYyOS0zNDg4Mzc4MTM0KSIgbWFzaz0idXJsKCNkMi00MTExMzk2MjkpIiAvPjwvZz48bWFzayBpZD0iZDItNDExMTM5NjI5IiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSItMTAxIiB5PSItMTAxIiB3aWR0aD0iMTYxNiIgaGVpZ2h0PSI0MzQiPgo8cmVjdCB4PSItMTAxIiB5PSItMTAxIiB3aWR0aD0iMTYxNiIgaGVpZ2h0PSI0MzQiIGZpbGw9IndoaXRlIj48L3JlY3Q+Cgo8L21hc2s+PC9zdmc+PC9zdmc+Cg==" alt="Architecture diagram" style={{maxWidth:"100%",height:"auto",display:"block",margin:"2em auto"}} />

On Kubernetes, enforcement is an owner-labeled Secret paired with nginx authentication annotations, written through whichever of three paths actually controls that service's ingress: a customer's own custom Ingress resource gets patched directly, a platform-managed Ingress gets its host configuration updated, and a chart-owned deployment goes through Helm release values and an upgrade. Only a specific, allowlisted set of annotation keys is permitted through any of the three paths, regardless of which one applies.

On a [VM-hosted service](https://zop.dev/resources/blogs/idle-services-vm-sleep-and-wake), the password hash lives in a cloud secret manager alongside host annotations, and the deployer resolves that hash directly into Caddy's own basic_auth configuration directive. A VM that belongs to a shared ZopCloud pool gets an extra layer on top: the hash is stored under the pool account using a key that includes the calling organization's own id, and access is only permitted when the deployment genuinely belongs to that caller, sits in a shared space, and the VM is actually a member of that same space. Any other combination returns a uniform 403, deliberately uninformative, rather than a more specific error that could leak something about what else exists in that pool.

## Rotate Keeps the Name, Remove Waits for Agreement

Only one credential pair exists per host at any time. Rotating the password leaves the username exactly as it was, so anything already configured to expect that username keeps working after a rotation. Removing Basic Auth strips the relevant annotations first, and only deletes the underlying secret once both the currently-live state and the newly-requested state agree that auth should be off. That ordering closes a specific race: deleting the secret too early, before confirming the live state actually reflects the removal, could destroy a credential still being actively relied on somewhere in flight.

## A Stage Bug Broke More Than Basic Auth

A fix found directly on stage, in the same release, repaired something that looked unrelated to Basic Auth at first but genuinely wasn't. When a service had no saved port configuration, a config-only deploy would try to look up a port the running container had never actually published, and fail outright with an error about not being able to read the published host port. That failure didn't stay contained to Basic Auth. It also broke ordinary environment variable updates and plain Settings saves on that same service, because all three paths ran through the identical broken port lookup. The fix falls back to the container's one actually-published port when nothing was explicitly saved, logging a warning when it does, and still refuses outright when the container has published nothing at all for it to fall back to.

## Four Routes Became One

The same follow-up release collapsed four separate API routes down to a single REST endpoint: one POST to enable Basic Auth, which returns the generated credentials directly in its response, and one DELETE to remove it, both taking an explicit target parameter set to either cluster or vm. A request whose stated target doesn't match the actual resource now returns a plain 400 rather than succeeding against the mismatched one. The old, separate VM-specific route was removed outright, with no backward-compatible alias left behind for anyone still calling it. That's a deliberately hard cutover rather than a gradual one, and it only works because the provisioner, the gateway, the [MCP server](https://zop.dev/resources/blogs/mcp-server-protocol-negotiation-and-discovery), and the frontend all shipped the change together in the same release, with nothing left depending on the old shape of the API.
