Las identidades administradas de la lección anterior eliminaron los secretos de acceso a sttarjetascontosopro y a db-reservas, y esa es la mejor noticia posible: el secreto que no existe no se puede filtrar. Pero no todo se resuelve así. Contoso Airlines sigue necesitando la clave de la pasarela de pago, el token del proveedor de datos meteorológicos que alimenta las previsiones de retraso, la cadena de conexión del sistema heredado de facturación que aún corre en Barcelona y el certificado TLS de contosoairlines.example. Ninguno de esos sistemas habla Entra ID, así que el secreto existe y hay que guardarlo en algún sitio. Hoy ese sitio pasa a ser Azure Key Vault: un almacén respaldado por hardware, con permisos por RBAC, red cerrada, versionado y auditoría de cada lectura. Al terminar, app-contoso-reservas-pro leerá sus secretos con la identidad administrada de 04-02 y no habrá una sola contraseña en el despliegue.
Aviso importante: la gestión de claves y secretos toca directamente el cumplimiento normativo —PCI DSS para los pagos, RGPD para los datos de pasajeros— y una configuración incorrecta puede provocar tanto una brecha como una pérdida irreversible de datos cifrados. Antes de llevar a producción cualquier diseño de Key Vault, de rotación o de claves gestionadas por el cliente, debe revisarlo un profesional de seguridad o el equipo de compliance de tu organización.
Contenido
- Dónde viven hoy los secretos de Contoso
- Qué guarda Key Vault: secretos, claves y certificados
- Niveles Estándar, Premium y Managed HSM
- Crear
kv-contoso-procon eliminación temporal y protección contra purga - Los dos modelos de permisos: directivas de acceso frente a RBAC
- Acceso desde red: firewall, punto de conexión privado y servicios de confianza
- Guardar, recuperar y versionar secretos
- Rotación de secretos sin caída
- Certificados TLS gestionados
- Consumir secretos desde App Service con referencias de Key Vault
- Claves de cifrado gestionadas por el cliente
- Auditoría, límites y qué NO poner en el almacén
- Errores Comunes y Consejos
- Ejercicios
- Conclusión
- Dónde viven hoy los secretos de Contoso
Un inventario honesto antes de arreglar nada:
| Secreto | Dónde está hoy | Riesgo |
|---|---|---|
| Clave de la pasarela de pago | Ajustes de app-contoso-reservas-pro, en claro |
Cualquier Colaborador la lee con config/list |
| Token del proveedor meteorológico | appsettings.json en el repositorio |
En el historial de Git para siempre |
| Cadena del sistema heredado | Documento compartido del equipo | Sin control de acceso ni auditoría |
| Certificado TLS con clave privada | Fichero .pfx en el portátil de Marta |
Se pierde con el portátil |
| Contraseña del administrador de SQL | Correo de hace ocho meses | Nadie recuerda quién la tiene |
Ninguno ha rotado nunca, nadie sabe quién los ha leído y su revocación exigiría buscarlos por cinco sitios. Key Vault resuelve las cuatro cosas a la vez: almacenamiento centralizado, control de acceso por identidad, auditoría de cada operación y rotación gestionada.
- Qué guarda Key Vault: secretos, claves y certificados
| Tipo | Qué es | Se puede extraer | Uso típico en Contoso |
|---|---|---|---|
| Secreto | Cualquier cadena de hasta 25 KB | Sí: la aplicación recibe el valor | Clave de la pasarela, tokens, cadenas de conexión |
| Clave | Clave criptográfica (RSA, EC) | No: nunca sale del almacén | Cifrado de db-reservas y del almacenamiento |
| Certificado | Certificado X.509 + su clave privada | Sí, como PFX si la directiva lo permite | TLS de contosoairlines.example |
La distinción entre secreto y clave es la más importante y la que más se confunde. Un secreto se guarda para devolverlo: la aplicación pide la clave de la pasarela y recibe el texto. Una clave nunca se devuelve: se le envía a Key Vault el dato para que él lo cifre, firme o descifre, y la clave privada no abandona jamás el módulo criptográfico. Por eso las claves de cifrado se guardan como claves y no como secretos: aunque alguien robara el token de acceso, no podría exfiltrar el material criptográfico.
Un certificado es en realidad tres objetos coordinados: el certificado, una clave y un secreto que contiene el PFX completo. Key Vault gestiona además su ciclo de vida, incluida la renovación automática.
- Niveles Estándar, Premium y Managed HSM
| Estándar | Premium | Azure Managed HSM | |
|---|---|---|---|
| Protección de claves | Software (dentro de HSM validados) | HSM dedicado, FIPS 140-2 nivel 3 | HSM dedicado de un solo inquilino |
| Coste | Céntimos por 10.000 operaciones | Igual + coste por clave HSM | Varios miles de € al mes |
| Aislamiento | Multiinquilino | Multiinquilino | Un solo inquilino |
| Cuándo | El 90 % de los casos | Exigencia normativa de HSM | Banca, autoridades de certificación |
Contoso elige Estándar para kv-contoso-pro. Es la decisión correcta salvo que una norma exija explícitamente HSM certificado de nivel 3, y conviene saber que el nivel no se puede cambiar de Premium a Estándar una vez creado (de Estándar a Premium sí). Azure Managed HSM existe, cuesta miles de euros al mes y solo tiene sentido cuando el propio auditor lo exige por escrito.
- Crear
kv-contoso-pro con eliminación temporal y protección contra purga
kv-contoso-pro con eliminación temporal y protección contra purgaRG_SEG="rg-contoso-seguridad-pro"; KV="kv-contoso-pro"
az keyvault create --name $KV --resource-group $RG_SEG --location westeurope \
--sku standard \
--enable-rbac-authorization true \ # RBAC en lugar de directivas de acceso
--enable-purge-protection true \ # nadie puede borrar definitivamente
--retention-days 90 \ # ventana de recuperacion tras un borrado
--public-network-access Disabled \ # solo por punto de conexion privado
--tags entorno=produccion proyecto=contoso-reservas centro-coste=CC-1042 \
[email protected]Tres opciones merecen explicación detallada:
- Eliminación temporal (soft delete): está siempre activada y no se puede desactivar. Al borrar un secreto, una clave o el almacén entero, el objeto pasa a estado eliminado y se conserva durante
--retention-days(de 7 a 90). Durante ese tiempo se puede recuperar conaz keyvault recover. - Protección contra purga: impide eliminar definitivamente el objeto durante la retención, ni siquiera a un Propietario. Una vez activada tampoco se puede desactivar. Es incómoda a propósito: convierte un borrado malicioso o accidental en algo reversible.
- La consecuencia práctica que sorprende a todo el mundo: mientras un almacén eliminado siga en retención, su nombre queda reservado globalmente y no se puede crear otro igual. Si borras
kv-contoso-proen una prueba, no podrás recrearlo con ese nombre hasta 90 días después (o antes purgándolo, salvo que la protección contra purga lo impida, que es justo el caso). Por eso los almacenes de prueba se crean con nombres desechables y--retention-days 7.
- Los dos modelos de permisos: directivas de acceso frente a RBAC
| Directivas de acceso (heredado) | RBAC de Azure (recomendado) | |
|---|---|---|
| Dónde se define | En el propio almacén | En Control de acceso (IAM), como el resto de Azure |
| Granularidad | Por almacén completo | Por almacén y por secreto individual |
| Límite | 1.024 directivas por almacén | Las asignaciones de rol normales |
| Herencia de ámbitos | No | Sí, desde suscripción o grupo de recursos |
| Auditoría y PIM | Fuera del modelo estándar | Integrada con todo Azure |
| Recomendación | Solo por compatibilidad | Elígelo siempre en almacenes nuevos |
Con --enable-rbac-authorization true, los permisos del plano de datos se conceden con los mismos roles del resto de Azure. Los que se usan:
| Rol | Permite |
|---|---|
| Usuario de Key Vault Secrets | Leer el valor de los secretos. El de las aplicaciones |
| Responsable de Key Vault Secrets | Crear, actualizar y eliminar secretos |
| Responsable de Key Vault Crypto | Gestionar claves y operar con ellas |
| Lector de Key Vault | Ver metadatos, no valores. Para auditoría |
| Colaborador de Key Vault | Gestionar el almacén (plano de gestión), no sus datos |
Ese último es la trampa de 04-02 aplicada aquí: Colaborador de Key Vault no permite leer un solo secreto. Sí permite, en cambio, cambiar la configuración del almacén, motivo por el cual también es un rol privilegiado que conviene mantener bajo PIM.
KV_ID=$(az keyvault show -n $KV -g $RG_SEG --query id -o tsv)
APP_PRINCIPAL=$(az webapp identity show -g rg-contoso-reservas-pro -n app-contoso-reservas-pro --query principalId -o tsv)
# La aplicacion: solo LEER, y solo el secreto que necesita
az role assignment create --assignee-object-id $APP_PRINCIPAL --assignee-principal-type ServicePrincipal \
--role "Key Vault Secrets User" \
--scope "$KV_ID/secrets/pasarela-pago-clave"
# Marta gestiona los secretos del almacen entero
az role assignment create --assignee-object-id $(az ad group show --group "Contoso-Infraestructura" --query id -o tsv) \
--assignee-principal-type Group --role "Key Vault Secrets Officer" --scope "$KV_ID"Fíjate en el ámbito de la primera asignación: un secreto concreto, no el almacén. Si app-contoso-reservas-pro se ve comprometida, el atacante obtiene esa clave y nada más.
- Acceso desde red: firewall, punto de conexión privado y servicios de confianza
Con --public-network-access Disabled el almacén no responde en internet. El acceso llega por un punto de conexión privado en snet-datos, exactamente igual que pe-sql-reservas y pe-storage-tarjetas del módulo 2:
az network private-endpoint create -g rg-contoso-red-pro -n pe-kv-contoso \
--vnet-name vnet-contoso-pro --subnet snet-datos \
--private-connection-resource-id $KV_ID --group-id vault \
--connection-name conn-kv-contosoY hay que registrar el nombre en DNS privado, o el cliente seguirá resolviendo la IP pública: se crea la zona privatelink.vaultcore.azure.net, se vincula a vnet-contoso-pro y se asocia al punto de conexión con un grupo de zonas DNS. Sin ese paso, el punto de conexión existe y no lo usa nadie: es el fallo más frecuente de Private Link.
Queda un matiz operativo. Ciertos servicios de Azure —App Service leyendo referencias, Azure SQL descifrando con clave del cliente, Event Grid— no salen por la red virtual. Para ellos existe la excepción de servicios de confianza de Microsoft, que hay que activar explícitamente:
--bypass AzureServices permite el paso a esa lista cerrada de servicios; --default-action Deny sigue rechazando todo lo demás. La excepción no es un agujero abierto: cada servicio de la lista debe además tener un rol asignado.
- Guardar, recuperar y versionar secretos
# Guardar. El valor NO se escribe en el comando: se lee de una variable o de la entrada estandar
read -s -p "Clave de la pasarela de pago: " VALOR; echo
az keyvault secret set --vault-name $KV --name pasarela-pago-clave --value "$VALOR" \
--expires "$(date -u -d '+180 days' +%Y-%m-%dT%H:%M:%SZ)" \
--tags rotacion=semestral sistema=pagos
# Recuperar el valor actual (esta operacion queda auditada)
az keyvault secret show --vault-name $KV --name pasarela-pago-clave --query value -o tsv
# Ver todas las versiones: cada 'set' crea una nueva y la anterior sigue existiendo
az keyvault secret list-versions --vault-name $KV --name pasarela-pago-clave \
--query "[].{Version:id, Habilitado:attributes.enabled, Creado:attributes.created}" -o tableCada secreto tiene un identificador con versión, https://kv-contoso-pro.vault.azure.net/secrets/pasarela-pago-clave/a1b2c3..., y otro sin versión que apunta siempre a la actual. La regla práctica: usa el identificador sin versión para que la rotación no obligue a redesplegar, salvo que necesites fijar una versión concreta por reproducibilidad.
Los atributos --expires y --not-before no bloquean la lectura por sí mismos en todos los clientes: son metadatos que alimentan los avisos de caducidad y las consultas de auditoría. Ponlos siempre; ignorarlos es lo que hace que una clave lleve cuatro años sin rotar.
- Rotación de secretos sin caída
Rotar es sustituir un secreto por uno nuevo sin que nada deje de funcionar. Tres mecanismos, de más a menos automático:
Rotación totalmente gestionada. Para las claves de cuentas de almacenamiento, Key Vault puede regenerarlas por sí mismo. Se crea un secreto de tipo cuenta administrada, se le indica cada cuánto rotar, y Key Vault alterna entre key1 y key2 regenerando la que no está en uso:
az keyvault storage add --vault-name $KV -n sttarjetascontosopro \
--active-key-name key1 --auto-regenerate-key --regeneration-period P60D \
--resource-id $(az storage account show -n sttarjetascontosopro -g rg-contoso-reservas-pro --query id -o tsv)Nótese la ironía saludable: Contoso ya no usa esas claves porque pasó a identidad administrada (04-02). Este mecanismo es para las cuentas heredadas que aún no han migrado.
Notificación de caducidad por Event Grid. Key Vault publica eventos SecretNearExpiry (30 días antes) y SecretExpired, que pueden disparar una función o una Logic App que llame a la API del proveedor, obtenga una credencial nueva y escriba la versión en el almacén. Es el patrón para secretos de terceros como la pasarela de pago.
El patrón de rotación sin caída, que es lo importante conceptualmente y vale para cualquier secreto:
flowchart TB
A[1. Generar la credencial NUEVA en el proveedor<br/>manteniendo activa la anterior] --> B[2. Escribir la nueva version<br/>en Key Vault]
B --> C[3. Esperar a que expire la cache<br/>de todas las instancias]
C --> D[4. Verificar que el trafico usa la nueva<br/>en los registros del proveedor]
D --> E[5. Revocar la credencial ANTIGUA]
La clave está en el paso 1: el proveedor debe admitir dos credenciales válidas a la vez. Si solo admite una, no hay rotación sin caída posible y habrá que planificar una ventana de mantenimiento. Es una pregunta que conviene hacerle a cada proveedor antes de integrarlo.
- Certificados TLS gestionados
Key Vault puede emitir y renovar certificados automáticamente si se integra con una autoridad de certificación asociada (DigiCert, GlobalSign), o custodiar certificados importados de cualquier otra. Se define una directiva con el asunto, los nombres alternativos, la vigencia y el porcentaje de vida a partir del cual se renueva:
az keyvault certificate create --vault-name $KV -n cert-contosoairlines \
--policy "$(az keyvault certificate get-default-policy)"Desde ahí, app-contoso-reservas-pro importa el certificado con az webapp config ssl import --key-vault $KV --key-vault-certificate-name cert-contosoairlines, y cuando Key Vault lo renueva, App Service recoge la versión nueva sin intervención. Application Gateway hace lo mismo referenciando el identificador del certificado, y ahí es donde se usará en la lección 04-04 al montar el firewall de aplicaciones web. La alternativa gratuita para casos sencillos son los certificados administrados de App Service, que ya viste en 02-03; Key Vault es la opción cuando el mismo certificado debe compartirse entre varios servicios.
- Consumir secretos desde App Service con referencias de Key Vault
Este es el momento en que las contraseñas desaparecen del despliegue. Una referencia de Key Vault es un ajuste de aplicación cuyo valor no es el secreto, sino un puntero:
az webapp config appsettings set -g rg-contoso-reservas-pro -n app-contoso-reservas-pro --settings \
ClavePasarelaPago="@Microsoft.KeyVault(SecretUri=https://kv-contoso-pro.vault.azure.net/secrets/pasarela-pago-clave/)" \
TokenMeteorologico="@Microsoft.KeyVault(VaultName=kv-contoso-pro;SecretName=token-meteo)"Lo que ocurre por debajo: al arrancar, App Service usa la identidad administrada de 04-02 para pedir el token, resuelve la referencia y expone el valor a la aplicación como una variable de entorno normal. Consecuencias que conviene tener claras:
- El código no cambia: sigue leyendo
ClavePasarelaPagocomo siempre. No hay SDK que añadir. - El secreto no está en la configuración: quien tenga
config/listve el puntero, no el valor. - La resolución ocurre al arrancar y se cachea 24 horas (o al reiniciar). Tras rotar un secreto, hay que reiniciar la aplicación o esperar; si usaste el URI sin versión, la referencia recoge la versión nueva.
- Si la referencia falla, la aplicación arranca sin ese ajuste y suele fallar de forma confusa. Comprueba siempre el estado con
az webapp config appsettings list, donde una referencia rota se muestra con su error.
Cuando la aplicación necesita leer secretos en caliente (no solo al arrancar), se usa SecretClient del SDK con DefaultAzureCredential, la misma credencial de 04-02, y siempre con caché propia, por el motivo del apartado 12.
- Claves de cifrado gestionadas por el cliente
Todo lo que guarda Azure está cifrado en reposo con claves de Microsoft, sin que haya que hacer nada. Las claves gestionadas por el cliente (CMK) cambian quién controla la clave: la genera Contoso en kv-contoso-pro, y el servicio la usa mediante su identidad administrada.
az keyvault key create --vault-name $KV -n clave-cifrado-tarjetas --kty RSA --size 3072 \
--ops wrapKey unwrapKey --protection softwareQué aporta de verdad: la capacidad de revocar. Si se deshabilita la clave, sttarjetascontosopro deja de poder descifrar sus datos de forma inmediata; es el "botón rojo" que exigen algunos auditores. Y qué cuesta: si esa clave se borra o se pierde, los datos son irrecuperables, sin que Microsoft pueda hacer nada. Por eso la protección contra purga es obligatoria en almacenes con CMK, y por eso Contoso las aplica solo a sttarjetascontosopro y a db-reservas, donde hay datos personales, y no al resto. La rotación de una CMK es transparente: se cifra de nuevo la clave de datos, no los datos.
- Auditoría, límites y qué NO poner en el almacén
Key Vault registra cada operación del plano de datos: quién leyó qué secreto, desde qué IP y con qué resultado. Esos registros no se conservan en el almacén, hay que enviarlos:
az monitor diagnostic-settings create --name diag-kv-contoso --resource $KV_ID \
--workspace $(az monitor log-analytics workspace show -g rg-contoso-seguridad-pro -n log-contoso-pro --query id -o tsv) \
--logs '[{"category":"AuditEvent","enabled":true}]'Con eso, en Log Analytics (07-02) se puede responder a preguntas como "¿quién leyó la clave de la pasarela fuera del horario laboral?" o "¿qué identidades han accedido a este secreto en los últimos 90 días?". Es requisito directo de PCI DSS y la razón por la que el área de trabajo vive en rg-contoso-seguridad-pro junto al almacén.
Sobre límites de rendimiento: Key Vault aplica limitación de solicitudes por almacén y región (del orden de 2.000 operaciones de secreto por 10 segundos, menos para operaciones con claves RSA). Al superarla devuelve HTTP 429. Por eso la regla es innegociable: la aplicación cachea los secretos en memoria durante horas y solo los relee al rotar o al recibir un error de autenticación. Un servicio que pide el secreto en cada petición HTTP tumba su propio almacén en cuanto llega tráfico real.
Y qué no debe ir a Key Vault:
- Configuración que no es secreta (URLs, nombres de servidor, banderas de funcionalidad): va a App Configuration o a los ajustes normales.
- Datos de negocio o datos personales: no es una base de datos. Un secreto son 25 KB como máximo.
- Ficheros grandes, aunque sean sensibles: cífralos y guárdalos en el almacenamiento, con la clave en Key Vault.
- Secretos de usuarios finales (contraseñas de pasajeros): esas viven en Entra External ID (04-01), con su hash, nunca aquí.
Errores Comunes y Consejos
- Crear el almacén con directivas de acceso "porque es lo que sale en tutoriales antiguos". Usa
--enable-rbac-authorization truedesde el principio; migrar después es tedioso. - Esperar que Colaborador de Key Vault deje leer secretos. No lo hace: gestiona el almacén, no sus datos.
- Borrar un almacén de prueba y no poder recrearlo con el mismo nombre. El nombre queda reservado durante la retención. Usa nombres desechables y 7 días de retención en pruebas.
- Activar protección contra purga sin entenderla. Es irreversible. En producción es obligatoria; en un curso o una prueba, evítala.
- Olvidar la zona DNS privada del punto de conexión. El almacén queda inaccesible con un error de red que no dice nada.
- Pedir el secreto en cada petición. HTTP 429 garantizado bajo carga. Cachea.
- Escribir el secreto en la línea de comandos. Queda en el historial del shell y en los registros de la canalización. Léelo de la entrada estándar o de una variable protegida.
- Consejo: un almacén por entorno y por ámbito de confianza.
kv-contoso-proykv-contoso-devseparados, nunca el mismo almacén para producción y desarrollo. - Consejo: pon una alerta sobre el registro de auditoría para lecturas desde identidades inesperadas. Es de las señales de compromiso más limpias que existen.
Ejercicios
Ejercicio 1: diseñar el almacén de Contoso Millas
"Contoso Millas" (centro-coste=CC-2077) necesita guardar: la clave de una API de socios comerciales, el certificado TLS de su subdominio, una clave de cifrado para los datos de los clientes y la cadena de conexión de una base heredada.
- Clasifica los cuatro elementos como secreto, clave o certificado, y justifícalo.
- Escribe el comando de creación del almacén con las opciones adecuadas y explica cada una.
- ¿Qué roles asignarías a la identidad administrada de la aplicación y al grupo de desarrollo, y en qué ámbito?
Ejercicio 2: rotar la clave de la pasarela de pago
La pasarela de pago admite dos claves activas simultáneamente y Contoso debe rotar cada 180 días sin cortar la venta de billetes.
- Describe los cinco pasos del proceso, indicando qué se hace en el proveedor y qué en Azure.
- ¿Cómo automatizarías el aviso de que se acerca la caducidad?
- La aplicación cachea el secreto 12 horas. ¿Qué implica eso para el paso de revocación?
Ejercicio 3: diagnosticar tres fallos
- Tras desplegar, la aplicación arranca pero falla al llamar a la pasarela; en los ajustes,
ClavePasarelaPagoaparece con un error de referencia. - Un proceso por lotes que lee 40 secretos al inicio de cada tarea empieza a recibir HTTP 429 al aumentar la concurrencia.
- El equipo borró
kv-contoso-devy al recrearlo con el mismo nombre recibe un error de conflicto.
Soluciones
Solución 1:
- Clave de la API de socios: secreto, porque hay que devolver su valor a la aplicación. Certificado TLS: certificado, para aprovechar la renovación automática y la integración con App Service. Clave de cifrado: clave, porque nunca debe salir del almacén y solo se usa para operaciones criptográficas. Cadena de conexión heredada: secreto (y a medio plazo, sustituirla por identidad administrada si el motor lo permite).
az keyvault create -n kv-contoso-millas-pro -g rg-contoso-seguridad-pro -l westeurope --sku standard --enable-rbac-authorization true --enable-purge-protection true --retention-days 90 --public-network-access Disabledmás las cuatro etiquetas obligatorias concentro-coste=CC-2077. RBAC porque es el modelo recomendado y permite ámbito por secreto; protección contra purga porque hay una clave de cifrado y su pérdida haría irrecuperables los datos; red pública deshabilitada más punto de conexión privado; retención de 90 días por ser producción.- A la identidad administrada, Usuario de Key Vault Secrets con ámbito del secreto concreto que necesita, y Usuario de Key Vault Crypto sobre la clave de cifrado si opera con ella. Al grupo de desarrollo, ningún rol de datos en el almacén de producción: como mucho Lector de Key Vault (metadatos, sin valores) para diagnosticar, y Responsable de Secretos solo en
kv-contoso-millas-dev.
Solución 2:
- (a) Generar la clave secundaria en el portal de la pasarela, dejando activa la actual. (b) Escribir la nueva versión del secreto en Key Vault con
az keyvault secret set, usando el URI sin versión en la referencia para no redesplegar. (c) Reiniciar la aplicación o esperar a que expire la caché de todas las instancias. (d) Comprobar en los registros del proveedor que el tráfico llega con la clave nueva. (e) Revocar la clave antigua en el proveedor. - Con Event Grid: el evento
SecretNearExpiryse emite 30 días antes de la fecha de--expires, y se conecta a una Logic App (06-04) que abre un ticket y avisa por correo al propietario indicado en las etiquetas del secreto. Requiere haber puesto la fecha de caducidad al crear el secreto. - Que no se puede revocar la antigua hasta pasadas al menos 12 horas desde la escritura de la nueva, o hasta haber reiniciado todas las instancias. Revocar antes provoca fallos de pago en las instancias que aún sirven la clave cacheada. Por eso el paso 4 —verificar en el proveedor— es obligatorio y no una formalidad.
Solución 3:
- La referencia no se resuelve. Causas por orden: la identidad administrada no tiene el rol Usuario de Key Vault Secrets en ese secreto; el nombre del secreto está mal escrito; el firewall del almacén bloquea a App Service (falta
--bypass AzureServices); o el almacén usa directivas de acceso y no RBAC. Se diagnostica conaz webapp config appsettings list, que muestra el error concreto de la referencia. - Se está superando la limitación de solicitudes del almacén. Solución: cachear los 40 secretos en memoria durante horas en lugar de releerlos por tarea, agrupar la carga en el arranque del proceso y no por tarea, y aplicar reintentos con espera exponencial ante el 429. Si el volumen es realmente necesario, repartir en varios almacenes por dominio funcional.
- Es la eliminación temporal: el almacén sigue existiendo en estado eliminado y su nombre está reservado. Solución correcta,
az keyvault recover -n kv-contoso-dev, que lo restaura con todos sus secretos. Si de verdad se quería destruir,az keyvault purge, que solo funciona si no tenía protección contra purga y requiere el permiso correspondiente.
Conclusión
Contoso ya no tiene secretos repartidos. Has hecho el inventario incómodo del punto de partida —ajustes en claro, un token en el historial de Git, un documento compartido, un PFX en un portátil— y lo has centralizado en kv-contoso-pro, dentro de rg-contoso-seguridad-pro. Distingues los tres tipos de objeto: secretos, que se devuelven; claves, que nunca salen del almacén y operan dentro de él; y certificados, con su ciclo de vida y renovación automática. Sabes que Estándar basta para casi todo, que Premium aporta HSM certificado y que Managed HSM cuesta miles de euros al mes y solo se justifica si lo exige un auditor.
Has creado el almacén con eliminación temporal —siempre activa, no desactivable— y protección contra purga, entendiendo que es irreversible y que el nombre de un almacén eliminado queda reservado durante la retención. Has elegido RBAC de Azure frente a las directivas de acceso heredadas, con el matiz decisivo de que permite conceder un secreto concreto a una identidad concreta, y conoces los roles de datos y la trampa de Colaborador de Key Vault. Has cerrado la red con el punto de conexión privado pe-kv-contoso, su zona DNS y la excepción de servicios de confianza. Manejas el versionado de secretos y sus fechas, los tres mecanismos de rotación —gestionada para claves de almacenamiento, avisos por Event Grid y el patrón de cinco pasos sin caída, que exige que el proveedor admita dos credenciales a la vez—, y los certificados TLS gestionados que App Service y Application Gateway consumen solos. Sobre todo, has llegado al momento en que las contraseñas desaparecen del despliegue: las referencias @Microsoft.KeyVault(...) resuelven los ajustes con la identidad administrada de 04-02 sin tocar una línea de código. Cierran la lección las claves gestionadas por el cliente con su poder de revocación y su riesgo de pérdida definitiva, la auditoría enviada a Log Analytics y los límites que obligan a cachear.
Con identidades gobernadas, permisos mínimos y cero secretos expuestos, el interior de la plataforma está razonablemente sano. El problema es que Contoso Reservas es una web pública: cualquiera en internet puede lanzarle peticiones, y ahí no valen ni RBAC ni Key Vault. En la siguiente lección, Protección DDoS y firewall de aplicaciones web, verás qué ataques llegan de verdad a una web de venta de billetes —volumétricos, de protocolo, de capa de aplicación y los bots que agotan las plazas del carrito—, montarás una directiva de WAF sobre fd-contoso-global con el conjunto de reglas de OWASP, aprenderás por qué se empieza siempre en modo detección y compararás qué protege exactamente cada capa: NSG, Azure Firewall, WAF y DDoS.
Curso de Azure
Módulo 1: Introducción a Azure
- ¿Qué es Azure?
- Modelos de servicio, regiones y zonas de disponibilidad
- Crear y configurar tu cuenta de Azure
- Recorrido por el portal de Azure
- Azure Resource Manager: suscripciones, grupos de recursos y etiquetas
- Azure CLI, PowerShell y Cloud Shell
Módulo 2: Servicios principales de Azure
- Máquinas virtuales de Azure
- Escalado y alta disponibilidad del cómputo
- Azure App Service
- Azure Storage: blobs, archivos, colas y tablas
- Redes en Azure: redes virtuales, subredes y NSG
- Conectividad híbrida y entrega global
Módulo 3: Bases de datos de Azure
- Elegir el servicio de datos adecuado
- Azure SQL Database
- Azure Cosmos DB
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Analítica de datos: Data Lake, Data Factory y Synapse
Módulo 4: Seguridad en Azure
- Microsoft Entra ID y gestión de identidades
- RBAC e identidades administradas
- Azure Key Vault
- Protección DDoS y firewall de aplicaciones web
- Microsoft Defender for Cloud
- Gobernanza y cumplimiento con Azure Policy
Módulo 5: Azure DevOps
- Introducción a Azure DevOps
- Azure Repos
- Azure Pipelines: integración continua
- Despliegue continuo con entornos y aprobaciones
- Azure Artifacts
- Infraestructura como código con Bicep
Módulo 6: Servicios avanzados de Azure
- Contenedores en Azure: Container Registry y Container Apps
- Azure Kubernetes Service (AKS)
- Azure Functions
- Azure Logic Apps
- Mensajería y eventos: Service Bus, Event Grid y Event Hubs
- Servicios de IA de Azure
Módulo 7: Monitoreo y gestión
- Azure Monitor: métricas, alertas y paneles
- Log Analytics y consultas KQL
- Application Insights
- Azure Automation y runbooks
- Copias de seguridad y recuperación ante desastres
Módulo 8: Gestión y optimización de costos
- Calculadora de precios y estimación de costes
- Azure Cost Management: análisis, presupuestos y alertas
- Reservas, planes de ahorro y Azure Hybrid Benefit
- Azure Advisor
- Estrategias de optimización y cultura FinOps
