Planifique su identidad para operaciones desconectadas en Azure en entornos locales

En este artículo se explica cómo planear e integrar la identidad para las operaciones desconectadas en Azure Local. Obtenga información sobre cómo configurar la solución de identidad y comprender las acciones y los roles disponibles para los operadores.

Descripción y planeación de la identidad

Para las operaciones desconectadas, debe integrarse con una solución de administración de identidades y acceso existente. Antes de implementar operaciones desconectadas, asegúrese de comprender los pasos necesarios para integrar y aplicar la solución de identidad.

Las operaciones desconectadas admiten estas soluciones:

  • Active Directory: grupos y membresías
  • Servicios de federación de Active Directory (AD FS): autenticación

Nota:

Solo se admiten grupos universales para Active Directory. Establezca el ámbito de grupo en Universal al configurar las pertenencias a grupos.

Comprender cómo funciona la integración de identidades

Durante la implementación, configure operaciones desconectadas para integrarse con su proveedor de identidad (IDP) y con la gestión de identidades y accesos. Especifique un operador Root. Este usuario posee una suscripción de operador especial y agrega otros operadores después de la implementación. La suscripción de operador define el ámbito de las acciones del operador y las acciones individuales dependen del rol Operador.

En un nivel alto, el punto de conexión de OpenID Connect (OIDC) autentica a los usuarios en operaciones desconectadas y el punto de conexión del Protocolo ligero de acceso a directorios (LDAP) integra grupos y pertenencias de su organización. Después de la integración, el control de acceso basado en rol de Azure estándar se asigna a los ámbitos deseados.

Captura de pantalla de cómo el dispositivo y los usuarios o las cargas de trabajo se comunican con el servicio.

Nota:

Las asignaciones y directivas de roles no se heredan de la suscripción de operador a suscripciones individuales. Cada suscripción tiene su propio ámbito. Solo los roles específicos asignados a suscripciones individuales pueden realizar acciones dentro de esa suscripción específica.

Descripción del rol y las acciones del operador

Puede asignar más operadores a la suscripción de operador para que puedan realizar acciones diarias. El rol integrado de Propietario en la suscripción de operador concede a los operadores la capacidad de realizar estas acciones en dicho ámbito: /Subscriptions/\<GUID>/Microsoft.AzureLocalOperator/*.

Para ayudarle a comprender el rol de operador y las acciones que pueden realizar, las tablas siguientes proporcionan un desglose detallado de las acciones disponibles en distintas categorías. Estas categorías incluyen administración de identidades y acceso, administración de suscripciones y observabilidad y diagnósticos.

Utiliza estas tablas para identificar las tareas específicas que los operadores pueden ejecutar dentro del ámbito de la suscripción del operador.

Administración de identidades y acceso

Acción Operador
Asignación de más operadores
Creación de SPN
Eliminar SPN
Listar nombres principales de servicio (SPN)
Actualizar SPN
Ver pertenencias a grupos (sincronizadas)
Visualización de la configuración de identidad
Visualización del estado de sincronización de identidades

Administración de suscripciones

Acción Operador
Crear alias
Creación de suscripciones
Eliminar alias
Eliminar suscripción
Alias de lista
Enumerar todas las suscripciones
Reasignar la propiedad de la suscripción
Cambiar el nombre de la suscripción
Reanudación de la suscripción

Observabilidad y diagnóstico

Acción Operador
Recopilación de registros
Configuración de diagnósticos y valores de registro generados por el sistema
Configuración del reenvío de syslog
Descarga de registros

Hay un par de excepciones para las acciones disponibles para los operadores:

  • Los operadores no pueden eliminar una suscripción de operador.

  • Los propietarios asignados a un nombre principal de servicio (SPN) también pueden eliminar ese SPN.

Nota:

Solo las acciones proporcionadas están disponibles en Azure Portal.

Otros roles integrados, como el operador de seguridad, el administrador de suscripciones y el operador de soporte técnico, se pueden considerar y evaluar, si es necesario. Para lograr roles de operador más detallados, puede crear definiciones de roles personalizadas basadas en el rol de operador y asignar acceso a la suscripción del operador.

Descripción de la sincronización

Después de finalizar la configuración inicial, el sistema sincroniza los grupos con las membresías de grupo, permitiendo que sean accesibles para las operaciones desconectadas. Para ver qué grupos y membresías están sincronizados, use una interfaz de programación de aplicaciones (API) del operador, como Get-ApplianceExternalIdentityObservability que aparece en el Apéndice. La sincronización se ejecuta periódicamente cada seis horas.

Lista de comprobación de identidad

Use esta lista de comprobación para planear la integración de identidades con operaciones desconectadas.

  • Identifique las direcciones IP o un nombre de dominio completo (FQDN) para:

    • Punto de conexión LDAP (Active Directory)
    • Endpoint de inicio de sesión (AD FS/OIDC)
  • Si usa un FQDN para el punto de conexión LDAP:

    • Asegúrese de que el dispositivo de operaciones desconectado esté establecido y use un sistema de nombres de dominio (DNS) que resuelva el punto de conexión proporcionado.
  • Cree una cuenta con acceso de solo lectura en el servidor LDAP v3 (Active Directory).

  • Identifique el grupo raíz para la sincronización de pertenencia.

  • Identificar UPN. A este usuario se le debe asignar el rol de operador Initial.

Recopile y haga que esté disponible los parámetros siguientes antes de la implementación:

Nombre de parámetro Descripción Ejemplo
Autoridad Un URI de autoridad accesible que proporciona información sobre los puntos de conexión, metadatos y mucho más de OIDC. https://adfs.contoso-AzureLocal.com/adfs
ClientID AppID creado al configurar la aplicación adfsclient. 00001111-aaaa-2222-bbbb-3333cccc4444
LdapCredential (nombre de usuario y contraseña) Credenciales de solo lectura para la integración LDAP. Nombre de usuario: ldap

Contraseña:******
LdapsCertChainInfo Información de la cadena de certificados para el punto de conexión LDAP. Puede omitir la información de la cadena de certificados con fines de demostración. Obtención de la cadena de certificados
OidcCertChainInfo Información de la cadena de certificados para el punto de conexión de OIDC. Puede omitir la información de la cadena de certificados con fines de demostración. Obtención de la cadena de certificados
LdapServer Punto de conexión LDAP al que se puede acceder desde operaciones desconectadas. Este punto de conexión sincroniza grupos y pertenencias a grupos. Ldap.local.contoso.com
LdapPort Puerto LDAP que se usa para conectarse al catálogo global. El valor predeterminado 3268 es un canal no seguro y 3269 es un canal ssl/seguro para el catálogo global. 3269
RootOperatorUserPrincipalName UPN para la persona de operador inicial con el acceso concedido a la suscripción de operador [email protected]
SyncGroupIdentifier GUID al grupo de Active Directory desde el que iniciar la sincronización.

$group = Get-ADGroup -Identity “mygroup” \| Select-Object Name, ObjectGUID
81d71e5c5-abc4-11af-8132-afdf6bbe2ec1
AutomationCertificate (Opcional) Certificado que se usará para la cuenta de automatización

Cree un certificado de cliente con su propia PKI o use un certificado autofirmado y proteja este certificado.
$cert=New-SelfSignedCertificate -Subject 'Cuenta de automatización'

Parámetro de configuración de ejemplo:

$ldapPass = 'retracted'|Convertto-securestring -asplaintext -force
$idpConfig = @{ 
     authority = 'https://adfs.contoso-AzureLocal.com/adfs'    
           clientId  = '9e7655c5-1bc4-45af-8345-cdf6bbf4ec1'    
           rootOperatorUserPrincipalName = '[email protected]'    
           ldapServer                    = 'ldap.local.contoso.com'    
           LdapCredential = New-Object PSCredential -ArgumentList @("ldap", $ldapPass)
      syncGroupIdentifier           = '81d71e5c5-abc4-11af-8132-afdf6bbe2ec1'
}

Implementaciones totalmente automatizadas

Para implementaciones totalmente automatizadas, use AutomationCertificate como parte de IdentityConfiguration. Esto le permite automatizar el flujo de implementación completo, ya que esta cuenta se puede usar para iniciar sesión como operador, crear suscripciones, registrar proveedores de recursos y ejecutarse con automatización completa.

Este es un ejemplo sobre cómo iniciar sesión con ese certificado después de la implementación:

$username = '2cb981cc-147e-47cd-a32c-4bb0dfa60573'
$certPath = 'C:\Aldo\operatorcert.pem'
$tenantId = 'aaaabbbb-0000-cccc-1111-dddd2222eeee'
# Example using az login
az login --service-principal --username $username --certificate $certPath --tenant $tenantId

# Example using Powershell
# Make sure the cert is installed in the CurrentUser cert store
$CertThumbprint = (Get-ChildItem Cert:\CurrentUser\My | Where-Object { $_.Subject -like "*Azure Local disconnected operations automation credential*" }).Thumbprint
Connect-AzAccount -ServicePrincipal `
                  -ApplicationId $username`
                  -TenantId $tenantId `
                  -CertificateThumbprint $certThumbprint

Tenga en cuenta lo siguiente:

  • El nombre de usuario es estático. Este es el identificador de aplicación que actúa como operador.
  • Debe asegurarse de que ha convertido o exportado el certificado a un archivo .pem.

Limitaciones

Tenga en cuenta estas limitaciones al planear la integración de identidades con operaciones desconectadas:

  • Usuarios y eliminación de grupos después de la sincronización: si quita usuarios y grupos con pertenencias después de la última sincronización, las operaciones desconectadas no las limpian. Esta limitación puede provocar errores al consultar pertenencias a grupos.

  • Sin capacidad de sincronización forzada: la sincronización inicial puede tardar hasta seis horas. Después, la sincronización se ejecuta cada 15 minutos.

  • Sin grupos de administración ni nivel raíz agregado: esta característica no está disponible para varias suscripciones.

  • Validaciones admitidas: Active Directory/AD FS se validan solo para soporte técnico.

Mitigación de problemas con la integración de identidades

Como administrador del host, use el cmdlet de operaciones desconectadas de PowerShell para actualizar la configuración y corregir problemas. Estos son algunos escenarios en los que es posible que tenga que volver a configurar la configuración de identidad:

  • Error de sincronización o no se inició:

    • Compruebe que las credenciales LDAP son válidas.
    • Compruebe que las credenciales LDAP tienen acceso de lectura .
    • Compruebe que las operaciones desconectadas pueden llegar al servidor LDAP, resolver el FQDN (si no usa una dirección IP) y que ningún firewall bloquee el tráfico.
  • Conjunto incorrecto de grupos sincronizados:

    • Compruebe que el SyncGroupIdentifier está establecido en la raíz correcta. El desde el que se está sincronizando.
  • Acceso perdido a la suscripción de operador:

    • Para restaurar el acceso al operador , cambie .rootOperatorUserPrincipalName

Cmdlets para la integración de identidades

Como administrador de host, use el módulo de operaciones desconectado y los certificados de instalación para ejecutar cmdlets que le ayuden a cambiar la configuración y solucionar problemas de integración de identidades. Ejecute Get-Command ApplianceExternalIdentity para enumerar los cmdlets disponibles para la integración de identidades.

Configuración de identidad de prueba

Use este cmdlet para validar rápidamente la configuración de identidad en el lado cliente.

$idpConfig = new-applianceIdentityConfiguration @identityParams

Test-ApplianceExternalIdentityConfiguration -config $idpConfig

Configuración de identidad de prueba (validación profunda)

Use este cmdlet para validar los parámetros y la configuración antes de aplicar la configuración.

$idpConfig = new-applianceIdentityConfiguration @identityParams

Test-ApplianceExternalIdentityConfigurationDeep -config $idpConfig

Configurar o restablecer la identidad

Use este cmdlet para restablecer la suscripción del operador. Use este cmdlet solo si tiene problemas con la integración de identidades.

Set-ApplianceExternalIdentityConfiguration

Administración de identidades

Use este cmdlet para enumerar todos los cmdlets que le ayudarán a configurar y solucionar problemas de configuraciones de identidad.

Get-Command *Appliance*ExternalIdentity*

Apéndice

Use PowerShell en Windows Server 2022 o versiones posteriores para estos comandos.

Configuración de Active Directory o Active Directory Domain Services (ADDS) con fines de demostración

# Modify to fit your domain/installation
$GSMAAccount = 'Local\gmsa_adfs$'

Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools

# Import the ADDSDeployement module
Import-Module ADDSDeployment

# Install the AD FS role
Install-WindowsFeature ADFS-Federation -IncludeManagementTools

# Promote the server to a domain controller
Install-ADDSForest `
    -DomainName "local.contoso.com" `
    -DomainNetbiosName "local" ` #NETBIOS 15 char limit
    -SafeModeAdministratorPassword (ConvertTo-SecureString "" -AsPlainText -Force) `
    -InstallDns

# Test only
Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))
$cert = New-SelfSignedCertificate -DnsName "adfs.local.contoso.com" 

# Import the AD FS module and configure AD FS
Import-Module ADFS

# Install AD FS
Install-AdfsFarm `
    -CertificateThumbprint "$($cert.Thumbprint)" `
    -FederationServiceName "adfs.local.contoso.com" `
    -FederationServiceDisplayName "Local Contoso ADFS" `
    -GroupServiceAccountIdentifier $GSMAAccount

Creación de una aplicación cliente de AD FS, usuarios de ejemplo y grupos

# ClientID can be any unique id in your organization - hardcoded GUID here just as example
Add-AdfsClient `
    -Name "Azure Local Disconnected operations Sign In Service" `
    -ClientId "11112222-bbbb-3333-cccc-4444dddd5555" `
    -RedirectUri "https://login.autonomous.cloud.private/signin-oidc"

# Import the Active Directory module
Import-Module ActiveDirectory

# Create new Active Directory users
$users = @('operator', 'ldap', 'user1', 'user2', 'user3')
$users | % {Remove-ADUser $_ -Confirm:$false -ErrorAction SilentlyContinue }

$users | % {New-ADUser `
    -Name "AzureLocal User $_" `
    -GivenName "AzureLocal" `
    -Surname "User $_" `
    -SamAccountName $_ `
    -UserPrincipalName "[email protected]" `
    -Path "CN=Users,DC=local,DC=contoso,DC=com" `
    -AccountPassword (ConvertTo-SecureString "" -AsPlainText -Force) `
    -Enabled $true
 }

# Create a new Active Directory group
New-ADGroup `
    -Name "AzureLocal Users" `
    -GroupScope Universal `
    -Path "CN=Users,DC=local,DC=contoso,DC=com"

# Add the user to the group
Add-ADGroupMember `
    -Identity "AzureLocal Users" `
    -Members $users

# Create AD FS sync group and add the operator to it
# Variables
$groupName = "ADFS_Sync_Group"
$ouPath = "CN=Users,DC=local,DC=contoso,DC=com"
$users = @("operator")

# Create the group
New-ADGroup -Name $groupName `
            -SamAccountName $groupName `
            -GroupScope Universal `
            -GroupCategory Security `
            -Path $ouPath `
            -Description "Sync group for ADFS purposes"

# Add members to the group
foreach ($user in $users) {
    Add-ADGroupMember -Identity $groupName -Members $user
}

# Retrieve the group's ObjectGUID
$group = Get-ADGroup -Identity $groupName | Select-Object Name, ObjectGUID

# Display the syncGroupIdentifier (ObjectGUID), which is required by the IDP script run from the host
$group

Conceder al usuario LDAP acceso de lectura en Usuarios con la opción de heredar

En el ejemplo siguiente se concede acceso de lectura al usuario LDAP en el contenedor de Usuarios mediante ActiveDirectorySecurityInheritance "All" configuración. La asignación de una regla de acceso con "All" hace que la regla se aplique a todo el subárbol del objeto de destino.

$domain = Get-ADDomain
$identity = [System.Security.Principal.NTAccount]"$($domain.Name)\ldap"
$accessRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($identity,  [System.DirectoryServices.ActiveDirectoryRights] "GenericRead",    [System.Security.AccessControl.AccessControlType] "Allow",    [System.DirectoryServices.ActiveDirectorySecurityInheritance] "All")
$acl = Get-Acl -Path "AD:\CN=Users,$($domain.DistinguishedName)"
$acl.AddAccessRule($accessRule)
Set-ACL -Path "AD:\CN=Users,$($domain.DistinguishedName)" -AclObject $acl
Write-Verbose "Granted 'GenericRead' permissions to LDAP account."

Concede permiso a la cuenta GSMA para leer las propiedades del usuario.

En el ejemplo siguiente se muestra cómo permitir que la cuenta GSMA lea las propiedades de usuario en Active Directory desde el grupo de sincronización.

# GroupName and GSMAccount defined earlier

# Get group details
$Group = Get-ADGroup -Identity $GroupName
$GroupDN = $Group.DistinguishedName

# Build the access rule
$Identity = New-Object System.Security.Principal.NTAccount($GSMAAccount)
$ActiveDirectoryRights = [System.DirectoryServices.ActiveDirectoryRights]::ReadProperty
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
$InheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance]::All

# Create the access rule and apply it to the group
# bf9679c0-0de6-11d0-a285-00aa003049e2 (Member attribute): https://mms.heiai.top/en-us/windows/win32/adschema/a-member?redirectedfrom=MSDN 
$Rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $Identity, $ActiveDirectoryRights, $AccessControlType, "bf9679c0-0de6-11d0-a285-00aa003049e2", $InheritanceType
$GroupEntry = [ADSI]"LDAP://$GroupDN"
$Security = $GroupEntry.ObjectSecurity
$Security.AddAccessRule($Rule)
$GroupEntry.CommitChanges()

Nota:

Si la cuenta GSMA de la granja de ADFS no puede leer las propiedades del usuario, se produce un error en el inicio de sesión aunque las credenciales especificadas en la página de inicio de sesión de ADFS sean correctas.

Comprobación y prueba de la funcionalidad de ADFS

Para habilitar la página de prueba de inicio de sesión con IDPInitiated, siga estos pasos:

  1. Habilite la página de prueba de inicio de sesión. Ejecute este comando:

     Set-AdfsProperties -EnableIdpInitiatedSignonPage $true
    
  2. Vaya a IdpInitiatedSignon (https://adfs.FDQN/adfs/ls/IdpInitiatedSignon.aspx) y reemplace FQDN por el nombre de dominio real.

    Este es un ejemplo usando tu nombre de dominio:

    https://adfs.MYFQDN/adfs/ls/IdpInitiatedSignon.aspx

  3. Inicie sesión con su cuenta de operador para confirmar la funcionalidad de ADFS.

Esta característica solo está disponible en Azure Local 2602 o posterior.