Validar la configuración de tus recursos en Azure con PSRule

Son muchas las buenas prácticas y consideraciones que deberías de tener en cuenta al desplegar tus recursos en Azure y obviamente es complicado recordar cada una de ellas. Hace ya un tiempo Microsoft puso a nuestra disposición el conocido WAF (Well-Architected Framework), que se encarga de recoger todas estas buenas prácticas desde diferentes perspectivas. Hoy quiero compartir contigo una herramienta llamada PSRule que te permite analizar, antes y después, cómo de bien estamos siguiendo estas prácticas.

¿Qué es PSRule?

Se trata de un módulo de PowerShell que nos permite analizar la infraestructura que vamos a desplegar, a través de plantillas ARM, Bicep o manifiestos de Kubernetes, o la que ya tenemos desplegada, con el fin de obtener un informe de cómo de bien estamos siguiendo las buenas prácticas. A día de hoy puedes usar tanto Windows, Linux o Mac para utilizar este módulo, ya que PowerShell está disponible en todas las plataformas. Puedes usar las reglas ya pre-construídas (unas 260 reglas) o si quieres puedes además generar las tuyas propias.

Instalar PSRule en local

Si no estás en Windows, y hasta ahora no has instalado PowerShell, es lo primero que necesitas. En mi caso, voy a hacer la instalación para Mac usando Homebrew:

# Install PowerShell on MacOs if you don't have it
brew install --cask powershell

Ahora, desde un terminal de PowerShell, necesitas instalar el módulo de PSRule de la galería:

#Install PSRule
Install-Module -Name 'PSRule.Rules.Azure' -Repository PSGallery -Scope CurrentUser

Exportar la configuración de tus recursos de Azure

En este artículo voy a centrarme en el uso de la herramienta en local, para que veas qué es lo que obtienes, y asumiendo que no tenemos código previo, ni en YAML, ni en Bicep ni manifiestos 😃. En este caso, lo primero que debes hacer es iniciar sesión:

# Connect to Azure
Connect-AzAccount;
# Confirm if you are in the right subscription
Get-AzContext;

y exportar o bien todos los recursos de la suscripción elegida o bien uno o varios grupos de recursos (también puedes exportar todos los recursos de todas las suscripciones a las que el usuario tenga acceso):

# Export all Azure resources for a subscription to JSON files
Export-AzRuleData -OutputPath 'out/';
#Export just a resource group
Export-AzRuleData -OutputPath 'out/' -ResourceGroupName 'private-app-svc';

El proceso puede tardar unos instances. Una vez que finalice tendrás un archivo en formato JSON por cada una de las suscripciones con los recursos y la configuración de estos.

Analizar la configuración de los recursos

Con la configuración exportada el análisis se realiza con el siguiente comando:

Invoke-PSRule -InputPath 'out/' -Module 'PSRule.Rules.Azure';

Al lanzarlo contrastará tu configuración con todas las reglas que vienen con el módulo y devolverá un resultado parecido a este:

Resultado de PSRule

Si quisieras además utilizar otras reglas disponibles en la galería deberías importarlas y usarlas de la siguiente manera:

# Analyze using CAF module
Install-Module -Name 'PSRule.Rules.CAF' -Scope CurrentUser;
Invoke-PSRule -Module 'PSRule.Rules.CAF' -InputPath 'out/';

También puedes crear tus propias reglas.

Por otro lado, si solo quieres que te devuelva los errores puedes añadir el parámetro -Outcome Fail:

Invoke-PSRule -InputPath 'out/' -Module 'PSRule.Rules.Azure' -Outcome Fail;

Y también puedes pedirle que te lo devuelva en otros formatos como YAML, JSON, Markdown, NUnit3, CSV o Wide:

# Output format (YAML, JSON, Markdown,NUnit3,CSV, Wide)
Invoke-PSRule -InputPath 'out/' -Module 'PSRule.Rules.Azure' -Outcome Fail -OutputFormat 'Markdown' > 'report.md';
Invoke-PSRule -InputPath 'out/' -Module 'PSRule.Rules.Azure' -Outcome Fail -OutputFormat 'Yaml'

Otra salida interesante puede ser el formato resumen:

# Show as summary
Invoke-PSRule -InputPath 'out/' -Module 'PSRule.Rules.Azure' -As Summary;

Automatizar el proceso con tu herramienta de CI/CD

Por supuesto, todo este proceso puedes integrarlo con tu herramienta para CI/CD. En la documentación tienes ejemplos para Azure DevOps y GitHub.

Para más información puedes echar un vistazo en su sitio oficial.

¡Saludos!

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.