Share via


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 Criteri di Azure sottoscrizioni di eventi per inviare eventi di modifica dello stato dei criteri a un endpoint Web. Criteri di Azure gli utenti possono sottoscrivere 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. Tuttavia, per semplificare questa esercitazione, si inviano 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.

Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice in questo articolo, senza dover installare alcun elemento nell'ambiente locale.

Per avviare Azure Cloud Shell:

Opzione Esempio/Collegamento
Selezionare Prova nell'angolo superiore destro di un codice o di un blocco di comandi. Selezionando Prova non viene copiato automaticamente il codice o il comando in Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. Button to launch Azure Cloud Shell.
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Per usare Azure Cloud Shell:

  1. Avviare Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice (o blocco di comandi) per copiare il codice o il comando.

  3. Incollare il codice o il comando nella sessione di Cloud Shell selezionando CTRL+MAIUSC+V in Windows e Linux oppure selezionando CMD+MAIUSC+V in macOS.

  4. Selezionare INVIO per eseguire il codice o il comando.

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

Creare un argomento di 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. In questo argomento di sistema viene usato il Microsoft.PolicyInsights.PolicyStates tipo di argomento per Criteri di Azure modifiche dello stato.

Prima di tutto, è necessario registrare i PolicyInsights provider di risorse e EventGrid nell'ambito di gestione appropriato. Mentre l'portale di Azure registra automaticamente tutti gli indirizzi IP richiamati per la prima volta, 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 parametro scope con l'ID della sottoscrizione e <resource_group_name> nel parametro resource-group 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 verrà 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 questa guida introduttiva, 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.

# 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

Per il completamento della distribuzione possono essere necessari alcuni minuti. Dopo il completamento della 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 degli eventi. 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 nuovamente l'app Web e notare che all'app è 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.

Screenshot of the Event Grid subscription validation event in the pre-built web app.

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 usa il tag Require in RG.
  • 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>.
  • Criteri : ID definizione dei criteri, in base al quale si usa per creare 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 notifica di evento Microsoft.PolicyInsights.PolicyStateCreated nell'app Web. Il gruppo di risorse creato mostra il data.complianceState valore NonCompliant da avviare.

Screenshot of the Event Grid subscription Policy State Created event for the resource group in the pre-built web app.

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 data.policyDefinitionId proprietà .

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 notifica di evento Microsoft.PolicyInsights.PolicyStateChanged nell'app Web. Espandere l'evento e il data.complianceState valore 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 eseguendo la sottoscrizione (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 prevede di continuare a usare questa app Web e Criteri di Azure sottoscrizione di eventi, non 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 in precedenza.

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 sulle operazioni che Griglia di eventi può essere utile: