Esercitazione: Indirizzare gli eventi di modifica dello stato dei criteri a Griglia di eventi con l'interfaccia della riga di comando di Azure
Questo articolo illustra come configurare le sottoscrizioni di eventi di Criteri di Azure per inviare eventi di modifica dello stato dei criteri a un endpoint Web. Gli utenti di Criteri di Azure possono sottoscrivere gli eventi generati quando si verificano modifiche dello stato dei criteri sulle risorse. Questi eventi possono attivare web hook, Funzioni di Azure, code Archiviazione di Azure o qualsiasi altro gestore eventi supportato da Griglia di eventi di Azure. In genere, si inviano eventi a un endpoint che elabora i dati dell'evento e intraprende azioni. Per semplificare questa esercitazione, inviare gli eventi a un'app Web che raccoglie e visualizza i messaggi.
Prerequisiti
- Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- Questa guida di avvio rapido richiede l'interfaccia della riga di comando di Azure 2.0.76 o versioni successive. Per trovare la versione, eseguire
az --version
. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
Creare un gruppo di risorse
Gli argomenti della griglia di eventi sono risorse di Azure e devono essere inseriti in un gruppo di risorse di Azure. Il gruppo di risorse è una raccolta logica in cui vengono distribuite e gestite le risorse di Azure.
Creare un gruppo di risorse con il comando az group create.
L'esempio seguente crea un gruppo di risorse denominato <resource_group_name>
nell'area westus. Sostituire <resource_group_name>
con un nome univoco per il gruppo di risorse.
# Log in first with az login if you're not using Cloud Shell
az group create --name <resource_group_name> --location westus
Crea un argomento del sistema di Griglia di eventi
Ora che è disponibile un gruppo di risorse, viene creato un argomento di sistema. Un argomento di sistema in Griglia di eventi rappresenta uno o più eventi pubblicati da servizi di Azure, ad esempio Criteri di Azure e Hub eventi di Azure. Questo argomento di sistema usa il tipo di argomento Microsoft.PolicyInsights.PolicyStates
per le modifiche dello stato di Criteri di Azure.
Prima di tutto, è necessario registrare i PolicyInsights
provider di risorse e EventGrid
nell'ambito di gestione appropriato. portale di Azure autoregista tutti gli indirizzi IP richiamati per la prima volta, ma l'interfaccia della riga di comando di Azure non lo fa.
# Log in first with az login if you're not using Cloud Shell
# Register the required RPs at the management group scope
az provider register --namespace Microsoft.PolicyInsights -m <managementGroupId>
az provider register --namespace Microsoft.EventGrid -m <managementGroupId>
# Alternatively, register the required RPs at the subscription scope (defaults to current subscription context)
az provider register --namespace Microsoft.PolicyInsights
az provider register --namespace Microsoft.EventGrid
<subscriptionId>
Sostituire quindi nel scope
parametro con l'ID della sottoscrizione e <resource_group_name>
nel resource-group
parametro con il gruppo di risorse creato in precedenza.
az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/subscriptions/<subscriptionId>" --resource-group "<resource_group_name>"
Se l'argomento di sistema di Griglia di eventi viene applicato all'ambito del gruppo di gestione, la sintassi dei parametri dell'interfaccia della riga di comando di Azure --source
è leggermente diversa. Ecco un esempio:
az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/tenants/<tenantID>/providers/Microsoft.Management/managementGroups/<management_group_name>" --resource-group "<resource_group_name>"
Creare un endpoint del messaggio
Prima di sottoscrivere l'argomento, creare l'endpoint per il messaggio dell'evento. L'endpoint richiede in genere azioni basate sui dati degli eventi. Per semplificare questo avvio rapido, si distribuisce un'app Web preesistente che visualizza i messaggi di evento. La soluzione distribuita include un piano di servizio app, un'app Web del servizio app e codice sorgente da GitHub.
Sostituire <your-site-name>
con un nome univoco per l'app Web. Il nome dell'app Web deve essere univoco perché fa parte della voce DNS (Domain Name System).
# Log in first with az login if you're not using Cloud Shell
az deployment group create \
--resource-group <resource_group_name> \
--template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
--parameters siteName=<your-site-name> hostingPlanName=viewerhost
Il completamento della distribuzione può richiedere alcuni minuti. Dopo aver completato la distribuzione, visualizzare l'app Web per assicurarsi che sia in esecuzione. In un Web browser passare a: https://<your-site-name>.azurewebsites.net
Il sito dovrebbe essere visibile senza messaggi attualmente visualizzati.
Sottoscrivere l'argomento di sistema
Si sottoscrive un argomento per indicare a Griglia di eventi gli eventi di cui si vuole tenere traccia e dove inviare tali eventi. L'esempio seguente sottoscrive l'argomento di sistema creato e passa l'URL dall'app Web come endpoint per ricevere le notifiche di evento. Sostituire <event_subscription_name>
con un nome per la sottoscrizione di eventi. Per <resource_group_name>
e <your-site-name>
usare i valori creati in precedenza.
L'endpoint per l'app Web deve includere il suffisso /api/updates/
.
# Log in first with az login if you're not using Cloud Shell
# Create the subscription
az eventgrid system-topic event-subscription create \
--name <event_subscription_name> \
--resource-group <resource_group_name> \
--system-topic-name PolicyStateChanges \
--endpoint https://<your-site-name>.azurewebsites.net/api/updates
Visualizzare di nuovo l'app Web e notare che è stato inviato un evento di convalida della sottoscrizione. Selezionare l'icona a forma di occhio per espandere i dati dell'evento. Griglia di eventi invia l'evento di convalida in modo che l'endpoint possa verificare che voglia ricevere i dati dell'evento. L'app Web include il codice per la convalida della sottoscrizione.
Creare un'assegnazione di criteri
In questa guida introduttiva si crea un'assegnazione di criteri e si assegna la definizione Richiedi un tag per i gruppi di risorse. Questa definizione di criteri identifica i gruppi di risorse mancanti nel tag configurato durante l'assegnazione dei criteri.
Eseguire il comando seguente per creare un'assegnazione di criteri con ambito al gruppo di risorse creato per contenere l'argomento griglia di eventi:
# Log in first with az login if you're not using Cloud Shell
az policy assignment create --name 'requiredtags-events' --display-name 'Require tag on RG' --scope '<resourceGroupScope>' --policy '<policy definition ID>' --params '{ \"tagName\": { \"value\": \"EventTest\" } }'
Il comando precedente usa le informazioni seguenti.
- Name: nome effettivo dell'assegnazione. Per questo esempio è stato usato requiredtags-events.
- DisplayName: nome visualizzato per l'assegnazione di criteri. In questo caso si sta usando Richiedi tag nei gruppi di risorse.
- Scope: ambito che determina le risorse o il raggruppamento di risorse a cui viene applicata l'assegnazione di criteri. e può variare da una sottoscrizione a gruppi di risorse. Assicurarsi di sostituire
<scope>
con il nome del gruppo di risorse. Il formato per un ambito del gruppo di risorse è/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
. - Policy: ID della definizione di criteri in base alla quale si crea l'assegnazione. In questo caso, si tratta dell'ID della definizione dei criteri Richiedi un tag nei gruppi di risorse. Per ottenere l'ID della definizione di criteri, eseguire questo comando:
az policy definition list --query "[?displayName=='Require a tag on resource groups']"
Dopo aver creato l'assegnazione dei criteri, attendere che venga visualizzata una Microsoft.PolicyInsights.PolicyStateCreated
notifica degli eventi nell'app Web. Il gruppo di risorse creato mostra un valore data.complianceState
di NonCompliant da avviare.
Nota
Se il gruppo di risorse eredita altre assegnazioni di criteri dalla gerarchia di sottoscrizioni o gruppi di gestione, vengono visualizzati anche gli eventi per ognuno di essi. Verificare che l'evento sia per l'assegnazione in questa esercitazione valutando la proprietà data.policyDefinitionId
.
Attivare una modifica nel gruppo di risorse
Per rendere conforme il gruppo di risorse, è necessario un tag con il nome EventTest. Aggiungere il tag al gruppo di risorse con il comando seguente sostituendo <subscriptionId>
con l'ID sottoscrizione e <resourceGroup>
con il nome del gruppo di risorse:
# Log in first with az login if you're not using Cloud Shell
az tag create --resource-id '/subscriptions/<SubscriptionID>/resourceGroups/<resourceGroup>' --tags EventTest=true
Dopo aver aggiunto il tag necessario al gruppo di risorse, attendere che venga visualizzata una Microsoft.PolicyInsights.PolicyStateChanged
notifica degli eventi nell'app Web. Espandere l'evento e il valore data.complianceState
ora mostra Conforme.
Risoluzione dei problemi
Se viene visualizzato un errore simile a uno dei seguenti, assicurarsi di aver registrato entrambi i provider di risorse nell'ambito a cui si sta sottoscrivendo (gruppo di gestione o sottoscrizione):
Deployment has failed with the following error: {"code":"Publisher Notification Error","message":"Failed to enable publisher notifications.","details":[{"code":"Publisher Provider Error","message":"GET request for <uri> failed with status code: Forbidden, code: AuthorizationFailed and message: The client '<identifier>' with object id '<identifier>' does not have authorization to perform action 'microsoft.policyinsights/eventGridFilters/read' over scope '<scope>/providers/microsoft.policyinsights/eventGridFilters/_default' or the scope is invalid. If access was recently granted, please refresh your credentials.."}]}
Deployment has failed with the following error: {'code':'Publisher Notification Error','message':'Failed to enable publisher notifications.','details':[{'code':'ApiVersionNotSupported','message':'Event Grid notifications are currently not supported by microsoft.policyinsights in global. Try re-registering Microsoft.EventGrid provider if this is your first event subscription in this region.'}]}
Pulire le risorse
Se si intende continuare a usare questa app Web questi criteri di Azure per la sottoscrizione di eventi, non è necessario pulire le risorse create in questo articolo. Se non si intende continuare, usare il comando seguente per eliminare le risorse create con questo articolo.
Sostituire <resource_group_name>
con il gruppo di risorse creato.
az group delete --name <resource_group_name>
Passaggi successivi
Ora che si è appreso come creare argomenti e sottoscrizioni di eventi per Criteri di Azure, altre informazioni sugli eventi di modifica dello stato dei criteri e Griglia di eventi: