Samouczek: kierowanie zdarzeń zmiany stanu zasad do usługi Event Grid za pomocą interfejsu wiersza polecenia platformy Azure
Z tego artykułu dowiesz się, jak skonfigurować subskrypcje zdarzeń usługi Azure Policy w celu wysyłania zdarzeń zmiany stanu zasad do internetowego punktu końcowego. Użytkownicy usługi Azure Policy mogą subskrybować zdarzenia emitowane w przypadku wystąpienia zmian stanu zasad w zasobach. Te zdarzenia mogą wyzwalać elementy webhook, funkcje platformy Azure, kolejki usługi Azure Storage lub dowolną inną procedurę obsługi zdarzeń obsługiwaną przez usługę Azure Event Grid. Zazwyczaj użytkownik wysyła zdarzenia do punktu końcowego, w którym następuje przetwarzanie danych zdarzenia i są wykonywane akcje. Aby uprościć ten samouczek, wysyłasz zdarzenia do aplikacji internetowej, która zbiera i wyświetla komunikaty.
Wymagania wstępne
- Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
- Ten przewodnik Szybki start wymaga uruchomienia interfejsu wiersza polecenia platformy Azure w wersji 2.0.76 lub nowszej. Aby dowiedzieć się, jaka wersja jest używana, uruchom polecenie
az --version
. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
Tworzenie grupy zasobów
Tematy usługi Event Grid to zasoby platformy Azure i muszą być umieszczone w grupie zasobów platformy Azure. Grupa zasobów to kolekcja logiczna przeznaczona do wdrażania zasobów platformy Azure i zarządzania nimi.
Utwórz grupę zasobów za pomocą polecenia az group create.
Poniższy przykład tworzy grupę zasobów o nazwie <resource_group_name>
w lokalizacji westus . Zamień <resource_group_name>
na unikatową nazwę grupy zasobów.
# Log in first with az login if you're not using Cloud Shell
az group create --name <resource_group_name> --location westus
Tworzenie tematu systemu usługi Event Grid
Teraz, gdy mamy grupę zasobów, utworzymy temat systemowy. Temat systemowy w usłudze Event Grid reprezentuje co najmniej jedno zdarzenie opublikowane przez usługi platformy Azure, takie jak Azure Policy i Azure Event Hubs. W tym temacie systemowym jest używany typ tematu Microsoft.PolicyInsights.PolicyStates
dla zmian stanu usługi Azure Policy.
Najpierw należy zarejestrować PolicyInsights
dostawców zasobów i EventGrid
(RPs) w odpowiednim zakresie zarządzania. Autoregisters w witrynie Azure Portal wszelkie wywołane adresy IP po raz pierwszy, ale interfejs wiersza polecenia platformy Azure nie jest.
# 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
Następnie zastąp <subscriptionId>
wartość w parametrze scope
identyfikatorem subskrypcji i <resource_group_name>
parametrem resource-group
wcześniej utworzoną grupą zasobów.
az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/subscriptions/<subscriptionId>" --resource-group "<resource_group_name>"
Jeśli temat systemu usługi Event Grid jest stosowany do zakresu grupy zarządzania, składnia parametrów interfejsu wiersza polecenia --source
platformy Azure jest nieco inna. Oto przykład:
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>"
Tworzenie punktu końcowego komunikatów
Przed zasubskrybowaniem tematu utwórzmy punkt końcowy dla komunikatów o zdarzeniach. Zazwyczaj w punkcie końcowym akcje są wykonywane na podstawie danych zdarzenia. Aby uprościć ten przewodnik Szybki start, wdrożysz wstępnie utworzoną aplikację internetową, która wyświetla komunikaty o zdarzeniach. Wdrożone rozwiązanie zawiera plan usługi App Service, aplikację internetową usługi App Service i kod źródłowy z repozytorium GitHub.
Zastąp <your-site-name>
unikatową nazwą aplikacji internetowej. Nazwa aplikacji internetowej musi być unikatowa, ponieważ jest częścią wpisu System nazw domen (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
Ukończenie wdrożenia może potrwać kilka minut. Po pomyślnym wdrożeniu wyświetl aplikację internetową, aby upewnić się, że jest uruchomiona. W przeglądarce sieci Web przejdź do: https://<your-site-name>.azurewebsites.net
Powinna być widoczna witryna internetowa bez żadnych aktualnie wyświetlanych komunikatów.
Subskrybowanie tematu systemowego
Subskrybowanie tematu to dla usługi Event Grid informacja o tym, które zdarzenia chcesz śledzić i gdzie mają być one wysyłane. Poniższy przykład subskrybuje utworzony temat systemowy i przekazuje adres URL z aplikacji internetowej jako punkt końcowy w celu odbierania powiadomień o zdarzeniach. Zastąp element <event_subscription_name>
nazwą Twojej subskrypcji zdarzeń. Jako parametrów <resource_group_name>
i <your-site-name>
użyj utworzonych wcześniej wartości.
Punkt końcowy dla aplikacji internetowej musi zawierać sufiks /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
Ponownie wyświetl aplikację internetową i zwróć uwagę, że do niej wysłano zdarzenie weryfikacji subskrypcji. Wybierz ikonę oka, aby rozwinąć dane zdarzenia. Usługa Event Grid wysyła zdarzenie weryfikacji, aby w punkcie końcowym mogło nastąpić sprawdzenie, czy dane zdarzenia mają być odbierane. Aplikacja internetowa zawiera kod do sprawdzania poprawności subskrypcji.
Tworzenie przypisania zasad
W tym przewodniku Szybki start utworzysz przypisanie zasad i przypiszesz definicję Wymagaj tagu w grupach zasobów. Ta definicja zasad identyfikuje grupy zasobów, które nie mają tagu skonfigurowanego podczas przypisywania zasad.
Uruchom następujące polecenie, aby utworzyć przypisanie zasad o zakresie do grupy zasobów utworzonej w celu przechowywania tematu usługi Event Grid:
# 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\" } }'
Poprzednie polecenie korzysta z następujących informacji:
- Nazwa —rzeczywista nazwa przypisania. W tym przykładzie użyto elementu requiredtags-events .
- DisplayName — nazwa wyświetlana przypisania zasad. W takim przypadku używasz tagu Wymagaj w usłudze RG.
- Zakres — zakres określa, jakie zasoby lub grupy zasobów są wymuszane w ramach przypisania zasad. Może obejmować zarówno subskrypcje, jak i grupy zasobów. Pamiętaj, aby zastąpić fragment
<scope>
nazwą grupy zasobów. Format zakresu grupy zasobów to/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
. - Policy — identyfikator definicji zasad, na podstawie którego używasz do utworzenia przypisania. W takim przypadku jest to identyfikator definicji zasad Wymagaj tagu w grupach zasobów. Aby uzyskać identyfikator definicji zasad, uruchom następujące polecenie:
az policy definition list --query "[?displayName=='Require a tag on resource groups']"
Po utworzeniu przypisania zasad poczekaj Microsoft.PolicyInsights.PolicyStateCreated
na wyświetlenie powiadomienia o zdarzeniu w aplikacji internetowej. Utworzona grupa zasobów zawiera data.complianceState
wartość NonCompliant , aby rozpocząć.
Uwaga
Jeśli grupa zasobów dziedziczy inne przypisania zasad z hierarchii subskrypcji lub grupy zarządzania, wyświetlane są również zdarzenia dla każdej z nich. Upewnij się, że zdarzenie dotyczy przypisania w tym samouczku, oceniając data.policyDefinitionId
właściwość.
Wyzwalanie zmiany w grupie zasobów
Aby zapewnić zgodność grupy zasobów, wymagany jest tag o nazwie EventTest . Dodaj tag do grupy zasobów za pomocą następującego polecenia, zastępując <subscriptionId>
ciąg identyfikatorem subskrypcji i <resourceGroup>
nazwą grupy zasobów:
# 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 dodaniu wymaganego tagu do grupy zasobów poczekaj na Microsoft.PolicyInsights.PolicyStateChanged
wyświetlenie powiadomienia o zdarzeniu w aplikacji internetowej. Rozwiń zdarzenie, a wartość jest teraz wyświetlana data.complianceState
jako Zgodne.
Rozwiązywanie problemów
Jeśli zostanie wyświetlony błąd podobny do jednego z poniższych, upewnij się, że obaj dostawcy zasobów zarejestrowali się w zakresie, w którym subskrybujesz (grupę zarządzania lub subskrypcję):
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.'}]}
Czyszczenie zasobów
Jeśli planujesz kontynuować pracę z tą aplikacją internetową i subskrypcją zdarzeń usługi Azure Policy, nie usuwaj zasobów utworzonych w tym artykule. Jeśli nie planujesz kontynuować, użyj następującego polecenia, aby usunąć zasoby utworzone w tym artykule.
Zastąp <resource_group_name>
element utworzoną grupą zasobów.
az group delete --name <resource_group_name>
Następne kroki
Teraz, gdy wiesz, jak tworzyć tematy i subskrypcje zdarzeń dla usługi Azure Policy, dowiedz się więcej o zdarzeniach zmiany stanu zasad i usłudze Event Grid: