Cerrar
InicioAzureMicrosoft Azure: Ejecutar Scripts de O365 desde Cuentas de Automatización

Microsoft Azure: Ejecutar Scripts de O365 desde Cuentas de Automatización

Seguro que muchos de vosotros tenéis scripts para automatizar ciertos procesos en vuestros sistemas, desde actualizar atributos hasta deshabilitar usuarios y retirar licencias de Office 365. “Casi siempre” se utilizan “scripts locales” de PowerShell que se ejecutan en tareas programadas de algún servidor, algo que, siempre nos ofrece un “plus” de inseguridad porque algunos scripts se ejecutan con credenciales en texto plano (seguro que no es vuestro caso :-)). Pero y si os digo que podéis ejecutar vuestros scripts de O365 desde cuentas de automatización de Azure .. pues si, se puede hacer y además es muy sencillo.

Aquí os dejo una pequeña infografía de los requisitos y conexiones entre los diferentes servicios implicados para configurar la ejecución de scripts de O365 desde Azure:

La configuración es muy sencilla, pero antes de nada veamos que necesitamos para poder ejecutar un script de PowerShell para Exchange Online. El script lo que hará será retirar la fotos de los usuarios que están deshabilitados, pero en vez de buscar a los usuarios bloqueados, el script buscará usuarios que tienen en el nombre para mostrar la palabra “(DISABLED”. Pues bien, que veamos que necesitamos para configurar un runbook que ejecute un script de PowerShell:

  • Cuenta de Automatización: Azure Automation ofrece un servicio de configuración y de automatización basado en la nube que facilita una administración coherente en los entornos que se encuentren dentro y fuera de Azure. Incluye automatización de procesos, administración de configuración, administración de actualizaciones, funcionalidades compartidas y características heterogéneas. Azure proporciona un control completo durante la implementación, las operaciones y la retirada de las cargas de trabajo y recursos (descripción de Microsoft)
  • Cuenta de Usuario: necesitamos una cuenta de usuario el cual se conectará a los servicios de Microsoft 365 (O365, EXO, SPO, etc..), el cual, además, tenga privilegios para realizar las tareas encomendadas (asignación del rol rbac necesario).
  • Script: publicaremos el código de nuestro script en el runbook que creemos, el cual, se ejecutará en la cuenta de automatización que tengamos
  • Credenciales: parte importante y casi el porque de este artículo, se creará una especie de llavero con las credenciales del usuario que nos hemos creado, así no tendremos que preocuparnos por cifrar la contraseña (ya se encarga Azure).

Teniendo claro los requisitos, ahora toca ponerse con la configuración. Para la creación de la cuenta de automatización prefiero dejaros un enlace de Microsoft, porque, aunque el proceso es muy sencillo, siempre podéis buscar información adicional al simple hecho de crear la cuenta: Creación de una cuenta de Azure Automation.

Y ahora sí, vayamos con el primer paso, crear una cuenta de usuario y asignar los roles necesarios para ejecutar las tareas encomendadas en el script. Para este tipo de tareas, siempre es recomendado crear una cuenta de usuario cloud, vamos, creada en AzureAD y no utilizar una cuenta sincronizada de On-Premises. De esta forma, la autenticación dependerá directamente de AzureAD y será más rápido y “siempre” está disponible. Pues bien, accedemos al Portal de Azure, nos vamos a la sección de AzureAD – Usuarios y pulsamos en Crear usuario. Escribimos el nombre de usuario, siempre que podáis, utilizar un “naming convention” para que sea distinguible, en mi caso:

  • Prefijo: Az, identificando que será una cuenta creada en AzureAD
  • Tipo: Task, identifica que será utilizada para tarea automáticas
  • Sufijo: Exchange, identifica el servicio sobre el que configuraremos las tareas programadas

Además, siempre configuro las cuentas con el dominio del tenant, tratando de identificar que es una cuenta meramente de servicios. (Esto no tiene porque ser así, podéis elegir cualquier de los dominios que tengáis configurados). En el proceso de alta, podemos asignarle el rol de directorio que necesitamos, en mi caso será: Administrador de Exchange.

La contraseña dejo que la genere el sistema, porque no es algo “relevante” si esta cuenta solo la vamos a utilizar para tareas automatizadas (luego lo explico), pero lo que sí, la copio porque la voy a necesitar. Una vez cubiertos todos los datos del usuario, pulsamos en Crear:

Y ya tenemos nuestro “usuario de servicio”, el cual, si lo buscamos ya lo vemos disponible:

Lo primero que haré, será comprobar que los permisos del rol que le hemos asignado previamente, funcionan correctamente para ello iniciamos sesión en el Centro de administración de Exchange Online. Como es la primera vez que estamos iniciando sesión con esta cuenta, el sistema nos solicitará que la cambiemos y esto haremos:

Si el cambios se ha llevado a cabo con éxito, iniciaremos sesión. 

Y como os he comentado antes, yo he iniciado sesión en el Centro de Administración de Exchange Online (https://outlook.office365.com/ecp) y como podéis apreciar, ya estamos dentro de dicho centro de administración:

Por último, debemos establecer que la cuenta de usuarios creada no le caduque la contraseña, sino en el momento del cambio de contraseña el script fallaría:

Ahora nos vamos a la cuenta de automatización previamente creada y, antes de crear nuestro runbook (no tiene que ser en este orden obligatoriamente, pero si debemos completar este paso antes de ejecutar el script), debemos importar los módulos necesarios para O365 en dicha de cuenta de automatización. Para ello, desde la cuenta de automatización, nos vamos a la sección Módulos:

Pulsamos en Examinar la galería:

En el buscador ahora escribimos Online y en el listado que nos devuelve, seleccionamos MSONLINE:  

Pulsamos en Importar:

Y si ya tenemos el resto de módulos dependientes, pulsamos en Aceptar:

En cuestión de segundos tenemos el módulo importado y disponible para llamarlo desde nuestros scripts:

Ahora nuevamente a la sección de Módulos, pulsamos en Examinar la galería y buscamos por Connect-MS365:

Pulsamos en Importar:

Y aquí quería llegar, como vemos, es posible que para este módulo tenga alguna dependencia que no tenemos instalada, en este caso el módulo PowerShellGet.  Por lo tanto, no nos dejará instalar el modulo que hemos seleccionado hasta que no instalemos el módulo que nos comenta.

Pues repetimos el mismo proceso desde la sección Módulos hasta llegar a la importación del módulo que nos falta:

Y si para importar este módulo nos hace falta otro más .. nos lo dirá :-).

Y nuevamente volvemos a repetir el proceso desde la sección Módulos para tratar de instalar todas las dependencias:

Ahora que tenemos las dependencias instaladas, volvemos a buscar el Connect-MS365:

Y como podéis apreciar, ahora si podemos instalarlo:

Con esto, ya tenemos los módulos necesarios para ejecutar nuestro script, pero antes de crear nuestro runbook vamos a crear nuestras credenciales las cuales llamaremos desde el script del runbook. Para esto, nos vamos a la sección de Credenciales dentro de la cuenta de automatiación y pulsamos en Agregar una credencial:

Escribimos un nombre para la cuenta, el nombre de usuario y la contraseña que habíamos puesto en su momento a dicha cuenta. Como os había comentado, a partir de ahora la contraseña ya no es vital tenerla guardada, puesto que como esta cuenta la utilizaremos para ejecutar procesos automatizados desde PowerShell y llamaremos a esta credencial mediante variables ($credential = Get-AutomationPSCredential -Name “Nombre-Credencial”) nos vamos a necesitar la contraseña. Además, podríamos cambiarla desde AzureAD, actualizarla nuevamente aquí y todo funcionará sin problemas.

Una vez que, tengamos todos los datos introducidos, pulsamos en crear:

Y con esto ya tenemos nuestras credenciales a buen recaudo y disponibles para llamarla vía script ($credential = Get-AutomationPSCredential -Name “Nombre-Credencial”):

Ahora si, nos tocar crear el runbook, para ello, desde la sección de Runbooks pulsamos en Crear un runbook:

Escribimos un nombre descriptivo, en Tipo de Runbook elegimos PowerShell:

Escribimos una pequeña descripción (opcional) y pulsamos en Crear:

Una vez creado, automáticamente nos lleva a la edición del script. Aquí la parte más “importante” es llamada a la credencial que hemos creado previamente. En mi caso la credencial creada tiene el nombre AzTaskExchange y así la llamamos desde la variable $credential:

$credential = Get-AutomationPSCredential -Name “AzTaskExchange
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $credential -Authentication Basic -AllowRedirection
Import-PSSession $Session
Get-User -Filter “DisplayName -like ‘*(DISABLED*'” | Remove-UserPhoto -Confirm:$false
Get-PSSession | Remove-PSSession

Luego el resto del script es lo de siempre, en mi caso busco usuarios que contienen el texto “(DISABLED” en su nombre para mostrar y les retiro la foto que tengan asignada. Una vez finalizada la edición del script pulsamos en Guardar:

Y para que esté activo debemos pulsar en Publicar:

Pues ya tenemos nuestro script preparado en la cuenta de automatización, pero nos queda la programación asignada para que ejecute automáticamente en base a la programación asignada. 

Desde el propio Runbook nos vamos a la sección Programas y pulsamos en Agregar una programación:

Pulsamos en Programar…

Si tenemos programaciones creadas previamente, podemos seleccionar la que queramos, sino, pulsamos en Crear una programación nueva:

Escribimos un nombre para la programación y vamos modificando los parámetros en base a nuestras necesidades y pulsamos en Crear

Automáticamente nos selecciona la programación creada y pulsamos en Aceptar:

Pues ya tenemos nuestra programación asignada, si queremos agregar más programaciones debemos repetir el proceso de pulsar en Agregar una programación y repetir el resto de pasos:

Pues ya está, tenemos nuestro script para O365 preparado en una cuenta de automatización. Sino queremos esperar a que se ejecute el runbook en la hora programada, en la sección Información general del runbook pulsamos en Inicio:

Ahora pulsamos en Si y se iniciará el runbook:

Ahora es cuestión de esperar a que nos vaya mostrando registros según se vayan ejecutando el proceso y viendo si tenemos algún problema o no.

Como os había comentado, en mi caso la idea era quitar las fotos de los usuarios que contentan en el nombre para mostrar el texto (DISABLED), aquí os muestro uno de los usuarios a los cuales el script les quitará la foto:

Pasados unos segundos, veremos que el usuario ya no tiene foto!! 

Y si volvemos al runbook veremos que se ha completado sin problemas:

Que se ejecute sin incidencias no quiere decir que el script funcione al 100%, sino que la ejecución se ha podido completar sin problemas. En mi caso, si vamos al detalle de la tarea completada vemos que en la sección de Errores tenemos algunas entradas. Para este caso errores “sin importancia”, porque como el script no comprueba antes quien tiene o no foto de los usuarios con el texto (DISABLED), a los que ya no tienen foto no se la puede retirar y lo indica, pero vamos, es cuestión de pulir el script. 

Ahora si, hemos completado el proceso y como veis, es bastante sencillo y muy útil. Yo he configurado un script sencillo, pero podéis configurar casi cualquier script para gestionar los servicios de O365 vía PowerShell:

  • Listar usuarios sin licencia
  • Deshabilitar usuarios
  • Desasignar licencias de usuarios desactivados
  • Crear usuarios
  • Convertir buzones de Exchange a buzones compartidos, etc..

Tiene un potencial importante, además, de ofrecer un plus de seguridad importante al tener almacenadas las credenciales de la cuenta de servicio en Azure.

Espero que os haya sido de utilidad, ahora, como siempre, os toca probarlo a vosotros!!!

Microsoft Azure: Tra
Microsoft Teams: Blo
NO HAY COMENTARIOS

DEJA UN COMENTARIO

Este sitio web utiliza cookies. Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra política de cookies. ACEPTAR

Aviso de cookies
Share This