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. | |
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. | |
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. |
Použití Azure Cloud Shellu:
Spusťte Cloud Shell.
Výběrem tlačítka Kopírovat v bloku kódu (nebo bloku příkazů) zkopírujte kód nebo příkaz.
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.
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.
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.
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: