Autenticación de solo aplicación para scripts desatendidos en Exchange Online PowerShell y PowerShell de cumplimiento de seguridad &

Los escenarios de auditoría e informes de Microsoft 365 suelen implicar scripts desatendidos en Exchange Online PowerShell y PowerShell de cumplimiento de seguridad&. En el pasado, el inicio de sesión desatendido requería almacenar el nombre de usuario y la contraseña en un archivo local o en un almacén secreto al que se accedía en tiempo de ejecución. Pero, como todos sabemos, almacenar las credenciales de usuario localmente no es una buena práctica de seguridad.

La autenticación basada en certificados (CBA) o la autenticación solo de aplicación, como se describe en este artículo, admite escenarios de automatización y scripts desatendidos mediante aplicaciones Azure AD y certificados autofirmados.

Nota:

  • Las características y procedimientos descritos en este artículo requieren las siguientes versiones del módulo Exchange Online PowerShell:

    • PowerShell de Exchange Online (Connect-ExchangeOnline): versión 2.0.3 o posterior.
    • Seguridad & PowerShell de cumplimiento (Connect-IPPSSession): versión 2.0.6-Preview5 o posterior.

    Para obtener instrucciones sobre cómo instalar o actualizar el módulo, consulte Instalación y mantenimiento del módulo de PowerShell Exchange Online. Para obtener instrucciones sobre cómo usar el módulo en Azure Automation, consulte Administración de módulos en Azure Automation.

  • La versión 2.0.5 y versiones anteriores se conocen como el módulo Exchange Online PowerShell V2 (abreviado como módulo EXO V2). La versión 3.0.0 y posteriores se conocen como el módulo Exchange Online PowerShell V3 (abreviado como módulo EXO V3).

  • En PowerShell de Exchange Online, no puede usar los procedimientos de este artículo con los siguientes cmdlets de grupo de Microsoft 365:

    Puede usar Microsoft Graph para reemplazar la mayor parte de la funcionalidad de esos cmdlets. Para obtener más información, vea Trabajar con grupos en Microsoft Graph

  • En PowerShell de cumplimiento de seguridad & , no puede usar los procedimientos de este artículo con los siguientes cmdlets:

  • La autenticación solo para aplicaciones no admite la delegación. El modelo de aplicaciones seguras admite scripting desatendido en escenarios de delegación. Para obtener más información, haga clic aquí.

¿Cómo funciona?

El módulo de PowerShell Exchange Online usa la biblioteca de autenticación de Active Directory para capturar un token de solo aplicación mediante el identificador de aplicación, el identificador de inquilino (organización) y la huella digital del certificado. El objeto de aplicación aprovisionado en Azure AD tiene asignado un rol de directorio, que se devuelve en el token de acceso. El control de acceso basado en rol (RBAC) de la sesión se configura mediante la información de rol de directorio que está disponible en el token.

Ejemplos de conexión

En los ejemplos siguientes se muestra cómo usar el módulo de PowerShell Exchange Online con autenticación de solo aplicación:

Importante

En los siguientes comandos de conexión, debe usar un .onmicrosoft.com dominio para el valor del parámetro Organization .

Los siguientes comandos de conexión tienen muchas de las mismas opciones disponibles, como se describe en Conectarse a Exchange Online PowerShell y Conectarse a PowerShell de cumplimiento de seguridad&. Por ejemplo:

  • En Exchange Online PowerShell mediante el módulo EXO V3, puede omitir o incluir el modificador UseRPSSession para usar cmdlets de API REST o cmdlets de PowerShell remotos originales. Para obtener más información, consulte Novedades para la versión 3.0.0 (el módulo EXO V3).

  • Los entornos de Microsoft 365 GCC High o DoD de Microsoft 365 requieren los siguientes parámetros y valores adicionales:

    • Connect-ExchangeOnline en GCC High: -ExchangeEnvironmentName O365USGovGCCHigh.
    • Connect-IPPSSession en GCC High: -ConnectionUri https://ps.compliance.protection.office365.us/powershell-liveid/ -AzureADAuthorizationEndpointUri https://login.microsoftonline.us/common.
    • Connect-ExchangeOnline en DoD: -ExchangeEnvironmentName O365USGovDoD.
    • Connect-IPPSSession en DoD: -ConnectionUri https://l5.ps.compliance.protection.office365.us/powershell-liveid/ -AzureADAuthorizationEndpointUri https://login.microsoftonline.us/common.
  • Conexión mediante una huella digital de certificado:

    El certificado debe instalarse en el equipo donde se ejecuta el comando. El certificado se debe instalar en el almacén de certificados de usuario.

    • Exchange Online PowerShell:

      Connect-ExchangeOnline -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • Seguridad & PowerShell de cumplimiento:

      Connect-IPPSSession -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
  • Conexión mediante un objeto de certificado:

    No es necesario instalar el certificado en el equipo donde se ejecuta el comando. Puede almacenar el objeto de certificado de forma remota. El certificado se captura cuando se ejecuta el script.

    • Exchange Online PowerShell:

      Connect-ExchangeOnline -Certificate <%X509Certificate2 Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • Seguridad & PowerShell de cumplimiento:

      Connect-IPPSSession -Certificate <%X509Certificate2 Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
  • Conexión mediante un certificado local:

    Nota:

    El uso de un comando ConvertTo-SecureString para almacenar la contraseña del certificado elimina localmente el propósito de un método de conexión seguro para escenarios de automatización. El uso de un comando Get-Credential para solicitar la contraseña del certificado de forma segura no es ideal para escenarios de automatización. En otras palabras, realmente no hay ninguna manera automatizada y segura de conectarse mediante un certificado local.

    • Exchange Online PowerShell:

      Connect-ExchangeOnline -CertificateFilePath "C:\Users\navin\Desktop\automation-cert.pfx" -CertificatePassword (Get-Credential).password -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • Seguridad & PowerShell de cumplimiento:

      Connect-IPPSSession -CertificateFilePath "C:\Users\navin\Desktop\automation-cert.pfx" -CertificatePassword (Get-Credential).password -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      

Configurar la autenticación solo enla aplicación

Se requiere una incorporación inicial para la autenticación con objetos de aplicación. La entidad de servicio y la aplicación se usan de forma intercambiable, pero una aplicación es como un objeto de clase mientras que una entidad de servicio es como una instancia de la clase. Puede obtener más información en Objetos de la aplicación y entidad de servicio en Azure Active Directory.

Para ver un flujo visual detallado sobre la creación de aplicaciones en Azure AD, consulte https://aka.ms/azuread-app.

  1. Registrar la aplicación en Azure AD.

  2. Asignar permisos de API a la aplicación.

    Un objeto de aplicación tiene el permiso predeterminado User.Read. Para que el objeto de aplicación tenga acceso a los recursos, debe tener el permiso de aplicación Exchange.ManageAsApp.

  3. Generar un certificado autofirmado

    • Para la autenticación de solo aplicación en Azure AD, normalmente se usa un certificado para solicitar acceso. Cualquier persona que tenga el certificado y su clave privada puede usar la aplicación y los permisos concedidos a la aplicación.

    • Cree y configure un certificado X.509 autofirmado, que se usará para autenticar la aplicación contra Azure AD, mientras solicita el token de acceso solo de aplicación.

    • Esto es similar a la creación de una contraseña para cuentas de usuario. El certificado también puede estar autofirmado. Consulte la sección Apéndice más adelante en este tema para obtener instrucciones sobre cómo generar certificados en PowerShell.

      Nota:

      Los certificados de Cryptography Next Generation (CNG) no se admiten en la autenticación solo de aplicación en Exchange. Los certificados de CNG se crean de forma predeterminada en las versiones modernas de Windows. Debe usar un certificado de un proveedor de claves CSP. La sección Apéndice describe dos métodos compatibles para crear un certificado CSP.

  4. Adjuntar el certificado a la aplicación de Azure AD

  5. Asignar roles de Azure AD a usuarios

    La aplicación necesita tener asignados los roles RBAC adecuados. Como las aplicaciones están aprovisionadas en Azure AD, puede usar cualquiera de los roles integrados admitidos.

Paso 1: Registrar la aplicación en Azure AD.

Nota:

Si tiene problemas, revise los permisos necesarios para comprobar que su cuenta puede crear la identidad.

  1. Abra el portal de Azure AD en https://portal.azure.com/.

  2. En el cuadro Buscar de la parte superior de la página, empiece a escribir Registros de aplicaciones y, a continuación, seleccione Registros de aplicaciones en los resultados de la sección Servicios.

    Captura de pantalla que muestra Registros de aplicaciones en los resultados de búsqueda de la página principal del Azure Portal.

    O bien, para ir directamente a la página Registros de aplicaciones, use https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/RegisteredApps.

  3. En la página Registros de aplicaciones, haga clic en Nuevo registro.

    Seleccione Nuevo registro en la página Registros de aplicaciones.

    En la página Registrar una aplicación que aparece, configure las siguientes opciones:

    • Nombre: escriba algo descriptivo. Por ejemplo, ExO PowerShell CBA.

    • Tipos de cuenta admitidos: compruebe que solo está seleccionada la opción Cuentas de este directorio organizativo (<Solo NombreDeOrganización>: Inquilino único).

    • Redirigir un identificador URI (opcional): En el primer cuadro, compruebe que web está seleccionado. En el segundo cuadro, escriba el URI al que se envía el token de acceso.

      Tenga en cuenta que no puede crear credenciales para aplicaciones nativas porque no puede usar ese tipo para aplicaciones automatizadas.

      Registrar una aplicación.

    Cuando haya terminado, haga clic en Registrar.

  4. Deje la página de la aplicación que vuelva a abrir. La necesitará en el siguiente paso.

Paso 2: asignar permisos de API a la aplicación

Nota:

Los procedimientos descritos en esta sección reemplazan a los permisos predeterminados que se configuraron automáticamente para la nueva aplicación. La aplicación no necesita los permisos predeterminados que se reemplazaron.

  1. En la página de la aplicación en la sección Administración, seleccione Manifiesto.

    Seleccione Manifiesto en la página de propiedades de la aplicación.

  2. En la página Manifiesto que se abre, busque la entrada requiredResourceAccess (en o cerca de la línea 47).

    Modifique los resourceAppIdvalores , resourceAccess idy resourceAccess type como se muestra en el siguiente fragmento de código:

    "requiredResourceAccess": [
       {
          "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
          "resourceAccess": [
             {
                "id": "dc50a0fb-09a3-484d-be87-e023b12c6440",
                "type": "Role"
             }
          ]
       }
    ],
    

    Cuando haya terminado, haga clic en Guardar.

  3. En la página de manifiesto, en Administración, seleccione permisos de la API.

    Seleccione Permisos de API en la página de propiedades de la aplicación.

    En la páginas de permisos de la API que se abre, siga estos pasos:

    • API o nombre de permisos: Compruebe que se muestra el valor Exchange.ManageAsApp.

      Nota:

      Si es necesario, busque Office 365 Exchange en API que usa mi organización en la página Solicitar permisos de API.

    • Estado: el valor incorrecto actual no se concede para <La organización> y este valor debe cambiarse.

      Permisos de API incorrectos originales.

      Seleccione Conceder consentimiento de administrador para <la organización>, lea el cuadro de diálogo de confirmación que se abre y, a continuación, haga clic en .

      El valor Status ahora debe concederse para <Organization>.

      Consentimiento de administrador concedido.

  4. Cierre la página actual depermisos de la API (no la pestaña del explorador) para volver a la página de registros de la aplicación. Lo usará en un paso próximo.

Paso 3: Generar un certificado autofirmado

Use uno de los métodos siguientes para crear un certificado x.509 autofirmado:

  • (Recomendado) Use los cmdlets New-SelfSigned Cmdlet, Export-Certificate y Export-Mbrer en una sesión de Windows PowerShell con privilegios elevados (ejecutar como administrador) para solicitar un certificado autofirmado y exportarlo a .cer y .pfx (SHA1 de forma predeterminada). Por ejemplo:

    # Create certificate
    $mycert = New-SelfSignedCertificate -DnsName "contoso.org" -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(1) -KeySpec KeyExchange
    
    # Export certificate to .pfx file
    $mycert | Export-PfxCertificate -FilePath mycert.pfx -Password (Get-Credential).password
    
    # Export certificate to .cer file
    $mycert | Export-Certificate -FilePath mycert.cer
    
  • Use el script Create-SelfSigned Script para generar certificados SHA1.

    .\Create-SelfSignedCertificate.ps1 -CommonName "MyCompanyName" -StartDate 2021-01-06 -EndDate 2022-01-06
    

Paso 4: adjuntar el certificado a la aplicación de Azure AD

Después de registrar el certificado con la aplicación, puede usar la clave pública (archivo .pfx) o la huella digital para la autenticación.

  1. En la pestaña Aplicaciones propiedad de la página Registro de aplicaciones del final del paso 2, seleccione la aplicación.

    Si necesita volver a la página Registro de aplicaciones , use https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/RegisteredApps, compruebe que la pestaña Aplicaciones propiedad está seleccionada y, a continuación, seleccione la aplicación.

    Página de registro de aplicaciones donde selecciona la aplicación.

  2. En la página de aplicación que se abre, en Administrar, seleccione Secretos de certificados&.

    Seleccione Certificados & secretos en la página de propiedades de la aplicación.

  3. En la página Secretos de certificados & que se abre, haga clic en Cargar certificado.

    Seleccione Cargar certificado en la página Secretos de certificados & .

    En el cuadro de diálogo que se abre, vaya al certificado autofirmado (.cer archivo) que creó en el Paso 3.

    Vaya al certificado y haga clic en Agregar.

    Cuando haya terminado, haga clic en Agregar.

    El certificado ahora se muestra en la sección Certificados.

    Página de la aplicación que muestra que el certificado se agregó.

  4. Cierre la página Secretos de certificados & actual y, a continuación, la página de Registros de aplicaciones para volver a la página principalhttps://portal.azure.com/. La necesitará en el siguiente paso.

Paso 5: Asignar roles de Azure AD a la aplicación

Los roles de Azure AD admitidos se describen en la tabla siguiente:

Rol Exchange Online
PowerShell
Cumplimiento de seguridad &
PowerShell
Administrador de cumplimiento
Administrador de Exchange*
Administrador de destinatarios de Exchange
Administrador global*
Lector global
Administrador del servicio de asistencia
Administrador de seguridad*
Lector de seguridad

* Los roles Administrador global y Administrador de Exchange proporcionan los permisos necesarios para cualquier tarea en Exchange Online PowerShell. Por ejemplo:

  • Administración de destinatarios.
  • Características de seguridad y protección. Por ejemplo, contra correo no deseado, antimalware, antiphishing y los informes asociados.

El rol Administrador de seguridad no tiene los permisos necesarios para esas mismas tareas.

Para obtener instrucciones generales sobre cómo asignar roles en Azure AD, vea Ver y asignar roles de administrador en Azure Active Directory.

Nota:

Los pasos siguientes son ligeramente diferentes para Exchange Online PowerShell frente a PowerShell de cumplimiento de seguridad&. Se muestran los pasos para ambos entornos. Para configurar roles para ambos entornos, repita los pasos de esta sección.

  1. En el Portal de Azure AD en https://portal.azure.com/, empiece a escribir roles y administradores en el cuadro Buscar de la parte superior de la página y, a continuación, seleccione Roles y administradores de Azure AD en los resultados de la sección Servicios .

    Captura de pantalla que muestra los roles y administradores de Azure AD en los resultados de búsqueda de la página principal del Azure Portal.

    O bien, para ir directamente a la página Roles y administradores de Azure AD , use https://portal.azure.com/#view/Microsoft_AAD_IAM/AllRolesBlade.

  2. En la página Roles y administradores que se abre, busque y seleccione uno de los roles admitidos haga clic en el nombre del rol (no en la casilla) de los resultados.

    • Exchange Online PowerShell: por ejemplo, busque y seleccione el rol de administrador de Exchange.

      Para buscar y seleccionar un rol de PowerShell de Exchange Online compatible, haga clic en el nombre del rol.

    • Seguridad & PowerShell de cumplimiento: por ejemplo, busque y seleccione el rol Administrador de cumplimiento .

      Busque y seleccione un rol de PowerShell de cumplimiento de seguridad & compatible haciendo clic en el nombre del rol.

  3. En la página Asignaciones que aparece, haga clic en Agregar asignaciones.

    • Exchange Online PowerShell:

      Seleccione Agregar asignaciones en la página de asignaciones de roles para Exchange Online PowerShell.

    • Seguridad & PowerShell de cumplimiento:

      Seleccione Agregar asignaciones en la página Asignaciones de roles para PowerShell de cumplimiento de seguridad & .

  4. En el menú flotante Agregar tareas que se abre, busque y seleccione la aplicación que creó en el Paso 1.

    Busque y seleccione la aplicación en el control flotante Agregar asignaciones.

    Cuando haya terminado, haga clic en Agregar.

  5. De nuevo en la página Asignaciones , compruebe que el rol se ha asignado a la aplicación.

    • Exchange Online PowerShell:

      Página de asignaciones de roles después de agregar la aplicación al rol para Exchange Online PowerShell.

    • Seguridad & PowerShell de cumplimiento:

      Página de asignaciones de roles después de agregar la aplicación al rol de PowerShell de cumplimiento de seguridad & .