Microsoft Entra ID, Azure & Intune: gestione identità moderna

2026-02-12T18:00:00.000Z

Il modello di identità Microsoft moderno

Microsoft ha unificato la gestione identità sotto Microsoft Entra ID (precedentemente Azure Active Directory). In ambiente ibrido, Entra ID si sincronizza con l'Active Directory on-premise tramite Entra Connect.

On-Premise                    Cloud
┌───────────────┐             ┌───────────────────────┐
│ Active        │  Entra      │  Microsoft Entra ID   │
│ Directory     │◄──Connect──►│  (ex Azure AD)        │
│ Domain        │             │                       │
└───────────────┘             │  ┌─────────────────┐  │
                              │  │  Microsoft 365  │  │
                              │  │  Intune         │  │
                              │  │  Azure          │  │
                              │  └─────────────────┘  │
                              └───────────────────────┘

Entra Connect: configurazione ibrida

Installazione e sincronizzazione

# Sul Domain Controller / server dedicato
# Scarica Entra Connect da Microsoft Download Center

# Post-installazione: verifica sincronizzazione
Import-Module ADSync
Get-ADSyncConnectorRunStatus

# Forza sincronizzazione delta
Start-ADSyncSyncCycle -PolicyType Delta

# Sincronizzazione completa
Start-ADSyncSyncCycle -PolicyType Initial

Verifica utenti sincronizzati

# PowerShell con Microsoft.Graph
Connect-MgGraph -Scopes "User.Read.All"

# Lista utenti sincronizzati da on-prem
Get-MgUser -Filter "onPremisesSyncEnabled eq true" | 
  Select DisplayName, UserPrincipalName, OnPremisesSyncEnabled

Conditional Access: policy di accesso

Il Conditional Access è il sistema di policy che decide chi può accedere a cosa, da dove e con quali condizioni.

Policy base: MFA per accessi esterni

{
  "displayName": "Require MFA - External Access",
  "state": "enabled",
  "conditions": {
    "users": {
      "includeGroups": ["All Users"]
    },
    "locations": {
      "excludeLocations": ["Named Location - Office"]
    }
  },
  "grantControls": {
    "operator": "OR",
    "builtInControls": ["mfa"]
  }
}

Policy: blocca paesi ad alto rischio

# Crea Named Location per Italia
$params = @{
  "@odata.type" = "#microsoft.graph.countriesAndRegionsNamedLocation"
  DisplayName = "Allowed Countries"
  CountriesAndRegions = @("IT", "US", "GB", "DE")
  IncludeUnknownCountriesAndRegions = $false
}
New-MgIdentityConditionalAccessNamedLocation -BodyParameter $params

Intune: Device Management

Enrollment automatico Windows

# Configura auto-enrollment via GPO
# Computer Configuration → Administrative Templates → Windows Components → MDM

# Oppure via registry
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\MDM" `
  -Name "AutoEnrollMDM" -Value 1 -Type DWord

Compliance Policy Windows 10/11

Configura da Intune → Devices → Compliance policies:

{
  "displayName": "Windows Compliance - Standard",
  "scheduledActionsForRule": [{
    "ruleName": "NonCompliant",
    "scheduledActionConfigurations": [{
      "actionType": "block",
      "gracePeriodHours": 48
    }]
  }],
  "settings": {
    "bitLockerEnabled": true,
    "codeIntegrityEnabled": true,
    "secureBootEnabled": true,
    "defenderEnabled": true,
    "osMinimumVersion": "10.0.19041",
    "passwordRequired": true,
    "passwordMinimumLength": 12,
    "passwordRequiredType": "alphanumeric"
  }
}

Automazione con PowerShell e Graph API

Script: onboarding completo

# Richiede modulo Microsoft.Graph
# Install-Module Microsoft.Graph

param(
    [string]$Nome,
    [string]$Cognome, 
    [string]$Reparto,
    [string]$Ruolo,
    [string]$Manager
)

# Connessione
Connect-MgGraph -Scopes "User.ReadWrite.All", "Group.ReadWrite.All"

# Genera username e password
$username = "$($Nome.ToLower()).$($Cognome.ToLower())"
$upn = "[email protected]"
$password = [System.Web.Security.Membership]::GeneratePassword(14, 3)

# Crea utente
$newUser = New-MgUser -DisplayName "$Nome $Cognome" `
  -UserPrincipalName $upn `
  -MailNickname $username `
  -AccountEnabled $true `
  -Department $Reparto `
  -JobTitle $Ruolo `
  -PasswordProfile @{
    Password = $password
    ForceChangePasswordNextSignIn = $true
  }

Write-Host "✅ Utente creato: $upn"

# Assegna licenza M365 Business Premium
$skuId = (Get-MgSubscribedSku | Where {$_.SkuPartNumber -eq "SPB"}).SkuId
Set-MgUserLicense -UserId $newUser.Id `
  -AddLicenses @{SkuId = $skuId} `
  -RemoveLicenses @()

Write-Host "✅ Licenza assegnata"

# Aggiungi al gruppo del reparto
$groupId = (Get-MgGroup -Filter "displayName eq '$Reparto'").Id
New-MgGroupMember -GroupId $groupId -DirectoryObjectId $newUser.Id

Write-Host "✅ Aggiunto al gruppo $Reparto"

# Output credenziali
Write-Host "`n=== CREDENZIALI ==="
Write-Host "Username: $upn"
Write-Host "Password temporanea: $password"

Script: report licenze

# Report utilizzo licenze M365
Connect-MgGraph -Scopes "Directory.Read.All"

Get-MgSubscribedSku | ForEach-Object {
    [PSCustomObject]@{
        Prodotto    = $_.SkuPartNumber
        Acquistate  = $_.PrepaidUnits.Enabled
        Assegnate   = $_.ConsumedUnits
        Disponibili = $_.PrepaidUnits.Enabled - $_.ConsumedUnits
    }
} | Format-Table -AutoSize

BitLocker con Intune

Policy BitLocker automatica

# Verifica stato BitLocker su tutti i dispositivi
$devices = Get-MgDeviceManagementManagedDevice -All

foreach ($device in $devices) {
    if ($device.OperatingSystem -eq "Windows") {
        $compliance = Get-MgDeviceManagementManagedDeviceCompliancePolicyState `
          -ManagedDeviceId $device.Id
        
        [PSCustomObject]@{
            Device     = $device.DeviceName
            User       = $device.UserDisplayName
            BitLocker  = ($compliance | Where {$_.DisplayName -match "BitLocker"}).State
            OS         = $device.OsVersion
        }
    }
} | Export-Csv "bitlocker-report.csv" -NoTypeInformation

Best Practice

  • Entra ID P2 per Privileged Identity Management (PIM) — accesso privilegiato just-in-time
  • Naming convention chiara per gruppi e app registrations
  • Breakglass account — almeno 2 account admin esclusi da Conditional Access
  • Audit log abilitati e monitorati (almeno 90 giorni)
  • App registrations con permessi minimi necessari
  • Evita Global Admin per operazioni quotidiane — usa ruoli specifici
  • Non sincronizzare account di servizio AD on-prem in cloud

Risorse