Attivazione dei Log
Event Hubs
Dal portale di Azure, cerca Event Hubs e selezionalo:


-
Dal portale di Azure, cerca Event Hubs e selezionalo
-
Clicca su +Crea
-
Compila i parametri in base alle migliori pratiche del tuo ambiente (es: sottoscrizione, gruppo di risorse, ecc.), eccetto i seguenti valori:
- Base
- Livello di prezzo: Standard
- Unità di throughput: 1
- Avanzate
- Versione minima TLS: Versione 1.2
- Autenticazione locale: Abilitata
- Rete
- Metodo di connettività: Accesso pubblico
- Base
Nota che una volta che le risorse che desideri monitorare inviano log all'Event Hub creato sopra, gli Event Hub corrispondenti verranno creati automaticamente.
Per esempio:


Azure Function
- Dal portale di Azure, cerca Function App e selezionalo:


- Compila i parametri in base alle migliori pratiche del tuo ambiente (es: sottoscrizione, gruppo di risorse, ecc.), eccetto i seguenti valori:
- Base
- Opzione di hosting: Funzioni Premium
- Vuoi distribuire codice o un'immagine di container? Codice
- Runtime stack: .NET
- Versione: 8 LTS, modello in-process
- Sistema operativo: Windows
- Piano tariffario: Elastic Premium EP1 (210 ACU totali, 3.5 GB di memoria, 1 vCPU)
- Rete
- Abilita accesso pubblico: Sì
- Monitoraggio
- Abilita Application Insights: No (attivalo dopo che la funzione è stata creata)
Dopo che la funzione è stata distribuita, completa i seguenti campi:
Panoramica – Funzioni - +Crea
- Seleziona un modello: Trigger di Azure Event Hub
- Imposta gli altri parametri in base all'Event Hub creato in precedenza.
- Variabili d'ambiente: NEBULA_API_KEY
Come ottenere una API KEY?
Vai su nebula.altermaind.com e segui questi passaggi:
- Menu -> Azure -> Chiavi API (ricorda, questa funzionalità è visibile solo per il ruolo orgaAdmin)
- Copia la chiave API primaria e usala come valore per la variabile NEBULA_API_KEY


Codice della Funzione Azure
#r "Newtonsoft.Json"
#r "Azure.Messaging.EventHubs"
#r "System.Net.Http"
#r "System.Memory.Data"
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Azure.Messaging.EventHubs;
using Newtonsoft.Json;
public static async Task Run(EventData[] events, ILogger log)
{
HttpClient httpClient = new HttpClient();
string NEBULA_URL = "https://azurerm-intake-api.altermaind.com/api/azurerm-logs";
string NEBULA_API_KEY = Environment.GetEnvironmentVariable("NEBULA_API_KEY");
const int INITIAL_DELAY = 1000; // Ritardo iniziale in millisecondi
foreach (EventData eventData in events)
{
string messageBody = Encoding.UTF8.GetString(eventData.Body.ToArray());
log.LogInformation($"Messaggio ricevuto: {messageBody}");
bool messageSent = false;
int retryCount = 0;
int delay = INITIAL_DELAY;
while (!messageSent)
{
try
{
// Preparare la richiesta HTTP
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, NEBULA_URL)
{
Content = new StringContent(messageBody, Encoding.UTF8, "application/json")
};
// Aggiungere la chiave API agli header della richiesta
httpRequestMessage.Headers.Add("X-API-KEY", NEBULA_API_KEY);
// Inviare la richiesta HTTP al microservizio
HttpResponseMessage response = await httpClient.SendAsync(httpRequestMessage);
if (response.IsSuccessStatusCode)
{
log.LogInformation($"Messaggio inviato con successo al microservizio. Risposta: {await response.Content.ReadAsStringAsync()}");
messageSent = true;
}
else
{
log.LogError($"Errore nell'invio del messaggio al microservizio. Codice di stato: {response.StatusCode}, Risposta: {await response.Content.ReadAsStringAsync()}");
// Verificare se il codice di stato è tra 400 e 499
if ((int)response.StatusCode >= 400 && (int)response.StatusCode <= 499)
{
log.LogError("Si è verificato un errore del client. Nessun nuovo tentativo.");
break;
}
}
}
catch (Exception ex)
{
log.LogError($"Eccezione: {ex.Message}");
}
if (!messageSent)
{
retryCount++;
log.LogWarning($"Tentativo di ripetizione {retryCount} fallito. Attesa di {delay}ms prima del prossimo tentativo.");
await Task.Delay(delay);
delay *= 2; // Backoff esponenziale
}
}
}
}
Politica
Questa guida è divisa in due sezioni principali: una per scopi generali e una per risorse specifiche.
Generale
-
Dal Portale di Azure, cerca "Politica" e selezionala.
-
Sotto "Creazione", seleziona "Definizioni", quindi "+ Definizioni della Politica": si aprirà la seguente procedura guidata:
a. Definisci la posizione: il livello più alto del tuo directory, tipicamente il gruppo di gestione principale, perché nei passaggi successivi puoi assegnare la politica ai livelli sottostanti (ad esempio, sottoscrizione).
Il contenuto degli altri moduli dipende dal tuo ambiente.
- Una volta creata e salvata la politica, il passaggio successivo è assegnarla.
Prima di procedere, è necessario avere il ruolo di Amministratore dell'accesso utente per l'ambito dell'assegnazione della politica.
Seleziona la politica sotto "Creazione" – "Definizioni".
-
Fai clic su "Assegna politica", apparirà la seguente procedura guidata:
-
Scheda di base
- Ambito: il livello più alto del tuo directory, tipicamente il gruppo di gestione principale, per indirizzare tutte le risorse impattate dalla politica.
- La definizione della politica e il nome dell'assegnazione sono impostati direttamente nella politica. Il contenuto degli altri moduli dipende dal tuo ambiente.
-
Scheda Parametri
Seleziona l'Event Hub creato precedentemente.
-
Scheda di Remediation
- Tipo di Identità Gestita: Identità gestita assegnata dal sistema.
Gli altri campi vengono automaticamente riempiti dalla definizione della politica.
- Messaggio di non conformità: in base al tuo ambiente.
- Crea e salva l'assegnazione.
-
-
Una volta che la politica è stata assegnata, il suo tempo di valutazione dipende da diversi eventi secondo la documentazione di Microsoft.
È possibile monitorare lo stato della valutazione sotto la colonna "Remediation – Politiche da correggere – Risorse da correggere".
-
Una volta che l'ingestione delle risorse da correggere è completata, fai clic sulla politica desiderata (Remediation – Politiche da correggere) e imposta i parametri della correzione secondo la tua scelta:
- Risorse applicabili da correggere: qui puoi selezionare l'ambito (ad esempio, gruppo di gestione, sottoscrizione, ecc.).
- Posizioni
Infine, seleziona "Correggi".
-
È possibile monitorare lo stato della correzione sotto "Remediation":
- Task di correzione