AZ-104
Deep Dive
Elimina credenciales del código. Una app o VM obtiene una identidad gestionada por Azure y puede autenticarse contra otros servicios sin contraseñas ni secrets hardcodeados.
Contenido
❌ Sin Managed Identity
# App necesita leer un secreto de Key Vault
# ¿Cómo se autentica?
CLIENT_ID = "abc-123" # hardcodeado
CLIENT_SECRET = "s3cr3t!" # ← PELIGRO
credential = ClientSecretCredential(
tenant_id, CLIENT_ID, CLIENT_SECRET
)
client = SecretClient(vault_url, credential)
secret = client.get_secret("db-password")✓ Con Managed Identity
# App usa Managed Identity — cero credenciales
credential = DefaultAzureCredential()
# Azure inyecta el token automáticamente ↑
client = SecretClient(vault_url, credential)
secret = client.get_secret("db-password")| Dimensión | System-assigned | User-assigned |
|---|---|---|
| Ciclo de vida | Ligado al recurso — se crea/elimina con él | Independiente — persiste aunque se elimine el recurso |
| Compartible | No — solo ese recurso puede usarla | Sí — múltiples recursos pueden compartirla |
| Creación | Automática al habilitar en el recurso | Recurso independiente en Azure (tipo: Managed Identity) |
| Caso típico | Una VM que accede a Key Vault solo para ella | Fleet de VMs o apps que comparten el mismo acceso |
| Gestión de roles | Asignar roles al Object ID de la identidad del recurso | Asignar roles a la User-assigned MI una vez, asignarla a muchos recursos |
| Recomendado cuando | Recurso único con acceso específico | Múltiples recursos necesitan los mismos permisos |
Habilitar System-assigned en una VM
Portal
VM → Identity → System assigned → Status: On → SaveCLI
az vm identity assign --name myVM --resource-group myRGPowerShell
Update-AzVM -VM $vm -IdentityType SystemAssignedBicep/ARM
identity: { type: "SystemAssigned" } en el recursoFlujo completo: VM → Key Vault
App Service → Key Vault
Key Vault References en App Settings evita incluso tener el valor en el portal.
VM / Function → Storage Blob
Storage Blob Data Contributor permite leer/escribir datos pero no gestionar la cuenta.
Recursos compatibles con Managed Identity
| Aspecto | Service Principal (manual) | Managed Identity |
|---|---|---|
| Credenciales | Client Secret o Certificado — gestión manual | Ninguna — Azure gestiona el token |
| Rotación | Manual (recordar expiración) | Automática |
| Uso en código | ClientSecretCredential(tenant, client_id, secret) | DefaultAzureCredential() — sin parámetros |
| Aplicación | Apps externas, CI/CD pipelines, scripts externos | Recursos de Azure (VMs, Apps, Functions) |
| Riesgo de leak | Alto — secret puede filtrarse en logs/repos | Ninguno — no hay secret que filtrar |
| Cuándo usar SP | GitHub Actions, Terraform, apps fuera de Azure | Si el recurso vive en Azure → siempre preferir MI |
Workload Identity Federation permite que workloads externos (GitHub Actions, GitLab CI, Kubernetes, Terraform Cloud) obtengan tokens de Entra ID sin necesidad de almacenar Client Secrets. Usa el estándar OIDC.
Cómo funciona — GitHub Actions ejemplo
Ventajas vs Client Secret
✓ Cero secretos almacenados en GitHub, GitLab, Terraform Cloud
✓ No hay rotación de secretos que gestionar
✓ Si el repositorio se hace público, no hay secret que robar
✓ Cada pipeline/branch puede tener su propia identidad granular
✓ El token tiene alcance temporal — expira tras cada job
Proveedores soportados
En AKS, el enfoque moderno es Workload Identity (antes llamado AAD Pod Identity). Permite que pods individuales tengan su propia identidad en Entra ID, sin compartir credenciales con otros pods en el mismo nodo.
Arquitectura
Node-level MI (método antiguo): La VM del nodo de AKS tiene una Managed Identity. TODOS los pods en ese nodo comparten la misma identidad. Si un pod es comprometido, tiene acceso a los mismos recursos que todos los otros pods.
Workload Identity (método recomendado):
• Cada pod usa un Kubernetes Service Account anotado
• El Service Account se federa con una User-assigned MI o App Registration en Entra ID
• Solo ese pod obtiene el token para esa identidad específica
• Principio de mínimo privilegio a nivel de pod
Configuración básica
Pod Identity v1/v2 (deprecated) vs Workload Identity
El addon AAD Pod Identity (v1 y v2) está deprecated. Microsoft recomienda migrar a Workload Identity que usa el estándar OIDC. La principal diferencia: Workload Identity no requiere CRDs ni daemonsets adicionales — usa el mecanismo nativo de OIDC federation.
¿Entendiste este tema?
Pon a prueba lo que acabas de aprender
¿Cuál es la ventaja principal de usar una Managed Identity para que una VM acceda a Azure Key Vault?