Kurz: Směrování událostí změn stavu zásad do Event Gridu pomocí Azure CLI

V tomto článku se dozvíte, jak nastavit odběry událostí služby Azure Policy tak, aby odesílaly události změny stavu zásad do webového koncového bodu. Uživatelé služby Azure Policy se můžou přihlásit k odběru událostí vygenerovaných při změně stavu zásad u prostředků. Tyto události můžou aktivovat webhooky, Azure Functions, fronty Azure Storage nebo jakoukoli jinou obslužnou rutinu událostí podporovanou službou Azure Event Grid. Obvykle odesíláte události do koncového bodu, který data události zpracuje a provede akce. Pro zjednodušení tohoto kurzu odešlete události do webové aplikace, která shromažďuje a zobrazuje zprávy.

Požadavky

  • Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
  • Tento rychlý start vyžaduje, abyste spustili Azure CLI verze 2.0.76 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Vytvoření skupiny zdrojů

Témata služby Event Grid jsou prostředky Azure a musí být umístěné ve skupině prostředků Azure. Skupina prostředků je logická kolekce, ve které se nasazují a spravují prostředky Azure.

Vytvořte skupinu prostředků pomocí příkazu az group create.

Následující příklad vytvoří skupinu prostředků pojmenovanou <resource_group_name> v umístění westus . Nahraďte <resource_group_name> jedinečným názvem vaší skupiny prostředků.

# Log in first with az login if you're not using Cloud Shell

az group create --name <resource_group_name> --location westus

Vytvoření tématu systému Event Gridu

Teď, když máme skupinu prostředků, vytvoříme systémové téma. Systémové téma ve službě Event Grid představuje jednu nebo více událostí publikovaných službami Azure, jako jsou Azure Policy a Azure Event Hubs. Toto téma systému používá Microsoft.PolicyInsights.PolicyStates typ tématu pro změny stavu služby Azure Policy.

Nejprve je potřeba zaregistrovat PolicyInsights poskytovatele prostředků a EventGrid poskytovatele prostředků v příslušném oboru správy. Azure Portal automaticky generuje všechny ip adresy, které poprvé vyvoláte, ale Azure CLI ne.

# 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

Dále nahraďte <subscriptionId> parametr scope ID vašeho předplatného a <resource_group_name> parametru resource-group dříve vytvořenou skupinou prostředků.

az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/subscriptions/<subscriptionId>" --resource-group "<resource_group_name>"

Pokud se v oboru skupiny pro správu použije systémové téma Event Gridu, syntaxe parametrů Azure CLI --source se trochu liší. Tady je příklad:

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>"

Vytvoření koncového bodu zpráv

Před přihlášením k odběru tématu vytvoříme koncový bod pro zprávy události. Koncový bod obvykle provede akce na základě dat události. Pro zjednodušení tohoto rychlého startu nasadíte předem připravenou webovou aplikaci , která zobrazí zprávy událostí. Nasazené řešení zahrnuje plán služby App Service, webovou aplikaci App Service a zdrojový kód z GitHubu.

Nahraďte <your-site-name> jedinečným názvem vaší webové aplikace. Název webové aplikace musí být jedinečný, protože je součástí položky 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

Dokončení nasazení může trvat několik minut. Po úspěšném nasazení si prohlédněte webovou aplikaci, abyste měli jistotu, že je spuštěná. Ve webovém prohlížeči přejděte na: https://<your-site-name>.azurewebsites.net

Měli byste vidět web aktuálně bez zobrazených zpráv.

Přihlášení k odběru systémového tématu

K odběru tématu se přihlašujete, aby služba Event Grid věděla, které události chcete sledovat a kam má tyto události odesílat. Následující příklad se přihlásí k odběru systémového tématu, které jste vytvořili, a předá adresu URL z vaší webové aplikace jako koncový bod pro příjem oznámení událostí. Nahraďte řetězec <event_subscription_name> názvem odběru události. Místo <resource_group_name> a <your-site-name> použijte hodnoty názvu skupiny prostředků a názvu účtu úložiště, které jste vytvořili dříve.

Koncový bod pro webovou aplikaci musí obsahovat příponu /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

Znovu zobrazte webovou aplikaci a všimněte si, že se do ní odeslala událost ověření odběru. Vyberte ikonu oka a rozbalte data události. Služba Event Grid odešle událost ověření, aby koncový bod mohl ověřit, že data události chce přijímat. Webová aplikace obsahuje kód pro ověření odběru.

Snímek obrazovky s událostí ověření odběru služby Event Grid v předem připravené webové aplikaci

Vytvoření přiřazení zásady

V tomto rychlém startu vytvoříte přiřazení zásad a přiřadíte k definici skupin prostředků značku Vyžadovat značku. Tato definice zásady identifikuje skupiny prostředků, u nichž chybí značka nakonfigurovaná během přiřazování zásad.

Spuštěním následujícího příkazu vytvořte přiřazení zásad s vymezeným oborem pro skupinu prostředků, kterou jste vytvořili pro uložení tématu Event Gridu:

# 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\" } }'

Předchozí příkaz používá následující informace:

  • Name – skutečný název přiřazení. V tomto příkladu se použily události requiredtags-events .
  • DisplayName – zobrazovaný název přiřazení zásady. V tomto případě používáte pro RG značku Vyžadovat.
  • Scope – Obor určuje, pro které prostředky nebo skupiny prostředků se toto přiřazení zásady bude vynucovat. Může sahat od předplatného až po skupiny prostředků. Nezapomeňte nahradit <scope> názvem vaší skupiny prostředků. Formát oboru skupiny prostředků je /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>.
  • Zásada – ID definice zásady, na základě kterého používáte k vytvoření přiřazení. V tomto případě je to ID definice zásady Vyžadovat značku pro skupiny prostředků. ID definice zásady získáte spuštěním příkazu az policy definition list --query "[?displayName=='Require a tag on resource groups']".

Po vytvoření přiřazení zásady počkejte Microsoft.PolicyInsights.PolicyStateCreated , až se ve webové aplikaci zobrazí oznámení o události. Skupina prostředků, kterou jsme vytvořili, zobrazuje data.complianceState hodnotu nesplňující požadavky , která se má spustit.

Snímek obrazovky se stavem zásad odběru Event Gridu – Vytvořená událost pro skupinu prostředků v předem připravené webové aplikaci

Poznámka:

Pokud skupina prostředků dědí další přiřazení zásad z hierarchie předplatných nebo skupin pro správu, zobrazí se také události pro každou z nich. Ověřte, že událost je pro zadání v tomto kurzu vyhodnocením data.policyDefinitionId vlastnosti.

Aktivace změny ve skupině prostředků

Aby byla skupina prostředků kompatibilní, je vyžadována značka s názvem EventTest . Přidejte značku do skupiny prostředků následujícím příkazem, který nahradí <subscriptionId> ID vašeho předplatného a <resourceGroup> názvem skupiny prostředků:

# 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

Po přidání požadované značky do skupiny prostředků počkejte Microsoft.PolicyInsights.PolicyStateChanged , až se ve webové aplikaci zobrazí oznámení o události. Rozbalte událost a data.complianceState hodnota teď zobrazuje vyhovující.

Řešení problému

Pokud se zobrazí chyba podobná některé z následujících možností, ujistěte se, že jste oba poskytovatele prostředků zaregistrovali v oboru, ke kterému se přihlašujete (skupina pro správu nebo předplatné):

  • 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.'}]}

Vyčištění prostředků

Pokud chcete pokračovat v práci s touto webovou aplikací a předplatným událostí Azure Policy, nevyčisťujte prostředky vytvořené v tomto článku. Pokud pokračovat nechcete, pomocí následujícího příkazu odstraňte prostředky, které jste vytvořili v tomto článku.

Nahraďte <resource_group_name> skupinou prostředků, kterou jste vytvořili.

az group delete --name <resource_group_name>

Další kroky

Teď, když víte, jak vytvořit témata a odběry událostí pro Azure Policy, přečtěte si další informace o událostech změn stavu zásad a Event Gridu: