Microsoft Intune¶
Introducción¶
Microsoft Intune es una solución de gestión de dispositivos y aplicaciones en la nube que forma parte de la suite de productos de administración de dispositivos móviles (MDM) y administración de aplicaciones móviles (MAM) de Microsoft. Diseñado para ayudar a las organizaciones a gestionar sus dispositivos móviles y proteger los datos corporativos, Intune ofrece una plataforma integral para administrar dispositivos móviles, aplicaciones y configuraciones desde una única consola basada en la nube.
Características importantes¶
Gestión de dispositivos móviles (MDM): Intune permite administrar dispositivos móviles, como teléfonos inteligentes, tabletas y computadoras portátiles, independientemente de su ubicación. Los administradores pueden aplicar políticas de seguridad, como el cifrado de datos, la configuración de contraseñas y el borrado remoto de dispositivos, para proteger la información confidencial de la empresa.
Gestión de aplicaciones móviles (MAM): Con Intune, las organizaciones pueden administrar aplicaciones móviles y controlar cómo se utilizan en los dispositivos corporativos y personales. Esto incluye la capacidad de publicar, configurar y proteger aplicaciones empresariales, así como aplicar políticas de protección de datos, como el cifrado de datos en aplicaciones específicas.
Protección de datos y prevención de pérdida de datos (DLP): Intune ofrece funciones avanzadas de protección de datos para proteger la información corporativa en dispositivos móviles. Esto incluye la capacidad de aplicar políticas de prevención de pérdida de datos para evitar que los usuarios copien, muevan o compartan datos confidenciales fuera de la red corporativa.
Integración con otros servicios de Microsoft: Intune se integra estrechamente con otros servicios en la nube de Microsoft, como Azure Active Directory y Office 365. Esto permite una administración unificada de identidades, acceso y aplicaciones en toda la organización.
Compatibilidad multiplataforma: Intune es compatible con una amplia variedad de plataformas, incluyendo dispositivos Windows, macOS, iOS y Android, lo que permite a las organizaciones administrar dispositivos heterogéneos desde una única consola.
Arquitectura¶
La arquitectura de Microsoft Intune se basa en una infraestructura en la nube altamente escalable y segura. Utiliza centros de datos globales de Microsoft Azure para ofrecer servicios de administración de dispositivos y aplicaciones desde cualquier ubicación.
Se compone de los siguientes componentes principales:
Consola de administración en la nube: Proporciona una interfaz web intuitiva para que los administradores gestionen dispositivos, aplicaciones y políticas desde cualquier lugar.
Servicios de backend: Incluye servicios en la nube que se encargan de la autenticación, autorización, gestión de dispositivos, aplicación de políticas y generación de informes.
Agentes y clientes: Los dispositivos móviles y los clientes de PC deben tener instalados agentes o aplicaciones específicas que se comunican con los servicios en la nube de Intune para recibir políticas, aplicaciones y actualizaciones.
API y conectores: Intune ofrece API que permiten la integración con otros sistemas de administración y herramientas de terceros. Además, proporciona conectores para integrarse con servicios como Azure Active Directory y Microsoft Endpoint Configuration Manager.
Flujo de trabajo¶
1- Descarga e instalación de la aplicación:
El usuario descarga e instala el "Portal de empresas" desde la tienda de aplicaciones de su dispositivo, Google Play Store para dispositivos Android o App Store para dispositivos iOS.
2- Inicio de sesión y autenticación:
Una vez instalada la aplicación, el usuario final inicia sesión en la aplicación utilizando sus credenciales de trabajo o educativas proporcionadas por la organización. La aplicación de Intune autentica al usuario con los servicios en la nube de Microsoft y verifica las credenciales del usuario para asegurar que tenga permiso para enrolar el dispositivo.
3- Registro y enrolamiento del dispositivo:
Después de iniciar sesión, el usuario puede enrolar su dispositivo en Intune. Durante el proceso de enrolamiento, el dispositivo se registra en Intune y se asocia con la cuenta del usuario. Intune instala automáticamente un perfil de configuración en el dispositivo, que incluye políticas de seguridad y configuraciones de administración definidas por el administrador de Intune.
4- Aplicación de políticas y configuraciones:
Una vez que el dispositivo está enrolado en Intune, el administrador puede aplicar políticas de seguridad y configuraciones a través de la consola de administración de Intune. Estas políticas pueden incluir requisitos de contraseña, configuraciones de red, restricciones de aplicaciones y otros controles de seguridad para proteger los datos corporativos.
5- Instalación y gestión de aplicaciones:
Finalmente, el administrador puede distribuir aplicaciones corporativas y públicas a los dispositivos enrolados. Los administradores pueden definir qué aplicaciones deben estar disponibles para los usuarios y pueden realizar un seguimiento del inventario de aplicaciones instaladas en los dispositivos gestionados. Tambien pueden realizar mantenimiento, como el bloqueo remoto de dispositivos perdidos o robados, eliminación selectiva de datos corporativos y la actualización de políticas de seguridad.
6- Memoria compartida
En dispositivos personales, la aplicación Portal de Empresas de Microsoft Intune divide la memoria interna del celular en dos partes distintas. Una de estas partes está dedicada a uso corporativo, mientras que la otra se destina a aplicaciones y archivos personales, a los cuales Intune no puede acceder ni administrar. Esta división permite que los usuarios mantengan sus datos personales separados y privados, mientras que la parte corporativa queda sujeta a la gestión y control por parte de los administradores de Microsoft Intune.
Integracion con GitHub¶
Se pensó que para el proceso de cicd estaria bueno crear un flujo de trabajo en GitHub Actions que interactúe con Microsoft Intune para realizar la integración y distribución de la aplicacion movil. Si bien, GitHub Actions no proporciona una acción específica para interactuar directamente con Microsoft Intune, esta conexion es viable mediante algunas herramientas y API que disponibiliza MS.
Idea principal¶
Flujo de trabajo en GitHub Actions compuesto por dos pasos: El primero, construiye la aplicación móvil para obtener el apk o adb. El segundo, interactúa con Microsoft Intune parapublicar la actualización a un grupo de usuarios.
Integración:¶
Como se mencionó anteriormente, GitHub Actions no proporciona una acción específica para interactuar directamente con Microsoft Intune, por lo que se necesita utilizar la API de Intune. Para esto se penso un script en PowerShell que permita interactuar con la API de Intune y realizar las operaciones necesarias para la distribución de aplicaciones.
Prerrequisitos:¶
- Contar con las credenciales de autenticación para acceder a la API de Intune (tenantId, clientId, clientSecret).
- Contar con los permisos necesarios para interactuar con la api graph.
- Contar con una aplicacion en Intune o se puede crear desde el script(AppName).
- Contar con los grupos de usuarios / destinatarios definidos (groupId).
Consideraciones:¶
- Proteger adecuadamente las credenciales de autenticación y limitar los permisos solo a lo que sea necesario para realizar las operaciones requeridas.
- Como la interaccion es a traves de una API, hay que controlar las posibles excepciones como error de TimeOut, Unahutorized, o si no encuentra la aplicación, entre otros.
- Cada organización podria tener varias aplicaciones, por lo que las variables o secret se deberian definir por repositorio, ya que se necesitará nombre de la app y grupo de destinatario para publicar la actualización.
Ejemplo¶
Acontinuacion se muestra un ejemplo de como podria ser la conexion con github mediante un script de powerShell que sea llamado desde las actions basandonos en el siguiente repo y ejemplo.
# Instalar el módulo de PowerShell para Microsoft Graph si no está instalado
if (-not (Get-Module -Name Microsoft.Graph.Intune -ListAvailable)) {
Install-Module -Name Microsoft.Graph.Intune -Scope CurrentUser -Force -AllowClobber
}
# Importar el módulo de PowerShell para Microsoft Graph
Import-Module Microsoft.Graph.Intune
# Definir variables
$tenantId = "<TU_TENANT_ID>"
$appName = "Mi Aplicación Android"
$apkPath = "<RUTA_AL_ARCHIVO_APK>"
$groupId = "<ID_DEL_GRUPO_DE_DESTINATARIOS>"
$client_id = "<TU_CLIENT_ID>"
$client_secret = "<TU_CLIENT_SECRET>"
# Obtener token de acceso
$tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/token"
$body = @{
client_id = $client_id
scope = "https://graph.microsoft.com/.default"
client_secret = $client_secret
grant_type = "client_credentials"
}
$response = Invoke-RestMethod -Uri $tokenEndpoint -Method Post -Body $body
$accessToken = $response.access_token
# Subir archivo APK a Intune
$uploadUrl = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps"
$headers = @{
Authorization = "Bearer $accessToken"
"Content-Type" = "multipart/form-data"
}
$response = Invoke-RestMethod -Uri $uploadUrl -Method Post -Headers $headers -InFile $apkPath -Verbose
# Obtener el ID de la aplicación subida
$uploadedAppId = $response.id
# Asignar la aplicación a un grupo de destinatarios
$assignmentUrl = "https://graph.microsoft.com/beta/deviceAppManagement/mobileApps/$uploadedAppId/deviceAppManagementAssignments"
$assignmentBody = @{
"@odata.type" = "#microsoft.graph.targetedManagedAppPolicyAssignment"
targetGroupId = $groupId
}
Invoke-RestMethod -Uri $assignmentUrl -Method Post -Headers $headers -Body ($assignmentBody | ConvertTo-Json) -Verbose
Write-Output "La aplicación ha sido desplegada correctamente en Microsoft Intune."
name: Deploy to Intune
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up PowerShell
uses: microsoft/setup-powershell@v1
- name: Deploy APK to Intune
run: |
# Ejecutar el script PowerShell
pwsh -File deploy.ps1
env:
TENANT_ID: ${{ secrets.TENANT_ID }}
CLIENT_ID: ${{ secrets.CLIENT_ID }}
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
APK_PATH: "<RUTA_AL_ARCHIVO_APK>"
GROUP_ID: "<ID_DEL_GRUPO_DE_DESTINATARIOS>"
Limitaciones:¶
- Configuracion inicial costosa (crear aplicación, asignar permisos a usuarios, enrrolar dispositivos, identificar los grupos de usuarios, etc)
- No todos los usuarios estarian dispuestos a usar su celular personal.
- Se necesitaria un tenant exclusivo para aquellas aplicaciones que sean desplegadas por el proceso de cicd gitHub. Hoy esto no es viable ya que Intune está asociado a nuestra facturación y contrato de suscripciones de licencias.
- Intune solo trabaja con ambiente productivo.
- No presenta observabilidad en las aplicaciones.
- Se requiere plantear un plan de acción para posibles fallas post implementación.
- Se requiere plantear la estrategia de GDC para aplicaciones críticas.
- Algunas aplicaciones pueden no ser completamente compatibles con las políticas de seguridad y las restricciones de Intune, lo que puede afectar la funcionalidad o el rendimiento de las aplicaciones administradas.
Conclusion:¶
Si bien Microsoft Intune ofrece una solución integral para la gestión de dispositivos móviles y la distribución de aplicaciones, es importante considerar que puede no adecuarse completamente a las necesidades y requisitos mínimos para llevar adelante un proceso de CI/CD integrado de manera eficiente.
Si bien Intune resuelve la parte de distribución de aplicaciones productivas, carece de funcionalidades para satisfacer otros entornos, y no cuenta con monitoreo exclusivo para las pruebas en entornos de calidad (QA). Además, la integración con GitHub se realiza mediante API, lo que implica la necesidad de manejar todos los posibles casos de errores que la API pueda devolver, añadiendo complejidad al proceso.
La necesidad de contar con una cuenta corporativa y dispositivos de la compañía puede ser una limitación para algunos operarios, especialmente en entornos donde se requiere acceso a herramientas de desarrollo y pruebas desde dispositivos personales.
Asi como tambien, la limitación de contar con un tenant adicional para aplicaciones que corran por cicd implica tener estas aplicaciones junto con las que requieren administración manual como outlook, teams, antiVirus, entre otras, lo que puede generar confusiones y superposiciones en la administración de actualizaciones desde el panel de administración.
En resumen, si bien Intune puede ser adecuado para ciertos aspectos de la gestión de dispositivos móviles y distribución de aplicaciones, no cumple con los requisitos específicos de nuestro proceso de CI/CD integrado. Necesitamos una solución que nos permita agilizar configuraciones manuales, distribuir aplicaciones de manera independiente y asegurar que el proceso de CI/CD sea la única entrada de distribución, lo cual no es posible con Intune en su estado actual.