<?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, 27 Apr 2026 21:45:59 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><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.&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;</description><category>Azure</category><category>bash</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>