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. Pokud ale chcete tento kurz zjednodušit, 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.

Azure Cloud Shell

Azure hostí interaktivní prostředí Azure Cloud Shell, které můžete používat v prohlížeči. Pro práci se službami Azure můžete v prostředí Cloud Shell použít buď Bash, nebo PowerShell. Předinstalované příkazy Cloud Shellu můžete použít ke spuštění kódu v tomto článku, aniž byste museli instalovat cokoli do místního prostředí.

Spuštění služby Azure Cloud Shell:

Možnost Příklad nebo odkaz
Vyberte Vyzkoušet v pravém horním rohu bloku kódu nebo příkazu. Výběrem možnosti Vyzkoušet se kód ani příkaz automaticky nekopíruje do Cloud Shellu. Screenshot that shows an example of Try It for Azure Cloud Shell.
Přejděte na adresu https://shell.azure.com nebo výběrem tlačítka Spustit Cloud Shell otevřete Cloud Shell v prohlížeči. Button to launch Azure Cloud Shell.
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. Screenshot that shows the Cloud Shell button in the Azure portal

Použití Azure Cloud Shellu:

  1. Spusťte Cloud Shell.

  2. Výběrem tlačítka Kopírovat v bloku kódu (nebo bloku příkazů) zkopírujte kód nebo příkaz.

  3. Vložte kód nebo příkaz do relace Cloud Shellu tak, že ve Windows a Linuxu vyberete ctrl+Shift+V nebo vyberete Cmd+Shift+V v macOS.

  4. Stisknutím klávesy Enter spusťte kód nebo příkaz.

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 budete muset zaregistrovat PolicyInsights poskytovatele prostředků a EventGrid poskytovatele prostředků v příslušném oboru správy. Zatímco Azure Portal automaticky zaregistruje všechny RPS, které poprvé vyvoláte, 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> v parametru oboru ID vašeho předplatného a <resource_group_name> parametru skupiny prostředků 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 vaše systémové téma Event Gridu použije v oboru skupiny pro správu, 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á zobrazuje zprávy události. 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.

# 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 webovou aplikaci prohlédněte, abyste se ujistili, že funguje. 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

Podívejte se na webovou aplikaci znovu a všimněte si, že do ní byla odeslána 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.

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

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 na Microsoft.Policy Přehledy. Oznámení události PolicyStateCreated, které se zobrazí ve webové aplikaci. Skupina prostředků, kterou jsme vytvořili, zobrazuje data.complianceState hodnotu nesplňující požadavky , která se má spustit.

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

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 na Microsoft.Policy Přehledy. Oznámení události PolicyStateChanged, které se zobrazí ve webové aplikaci. 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 zaregistrovali oba poskytovatele prostředků 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> názvem skupiny prostředků, kterou jste vytvořili výše.

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 o tom, co vám může Event Grid pomoct: