Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Con il provider di servizi gestiti (MSP), è possibile definire un elenco di indirizzi consentiti personalizzato per il controllo degli accessi in base al ruolo per proteggere gli endpoint del servizio metadati. Il contenuto dell'elenco di elementi consentiti proviene dai log di controllo. Un nuovo tipo di risorsa in Azure Compute Gallery, InVMAccessControlProfile, abilita l'elenco consentito.
Per altre informazioni sul controllo degli accessi in base al ruolo e sul tipo di risorsa InVMAccessControlProfile, vedere Configurazione avanzata per provider di servizi gestiti.
Struttura di un elenco di elementi consentiti
Un elenco di elementi consentiti è costituito da:
- Identità: Processi sulla macchina.
- Privilegi: Gli endpoint a cui accedono le identità.
- Ruoli: raggruppamento di privilegi.
- Assegnazioni di ruolo: i ruoli e l'elenco delle identità a cui è stato concesso l'accesso per quei ruoli.
Raccogliere log di controllo
Se abiliti MSP in modalità audit o enforce, puoi raccogliere i dati di registro dal client della macchina virtuale tramite Azure Monitor.
Windows: l'agente di monitoraggio di Azure raccoglie gli eventi di Windows tramite XPath personalizzato
Windows Azure!*[System[Provider[@Name=`GuestProxyAgent`]]]Linux: Raccogliere eventi Syslog con l'agente di Monitoraggio di Azure selezionando
Log_DAEMONeLOG_DEBUG
Consultare i log di audit
Dopo aver raccolto i log di controllo come illustrato nella sezione precedente, è possibile verificare i log:
Query Windows Kusto: vai a Log Analytics ed esegui la query
/// Windows VMs
Event
| where TimeGenerated >ago(1d)
| where EventLog == "Windows Azure" and Source == "GuestProxyAgent"
| where _ResourceId startswith "/subscriptions/<your subscription id>/resourcegroups/<your recrouce group>"
| where RenderedDescription has "processFullPath" and RenderedDescription has "runAsElevated" and RenderedDescription has "processCmdLine"
| extend json = parse_json(RenderedDescription)
| extend method = json.method, url = json.url, processFullPath = json.processFullPath, username = json.userName, runAsElevated = json.runAsElevated
| extend userGroups = json.userGroups, ip = json.ip, port = json.port, processCmdLine = json.processCmdLine
| project TimeGenerated, _ResourceId, url, ip, port, processFullPath, method, username, runAsElevated, processCmdLine
Query Kusto di Linux: Passare a Log Analytics ed eseguire la query
/// Linux VMs
Syslog
| where TimeGenerated >ago(1d)
| where ProcessName == "azure-proxy-agent"
| where _ResourceId startswith "/subscriptions/<your subscription id>/resourcegroups/<your recrouce group>"
| where SyslogMessage has "processFullPath" and SyslogMessage has "runAsElevated" and SyslogMessage has "processCmdLine"
| extend message = substring(SyslogMessage, indexof(SyslogMessage, "{"))
| extend json = parse_json(message)
| extend method = json.method, url = json.url, processFullPath = json.processFullPath, username = json.userName, runAsElevated = json.runAsElevated
| extend userGroups = json.userGroups, ip = json.ip, port = json.port, processCmdLine = json.processCmdLine
| project TimeGenerated, _ResourceId, url, ip, port, processFullPath, method, username, runAsElevated, processCmdLine
Se si è proprietari della macchina virtuale di Azure, è possibile ottenere i log dei file all'interno della macchina virtuale di Azure seguendo questa procedura
Trovare il file di configurazione json dell'agente proxy:
- Macchina virtuale Windows:
GuestProxyAgent.jsonnella cartella sotto il nomeGuestProxyAgent windows service - VM Linux:
etc/azure/proxy-agent.jsonfile
- Macchina virtuale Windows:
Attivare il log del file aggiornando l'impostazione
logFoldernel file di configurazione json. Impostarlo su-
%SYSTEMDRIVE%\\WindowsAzure\\ProxyAgent\\Logsper le macchine virtuali Windows -
/var/log/azure-proxy-agentper le macchine virtuali Linux.
-
Riavviare il servizio
-
GuestProxyAgentper le macchine virtuali Windows -
azure-proxy-agentper le macchine virtuali Linux4
- Attendere che
ProxyAgent.Connection.logsi carichi mentre i servizi clienti sono in esecuzione. - Eseguire il pull dei log dei file di connessione ProxyAgent dalle macchine virtuali di Azure
Windows:
C:\WindowsAzure\ProxyAgent\Logs\ProxyAgent.Connection.logLinux:
/var/log/azure-proxy-agent/ProxyAgent.Connection.log
Convertire i log in regole
Per creare un elenco di elementi consentiti, è possibile usare un metodo automatizzato o un metodo manuale.
Generare automaticamente un elenco di elementi consentiti
È possibile usare uno strumento generatore allowlist per generare le regole di controllo di accesso. Lo strumento consente di analizzare i log di controllo e fornisce un'interfaccia utente per generare le regole.
Scaricare ed eseguire lo strumento generatore allowlist. Nella pagina della versione più recente, in Asset selezionare
allowListTool.exe.Lo strumento analizza i
ProxyAgentConnectionlog e visualizza i privilegi e le identità correnti nella macchina virtuale.Creare ruoli e assegnazioni di ruolo:
- Per creare un ruolo, selezionare un raggruppamento di privilegi e assegnare al ruolo un nome descrittivo.
- Per creare un'assegnazione di ruolo, selezionare un ruolo e un raggruppamento di identità. Queste identità possono accedere ai privilegi raggruppati in tale ruolo. Assegnare un nome descrittivo all'assegnazione di ruolo.
Creare manualmente un elenco di elementi consentiti
Dopo aver abilitato una macchina virtuale con MSP in Audit modalità o Enforce , l'agente proxy acquisisce tutte le richieste inviate agli endpoint host.
Nei log di connessione è possibile analizzare le applicazioni che effettuano le richieste agli endpoint Del servizio metadati dell'istanza di Azure o WireServer.
L'esempio seguente mostra il formato del codice JSON acquisito.
Nel file di log è possibile identificare gli endpoint da proteggere. Questi endpoint vengono visualizzati in privileges nell'istanza InVMAccessControlProfile finale. È anche possibile identificare le identità (identities) che devono avere accesso.
Uno schema di regole semplice potrebbe essere simile all'esempio seguente.
Creare un'istanza di InVMAccessControlProfile utilizzando un modello di ARM
Creare una nuova raccolta privata in Azure Compute Gallery.
Creare una
InVMAccessControlProfiledefinizione con i parametri per:- Nome della galleria in cui archiviare (dal passaggio 1)
- Nome profilo
- Tipo di sistema operativo
- Tipo di endpoint host (WireServer o Servizio metadati dell'istanza)
Creare una versione specifica.
Esempio inVMAccessControlProfile
Ecco un'istanza di esempio InVMAccessControlProfile :
"properties": {
"mode": "Enforce",
"defaultAccess": "Allow",
"rules": {
"privileges": [
{
"name": "GoalState",
"path": "/machine",
"queryParameters": {
"comp": "goalstate"
}
}
],
"roles": [
{
"name": "Provisioning",
"privileges": [
"GoalState"
]
},
{
"name": "ManageGuestExtensions",
"privileges": [
"GoalState"
]
},
{
"name": "MonitoringAndSecret",
"privileges": [
"GoalState"
]
}
],
"identities": [
{
"name": "WinPA",
"userName": "SYSTEM",
"exePath": "C:\\Windows\\System32\\cscript.exe"
},
{
"name": "GuestAgent",
"userName": "SYSTEM",
"processName": "WindowsAzureGuestAgent.exe"
},
{
"name": "WaAppAgent",
"userName": "SYSTEM",
"processName": "WaAppAgent.exe"
},
{
"name": "CollectGuestLogs",
"userName": "SYSTEM",
"processName": "CollectGuestLogs.exe"
},
{
"name": "AzureProfileExtension",
"userName": "SYSTEM",
"processName": "AzureProfileExtension.exe"
},
{
"name": "AzurePerfCollectorExtension",
"userName": "SYSTEM",
"processName": "AzurePerfCollectorExtension.exe"
},
{
"name": "WaSecAgentProv",
"userName": "SYSTEM",
"processName": "WaSecAgentProv.exe"
}
],
"roleAssignments": [
{
"role": "Provisioning",
"identities": [
"WinPA"
]
},
{
"role": "ManageGuestExtensions",
"identities": [
"GuestAgent",
"WaAppAgent",
"CollectGuestLogs"
]
},
{
"role": "MonitoringAndSecret",
"identities": [
"AzureProfileExtension",
"AzurePerfCollectorExtension",
"WaSecAgentProv"
]
}
]
},
Utilizzo di PowerShell
Se si usa PowerShell per generare un InVMAccessControlProfile, assicurarsi di avere la versione minima 10.1.0 di PowerShell
Seguire la guida seguente passo dopo passo per generare un InVMAccessControlProfile.
- Accedi al tuo account Azure
Connect-AzAccount
- Creare il gruppo di risorse dove verrà creata la galleria privata. È possibile ignorare questo passaggio se è già stato creato un gruppo di risorse.
$resourceGroup = "MyResourceGroup4"
$location = "EastUS2EUAP"
New-AzResourceGroup -Name $resourceGroup -Location $location
- Creare una raccolta privata. Questa raccolta viene usata come contenitore per l'artefatto
InVMAccessControlProfile
$galleryName = "MyGallery4"
New-AzGallery -ResourceGroupName $resourceGroup -GalleryName $galleryName -Location $location -Description "My custom image gallery"
- Creare l'artefatto
InVMAccessControlProfilenella raccolta privata creata nel passaggio precedente. Fare clic qui per altre informazioni sui vari parametri per questo artefatto.
$InVMAccessControlProfileName= "testInVMAccessControlProfileP"
New-AzGalleryInVMAccessControlProfile -ResourceGroupName $resourceGroup -GalleryName $galleryName -GalleryInVMAccessControlProfileName $InVMAccessControlProfileName -Location $location -OsType "Windows" -ApplicableHostEndPoint "WireServer" -Description "this test1"
- Ottieni raccolta
InVMAccessControlProfile
$inVMAccessCP=Get-AzGalleryInVMAccessControlProfile -ResourceGroupName $resourceGroup -GalleryName $galleryName -GalleryInVMAccessControlProfileName $InVMAccessControlProfileName

$inVMAccessConrolProfileVersion = New-AzGalleryInVMAccessControlProfileVersionConfig `
-Name $inVMAccessControlProfileVersionName `
-Location $location `
-Mode "Audit" `
-DefaultAccess "Deny" -TargetLocation $targetRegions -ExcludeFromLatest
Eseguire questo comando per aggiungere ogni privilegio:
Add-AzGalleryInVMAccessControlProfileVersionRulesPrivilege `
-GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion `
-PrivilegeName "GoalState" `
-Path "/machine" `
-QueryParameter @{ comp = "goalstate" }
Per rimuovere un privilegio:
Remove-AzGalleryInVMAccessControlProfileVersionRulesPrivilege `
-GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion `
-PrivilegeName "GoalState2"
Eseguire questo comando per aggiungere ogni ruolo:
Add-AzGalleryInVMAccessControlProfileVersionRulesRole `
-GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion `
-RoleName "Provisioning" `
-Privilege @("GoalState")
Eseguire questo comando per rimuovere i ruoli:
Remove-AzGalleryInVMAccessControlProfileVersionRulesRole `
-GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion `
-RoleName "Provisioning2"
Aggiungi RulesIdentity:
Add-AzGalleryInVMAccessControlProfileVersionRulesIdentity `
-GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion `
-IdentityName "WinPA" `
-UserName "SYSTEM" `
-GroupName "Administrators" `
-ExePath "C:\Windows\System32\cscript.exe" `
-ProcessName "cscript"
Rimuovi RulesIdentity:
Remove-AzGalleryInVMAccessControlProfileVersionRulesIdentity `
-GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion `
-IdentityName "WinPA2"
Eseguire questo comando per aggiungere ogni assegnazione di ruolo:
Add-AzGalleryInVMAccessControlProfileVersionRulesRoleAssignment `
-GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion `
-Role "Provisioning" `
-Identity @("WinPA")
Rimuovi assegnazione di ruolo:
Remove-AzGalleryInVMAccessControlProfileVersionRulesRoleAssignment `
-GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion `
-Role "Provisioning2"
- Crea galleria
InVMAccessControlProfileVersion
New-AzGalleryInVMAccessControlProfileVersion -ResourceGroupName $resourceGroup -GalleryName $galleryName -GalleryInVMAccessControlProfileName $InVMAccessControlProfileName -GalleryInVmAccessControlProfileVersion $inVMAccessConrolProfileVersion
- Ottieni
InVMAccessControlProfileVersion
$ver = Get-AzGalleryInVMAccessControlProfileVersion -ResourceGroupName $resourceGroup -GalleryName $galleryName -GalleryInVMAccessControlProfileName $InVMAccessControlProfileName `
-GalleryInVMAccessControlProfileVersionName $inVMAccessControlProfileVersionName
$ver | ConvertTo-Json -Depth 10
- Aggiornare
InVMAccessControlProfileVersion
È consigliabile creare un nuovo InVMAccessControlProfileVersion perché la maggior parte dei parametri non può essere aggiornata. Ecco un esempio:
$targetRegions= @("EastUS2EUAP")
$ver = Get-AzGalleryInVMAccessControlProfileVersion -ResourceGroupName $resourceGroup -GalleryName $galleryName -GalleryInVMAccessControlProfileName $InVMAccessControlProfileName `
-GalleryInVMAccessControlProfileVersionName $inVMAccessControlProfileVersionName
Update-AzGalleryInVMAccessControlProfileVersion `
-GalleryInVmAccessControlProfileVersion $ver `
-TargetLocation $targetRegions -ExcludeFromLatest $true
- Elimina
InVMAccessControlProfileVersion
Remove-AzGalleryInVMAccessControlProfileVersion -ResourceGroupName $resourceGroup -GalleryName $galleryName -GalleryInVMAccessControlProfileName $InVMAccessControlProfileName `
-GalleryInVMAccessControlProfileVersionName $inVMAccessControlProfileVersionName
- Elencare tutte le gallerie
InVMAccessControlProfile
Get-AzGalleryInVMAccessControlProfile -ResourceGroupName "myResourceGroup" -GalleryName "myGallery"
Uso della CLI
Seguire la guida seguente passo dopo passo per generare un InVMAccessControlProfile.
- Accedi al tuo account Azure
az login
- Creare un gruppo di risorse nella località desiderata
az group create --resource-group ResourceGroupForINVM --location eastus
- Creare una galleria che ospiterà la risorsa
InVMAccessControlProfile
az sig create --resource-group ResourceGroupForINVM --gallery-name MyGallery67 --location eastus
- Creare un
InVMAccessControlProfilenella raccolta creata nel passaggio precedente Per altri dettagli sui comandi: az sig in-vm-access-control-profile | Microsoft Learn
az sig in-vm-access-control-profile create --resource-group ResourceGroupForINVM --gallery-name MyGallery67 --name myInVMAccessControlProfileName --location eastus --os-type Linux --applicable-host-endpoint WireServer
Eseguire questo comando per visualizzare dettagli aggiuntivi sui comandi e sulle proprietà
az sig in-vm-access-control-profile create --help
- Aggiornare l'oggetto
InVMAccessControlProfileÈ possibile aggiornare solo la descrizione dell'oggettoInVMAccessControlProfile. Se sono necessarie altre modifiche, eliminare l'oggetto correnteInVMAccessControlProfilee crearne uno nuovo
az sig in-vm-access-control-profile update --resource-group ResourceGroupForINVM --gallery-name MyGallery67 --name myInVMAccessControlProfileName --description test
- Operazione Get per
InVMAccessControlProfile
az sig in-vm-access-control-profile show --resource-group ResourceGroupForINVM --gallery-name MyGallery67 --name myInVMAccessControlProfileName
- Elencare tutti gli
InVMAccessControlProfileartefatti
Questo comando mostra l'elenco di tutti gli InVMAccessControlProfile sotto una galleria specifica.
az sig in-vm-access-control-profile show --resource-group ResourceGroupForINVM --gallery-name MyGallery67
- Creare
InVMAccessControlProfileVersion
È necessario fornire un payload per poter creare un oggetto InVMAccessControlProfileVersion. Questo payload può essere di grandi dimensioni, in particolare a causa della proprietà della regola, che può includere configurazioni molto estese.
Invece di passare direttamente singole parti della proprietà delle regole, è stato introdotto un parametro regole che accetta un file JSON come input. Questo approccio semplifica il processo e mantiene il comando pulito e gestibile.
Di seguito è riportato un esempio di file rules.json:
1. {
2. "privileges": [
3. {
4. "name": "GoalState",
5. "path": "/machine",
6. "queryParameters": {
7. "comp": "goalstate"
8. }
9. }
10. ],
11. "roles": [
12. {
13. "name": "Provisioning",
14. "privileges": [
15. "GoalState"
16. ]
17. }
18. ],
19. "identities": [
20. {
21. "name": "WinPA",
22. "userName": "SYSTEM",
23. "groupName": "Administrators",
24. "exePath": "C:\\Windows\\System32\\cscript.exe",
25. "processName": "cscript"
26. }
27. ],
28. "roleAssignments": [
29. {
30. "role": "Provisioning",
31. "identities": [
32. "WinPA"
33. ]
34. }
35. ]
36. }
Consulta ulteriori dettagli sui comandi qui: az sig in-vm-access-control-profile-version | Microsoft Learn
Dopo aver creato la versione del file di rules.json, usare il comando seguente per creare InVMAccessControlProfileVersion
az sig in-vm-access-control-profile-version create \
--resource-group ResourceGroupForINVM \
--gallery-name MyGallery67 \
--profile-name myInVMAccessControlProfileName \
--version-name 1.0.0 \
--mode Audit \
--default-access Deny \
--target-regions EastUS2EUAP \
--exclude-from-latest true \
--rules @rules.json
- Ottieni
InVMAccessControlProfileVersion
az sig in-vm-access-control-profile-version show --resource-group ResourceGroupForINVM --gallery-name MyGallery67 --profile-name myInVMAccessControlProfileName --profile-version 1.0.0
- Elencare tutti gli
InVMAccessControlProfileVersionartefatti
az sig in-vm-access-control-profile-version list --resource-group ResourceGroupForINVM --gallery-name MyGallery67 --profile-name myInVMAccessControlProfileName
- Elimina
InVMAccessControlProfileVersion
Prima di eliminare qualsiasi InVMAccessControlProfileVersion verificare che non venga usata da alcun InVMAccessControlProfile su macchine virtuali o set di scalabilità di macchine virtuali.
az sig in-vm-access-control-profile-version delete --resource-group ResourceGroupForINVM --gallery-name MyGallery67 --profile-name myInVMAccessControlProfileName --profile-version 1.0.0
- Elimina
InVMAccessControlProfile
az sig in-vm-access-control-profile delete --resource-group ResourceGroupForINVM --gallery-name MyGallery67 --name myInVMAccessControlProfileName