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