<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux Sin Humo (Publicaciones sobre Azure)</title><link>https://sergiobelkin.com/</link><description></description><atom:link href="https://sergiobelkin.com/categories/azure.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><copyright>Contents © 2026 &lt;a href="mailto:sebelk@gmail.com"&gt;sebelk&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"&gt;&lt;/a&gt;
</copyright><lastBuildDate>Mon, 28 Sep 2026 02:48:10 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>3 Power Tips + Power Link I14</title><link>https://sergiobelkin.com/posts/3-power-tips-power-link-i14/</link><dc:creator>sebelk</dc:creator><description>&lt;figure&gt;&lt;img src="https://sergiobelkin.com/images/PowerTipsPlus.png"&gt;&lt;/figure&gt; &lt;p&gt;En los tres casos de este issue hay una respuesta válida que no le sirve a quien la pidió: el DNS contesta sin el registro pedido, el servidor TLS presenta certificados que Java no logra encadenar hasta una raíz en la que confíe, Microsoft Entra ID emite un token que Azure API Management (APIM) rechaza. Cada herramienta muestra una sola capa, y ninguna dice por sí sola dónde está la configuración que no coincide. Al final, un calendario que va a llevar a cada mes y medio una tarea que, donde todavía es manual, hoy se hace una vez por año.&lt;/p&gt;
&lt;h3 id="power-tip-1-el-nombre-existe-el-registro-no"&gt;Power Tip #1 El nombre existe; el registro, no&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;La aplicación dice que no puede resolver el nombre, pero el nombre existe.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El DNS tiene dos maneras de decir que no: el nombre no existe (&lt;code&gt;NXDOMAIN&lt;/code&gt;), o el nombre existe pero no tiene registros del tipo pedido (NODATA).&lt;/li&gt;
&lt;li&gt;NODATA no tiene código propio: llega como &lt;code&gt;NOERROR&lt;/code&gt;, sin ningún registro del tipo pedido en la respuesta (puede venir un &lt;code&gt;CNAME&lt;/code&gt;, pero no el &lt;code&gt;A&lt;/code&gt;). Por eso en &lt;code&gt;dig&lt;/code&gt; parece un éxito y en la aplicación, una falla.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getaddrinfo()&lt;/code&gt;, la función de glibc que usan las aplicaciones para resolver nombres, suele reflejar la diferencia: "Name or service not known" cuando el nombre no existe, "No address associated with hostname" cuando existe sin el registro pedido.&lt;/li&gt;
&lt;li&gt;Esa función trabaja por encima del DNS: pasa por NSS, cuya configuración (&lt;code&gt;/etc/nsswitch.conf&lt;/code&gt;) puede involucrar &lt;code&gt;/etc/hosts&lt;/code&gt;, módulos como &lt;code&gt;nss-resolve&lt;/code&gt; o cachés como &lt;code&gt;nscd&lt;/code&gt;. &lt;code&gt;dig&lt;/code&gt; consulta por defecto a los servidores de &lt;code&gt;/etc/resolv.conf&lt;/code&gt; y muestra qué contestó el DNS, que no siempre es lo que recibió la aplicación.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;dig&lt;span class="w"&gt; &lt;/span&gt;NOMBRE&lt;span class="w"&gt; &lt;/span&gt;A&lt;span class="w"&gt; &lt;/span&gt;+noall&lt;span class="w"&gt; &lt;/span&gt;+comments&lt;span class="w"&gt; &lt;/span&gt;+answer
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Un &lt;code&gt;NOERROR&lt;/code&gt; sin el registro pedido dice lo que sabe el servidor consultado, no lo que existe en todos lados: con split-horizon, otra vista puede tener el registro que esta no tiene. La pregunta pasa a ser qué tipos publica ese nombre en el servidor que consulta la aplicación, por ejemplo un nombre que solo tiene &lt;code&gt;AAAA&lt;/code&gt; consultado desde una aplicación que pide &lt;code&gt;A&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="power-tip-2-lo-que-envia-el-servidor-no-es-en-lo-que-confia-java"&gt;Power Tip #2 Lo que envía el servidor no es en lo que confía Java&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;openssl s_client -showcerts&lt;/code&gt; muestra los certificados que envía el servidor, y la aplicación Java falla con &lt;code&gt;PKIX path building failed&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La cadena la valida el cliente, contra su propio almacén de raíces de confianza (&lt;em&gt;truststore&lt;/em&gt;). El servidor normalmente no envía la raíz: el cliente tiene que tenerla.&lt;/li&gt;
&lt;li&gt;Java no usa necesariamente el del sistema. En Fedora y RHEL, el OpenJDK de los paquetes de la distro enlaza su &lt;code&gt;cacerts&lt;/code&gt; al almacén que mantiene &lt;code&gt;update-ca-trust&lt;/code&gt;. Un JDK descomprimido de un tarball, en un servidor o dentro de una imagen de contenedor, usa el archivo que trajo, con las raíces que había cuando se empaquetó. Y cualquiera de los dos puede recibir otro almacén con &lt;code&gt;-Djavax.net.ssl.trustStore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cuando una CA cambia de raíz, la nueva puede estar en el sistema y faltar en ese archivo.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nv"&gt;JAVA_TOOL_OPTIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'-Djavax.net.debug=ssl:trustmanager'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;COMANDO_DE_LA_APP&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'trustStore is'&lt;/span&gt;
readlink&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;RUTA_QUE_IMPRIMIO
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;trust list&lt;/code&gt; describe el almacén del sistema. Si la aplicación lo usa, lo confirma la propia JVM con las opciones con que arrancó, salvo que el código arme su propio contexto TLS; no conviene suponerlo.&lt;/p&gt;
&lt;h3 id="power-tip-3-valido-no-es-lo-mismo-que-aceptado"&gt;Power Tip #3 Válido no es lo mismo que aceptado&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;El token es válido, está vigente, lo firmó el emisor correcto, y la API responde 401.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un token de acceso dice para quién se emitió en el claim &lt;code&gt;aud&lt;/code&gt; (&lt;em&gt;audience&lt;/em&gt;, audiencia). La API lo compara con su lista de audiencias aceptadas; en APIM, eso lo hace la política &lt;code&gt;validate-azure-ad-token&lt;/code&gt; para tokens de Entra ID, o &lt;code&gt;validate-jwt&lt;/code&gt; donde se siga usando.&lt;/li&gt;
&lt;li&gt;En Entra ID, con tokens v1, el &lt;code&gt;aud&lt;/code&gt; depende de cómo se pidió el token: puede ser cualquiera de los Application ID URI registrados para la API, con o sin barra final, o su client ID a secas. Un cliente que pide &lt;code&gt;api://GUID/.default&lt;/code&gt; y otro que pide &lt;code&gt;GUID/.default&lt;/code&gt; (el GUID es el client ID de la API) pueden recibir &lt;code&gt;aud&lt;/code&gt; distintos para el mismo recurso, y si la API acepta uno solo, el otro se rechaza.&lt;/li&gt;
&lt;li&gt;La versión del token no depende del endpoint que usa el cliente: la fija el registro de la API, en &lt;code&gt;requestedAccessTokenVersion&lt;/code&gt; (&lt;code&gt;null&lt;/code&gt; o &lt;code&gt;1&lt;/code&gt; dan v1). En v2, el &lt;code&gt;aud&lt;/code&gt; es siempre el client ID; en v1, la API puede fijarlo igual con la propiedad &lt;code&gt;use_guid&lt;/code&gt; del claim opcional &lt;code&gt;aud&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;jq&lt;span class="w"&gt; &lt;/span&gt;-R&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson | {aud, ver}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para que los valores coincidan hay tres lugares donde tocar, y no alcanzan a lo mismo. El &lt;code&gt;scope&lt;/code&gt; es de un cliente. La lista de audiencias que acepta la política de APIM y el formato del &lt;code&gt;aud&lt;/code&gt; que emite Entra ID son de la API, y cambian lo que reciben o aceptan todos sus clientes.&lt;/p&gt;
&lt;h3 id="power-link"&gt;Power Link&lt;/h3&gt;
&lt;p&gt;En marzo de 2026 empezó a correr un calendario que el CA/Browser Forum votó en abril de 2025: la duración máxima de un certificado TLS público baja por tramos de 398 días a 47, hasta marzo de 2029, y la reutilización de los datos de validación del dominio baja, también por tramos, de 398 a 10 días. Donde la renovación todavía es manual, una tarea de una vez por año pasa a hacerse como mínimo cada mes y medio: &lt;a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/"&gt;Ballot SC081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods&lt;/a&gt;&lt;/p&gt;</description><category>Azure</category><category>DNS</category><category>java</category><category>seguridad</category><category>TLS</category><guid>https://sergiobelkin.com/posts/3-power-tips-power-link-i14/</guid><pubDate>Mon, 28 Sep 2026 00:16:16 GMT</pubDate></item><item><title>3 Power Tips + Power Link I12</title><link>https://sergiobelkin.com/posts/3-power-tips-power-link-i12/</link><dc:creator>sebelk</dc:creator><description>&lt;figure&gt;&lt;img src="https://sergiobelkin.com/images/PowerTipsPlus.png"&gt;&lt;/figure&gt; &lt;p&gt;"GUI vs CLI" es un falso dilema. Antes que técnico, es cultural: hábitos, modos de trabajo y supersticiones que arrastramos quienes trabajamos en IT. La consola y la interfaz gráfica no se disputan el mismo lugar; resuelven problemas distintos y, bien usadas, se complementan.&lt;/p&gt;
&lt;h3 id="power-tip-1-una-imagen-contra-una-tabla-de-sectores"&gt;Power Tip #1 Una imagen contra una tabla de sectores&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Hay que redimensionar una partición con datos, y querés ver cómo queda el layout antes de escribir al disco.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La línea de comandos no te deja sin red: &lt;code&gt;sgdisk&lt;/code&gt; o un playbook de Ansible pueden simular el cambio sin escribir al disco. El tema es cómo lo muestran: una tabla de números —alineación a sectores, espacio libre real, orden físico de las particiones— que hay que reconstruir de cabeza.&lt;/p&gt;
&lt;p&gt;GParted o KDE Partition Manager muestran ese mismo estado final, pero dibujado:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;gparted&lt;span class="w"&gt; &lt;/span&gt;/dev/sdX
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cargan el layout, dejan encolar varias operaciones, y muestran el resultado antes de aplicarlo. El "Aplicar" recién dispara las llamadas reales al disco.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/pt12-kde-partition-manager.webp"&gt;&lt;img src="https://sergiobelkin.com/images/pt12-kde-partition-manager.webp" alt="Barra de herramientas del Gestor de Particiones de KDE con «Aplicar» y «Cambiar el tamaño/mover», y la lista de particiones del disco: los cambios se preparan sobre el layout y nada se escribe hasta pulsar «Aplicar»"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cuando la operación es difícilmente reversible y conviene evaluar el estado de antemano, la GUI es un camino apropiado: no porque la CLI no pueda simular, sino porque entrega una imagen donde la consola entrega una tabla. Y eso no tiene que ver con el nivel del operador.&lt;/p&gt;
&lt;h3 id="power-tip-2-el-clic-no-se-copia-de-manera-natural"&gt;Power Tip #2 El clic no se copia de manera natural&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Ajustaste una regla de firewall desde Cockpit, el servicio volvió, y treinta días después hay que replicarlo en otros 50 nodos.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El cambio se hizo en la web UI, no en una shell.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nb"&gt;history&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;firewall-cmd
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No aparece nada: no hay un comando para copiar.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;firewall-cmd&lt;span class="w"&gt; &lt;/span&gt;--permanent&lt;span class="w"&gt; &lt;/span&gt;--add-service&lt;span class="o"&gt;=&lt;/span&gt;https&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;firewall-cmd&lt;span class="w"&gt; &lt;/span&gt;--reload
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La CLI permite reproducir y adaptar; la GUI facilita hacerlo una sola vez.&lt;/p&gt;
&lt;h3 id="power-tip-3-un-comando-contra-el-asistente-de-media-docena-de-pantallas"&gt;Power Tip #3 Un comando contra el asistente de media docena de pantallas&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Hay que crear el mismo private endpoint en dev, staging y prod, y en el Portal es un asistente de varias pantallas cada vez.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resource group, región, sub-resource, VNet, subnet: cada pantalla es un clic y un punto donde el tercer entorno termina distinto del primero.&lt;/li&gt;
&lt;li&gt;No hay forma de correr "lo mismo" dos veces: cada pasada se arma a mano de nuevo.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;az&lt;span class="w"&gt; &lt;/span&gt;network&lt;span class="w"&gt; &lt;/span&gt;private-endpoint&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;pe-app&lt;span class="w"&gt; &lt;/span&gt;--resource-group&lt;span class="w"&gt; &lt;/span&gt;rg-prod&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;--vnet-name&lt;span class="w"&gt; &lt;/span&gt;vnet-prod&lt;span class="w"&gt; &lt;/span&gt;--subnet&lt;span class="w"&gt; &lt;/span&gt;snet-data&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;--private-connection-resource-id&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$sqlid&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--group-id&lt;span class="w"&gt; &lt;/span&gt;sqlServer&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;--connection-name&lt;span class="w"&gt; &lt;/span&gt;pe-app-conn
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La misma operación entra en una línea parametrizable: la repetís idéntica en cada entorno cambiando un par de variables. El patrón no es de Azure — &lt;code&gt;aws&lt;/code&gt; y &lt;code&gt;gcloud&lt;/code&gt; resuelven lo suyo igual.&lt;/p&gt;
&lt;p&gt;Cuando la misma operación se repite entre entornos, el asistente visual es el cuello de botella, no la ayuda.&lt;/p&gt;
&lt;h3 id="power-link"&gt;Power Link&lt;/h3&gt;
&lt;p&gt;"La IA provocará la inutilidad de la línea de comandos". ¿Será así? Mark Pesce —co-creador de VRML— sostiene en The Register justo lo contrario: &lt;a href="https://www.theregister.com/software/2026/03/11/ai-has-made-the-cli-more-important-and-powerful/5229986"&gt;AI has made the Command Line Interface more important and powerful than ever before&lt;/a&gt;. Su argumento es que las GUIs se volvieron tan recargadas que ni los agentes las operan bien, y la CLI reaparece como el terreno común entre humanos y máquinas. No hace falta estar de acuerdo en todo para que la pregunta quede flotando: ¿cuánto de lo que se grita en los medios y en las redes sociales vamos a tener que repensar?&lt;/p&gt;</description><category>Azure</category><category>CLI</category><category>Cockpit</category><category>GUI</category><category>sysadmin</category><guid>https://sergiobelkin.com/posts/3-power-tips-power-link-i12/</guid><pubDate>Mon, 08 Jun 2026 04:16:42 GMT</pubDate></item><item><title>3 Power Tips + Power Link I11</title><link>https://sergiobelkin.com/posts/3-power-tips-power-link-i11/</link><dc:creator>sebelk</dc:creator><description>&lt;figure&gt;&lt;img src="https://sergiobelkin.com/images/PowerTipsPlus.png"&gt;&lt;/figure&gt; &lt;p&gt;Las PTs de este issue muestran cómo, incluso en la nube (en este caso Azure), siguen aplicando conceptos clásicos de sistemas: distinguir entre ejecución y estado, entender la irreversibilidad de ciertos valores (como secrets) y operar en ausencia de un mapeo explícito entre componentes. Al final, el progreso en la &lt;strong&gt;Estrategia de Innovación Abierta y Código Abierto&lt;/strong&gt; en un estado alemán.&lt;/p&gt;
&lt;h3 id="power-tip-1-el-exit-code-es-local-no-de-azure"&gt;Power Tip #1 El exit code es local, no de Azure&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;El comando volvió con &lt;code&gt;0&lt;/code&gt; y la app sigue cayéndose.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;az&lt;/code&gt; reporta éxito al recibir el ACK del control plane.&lt;/li&gt;
&lt;li&gt;El recurso queda en &lt;code&gt;Updating&lt;/code&gt; o &lt;code&gt;Creating&lt;/code&gt; por minutos.&lt;/li&gt;
&lt;li&gt;El siguiente paso del script lo encuentra "no listo" y falla raro.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;az&lt;span class="w"&gt; &lt;/span&gt;resource&lt;span class="w"&gt; &lt;/span&gt;show&lt;span class="w"&gt; &lt;/span&gt;--ids&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--query&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"properties.provisioningState"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;tsv
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;provisioningState&lt;/code&gt; es un testigo más confiable del control plane.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="power-tip-2-el-valor-del-secret-se-entrega-una-sola-vez"&gt;Power Tip #2 El valor del secret se entrega una sola vez&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;La alerta de vencimiento de un secret se "resolvió" pero la app igual se cae.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;credential reset&lt;/code&gt; devolvió el password en stdout.&lt;/li&gt;
&lt;li&gt;Lo perdiste antes de guardarlo en el vault.&lt;/li&gt;
&lt;li&gt;Entra ID considera el secret válido. Nadie puede usarlo.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;az&lt;span class="w"&gt; &lt;/span&gt;ad&lt;span class="w"&gt; &lt;/span&gt;app&lt;span class="w"&gt; &lt;/span&gt;credential&lt;span class="w"&gt; &lt;/span&gt;reset&lt;span class="w"&gt; &lt;/span&gt;--append&lt;span class="w"&gt; &lt;/span&gt;...&lt;span class="w"&gt; &lt;/span&gt;--query&lt;span class="w"&gt; &lt;/span&gt;password&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;tsv
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Si se perdió el valor generado, no se puede recuperar. Como perder una clave privada SSH: podés crear otra, pero no reconstruir la anterior.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="power-tip-3-el-mapeo-no-vive-donde-uno-espera"&gt;Power Tip #3 El mapeo no vive donde uno espera&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Sabés que la app usa un secret de un KV. No sabés cuál.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;App Registration no declara qué KV la consume.&lt;/li&gt;
&lt;li&gt;Key Vault no mantiene, por defecto, una relación nativa con la App Registration que originó el secret.&lt;/li&gt;
&lt;li&gt;El nombre del secret en KV es convención del equipo responsable, no metadato de Azure.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kv&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;az&lt;span class="w"&gt; &lt;/span&gt;keyvault&lt;span class="w"&gt; &lt;/span&gt;list&lt;span class="w"&gt; &lt;/span&gt;--query&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[].name"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;tsv&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;az&lt;span class="w"&gt; &lt;/span&gt;keyvault&lt;span class="w"&gt; &lt;/span&gt;secret&lt;span class="w"&gt; &lt;/span&gt;list&lt;span class="w"&gt; &lt;/span&gt;--vault-name&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$kv&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;--query&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[?contains(name, 'mi-superpower-app')].{kv:'&lt;/span&gt;&lt;span class="nv"&gt;$kv&lt;/span&gt;&lt;span class="s2"&gt;',name:name}"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;tsv
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Si para rotar un secret tenés que salir a buscarlo, no está definido en ningún lado qué secret usa esa app...&lt;/p&gt;
&lt;h3 id="power-link"&gt;Power Link&lt;/h3&gt;
&lt;p&gt;Este es un análisis del &lt;strong&gt;Open Source Observatory (OSOR)&lt;/strong&gt; sobre la adopción de software Open Source en el estado alemán de Schleswig-Holstein. ¿Cómo les fue implementando LibreOffice, Thunderbird, and Linux?: &lt;a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/news/schleswig-holsteins-open-source-strategy-year"&gt;From Early Adopter to Leader: Schleswig-Holstein's Open Source Evolution&lt;/a&gt;&lt;/p&gt;</description><category>Azure</category><category>seguridad</category><guid>https://sergiobelkin.com/posts/3-power-tips-power-link-i11/</guid><pubDate>Mon, 27 Apr 2026 16:57:09 GMT</pubDate></item></channel></rss>