Megosztás a következőn keresztül:


Oktatóanyag: Szabályzatállapot-változási események átirányítása az Event Gridbe az Azure CLI-vel

Ebből a cikkből megtudhatja, hogyan állíthat be Azure Policy-esemény-előfizetéseket a szabályzatállapot-változási események webes végpontra való küldéséhez. Az Azure Policy felhasználói előfizethetnek azokra az eseményekre, amelyek akkor lesznek kibocsátva, ha a szabályzat állapota megváltozik az erőforrásokon. Ezek az események webhookokat, Azure Functions-, Azure Storage-üzenetsorokat vagy bármely más, az Azure Event Grid által támogatott eseménykezelőt aktiválhatnak. Általában olyan végpontoknak szoktunk eseményeket küldeni, amelyek eseményadatokat dolgoznak fel és műveleteket hajtanak végre. Az oktatóanyag egyszerűsítése érdekében azonban az eseményeket egy webalkalmazásba küldi, amely összegyűjti és megjeleníti az üzeneteket.

Előfeltételek

  • Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

  • Ehhez a rövid útmutatóhoz az Azure CLI 2.0.76-os vagy újabb verzióját kell futtatnia. A verzió megkereséséhez futtassa a következőt: az --version. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.

Azure Cloud Shell

Az Azure által üzemeltetett Azure Cloud Shell egy interaktív felület, amelyet a böngészőből használhat. A Bash vagy a PowerShell segítségével is használhatja a Cloud Shellt az Azure-szolgáltatásokhoz. A Cloud Shell előre telepített parancsaival futtathatja a jelen cikkben szereplő kódot anélkül, hogy bármit telepítenie kellene a helyi környezetben.

Az Azure Cloud Shell indítása:

Lehetőség Példa/hivatkozás
Válassza a Kipróbálás lehetőséget egy kód vagy parancsblokk jobb felső sarkában. A Kipróbálás lehetőség választása nem másolja automatikusan a kódot vagy a parancsot a Cloud Shellbe. Képernyőkép az Azure Cloud Shell kipróbálásának példájáról.
Látogasson el a https://shell.azure.com webhelyre, vagy kattintson a Cloud Shell indítása gombra a böngészőben. Gomb az Azure Cloud Shell elindításához.
Az Azure Portal jobb felső sarkában található menüben kattintson a Cloud Shell gombra. Képernyőkép az Azure Portal Cloud Shell gombjáról

Az Azure Cloud Shell használata:

  1. Indítsa el a Cloud Shellt.

  2. A kód vagy parancs másolásához kattintson a Másolás gombra egy kódblokkon (vagy parancsblokkon).

  3. Illessze be a kódot vagy parancsot a Cloud Shell-munkamenetbe a Windows és Linux rendszeren a Ctrl Shift+V billentyűkombinációval+, vagy a Cmd+Shift+V macOS rendszeren való kiválasztásával.

  4. A kód vagy parancs futtatásához válassza az Enter lehetőséget .

Erőforráscsoport létrehozása

Az Event Grid-témakörök Azure-erőforrások, amelyeket egy Azure-erőforráscsoportba kell helyezni. Az erőforráscsoport egy olyan logikai gyűjtemény, amelyben a rendszer üzembe helyezi és kezeli az Azure-erőforrásokat.

Hozzon létre egy erőforráscsoportot az az group create paranccsal.

Az alábbi példa létrehoz egy westus-helyen elnevezett <resource_group_name> erőforráscsoportot. A <resource_group_name> elemet az erőforráscsoport egyedi nevére cserélje le.

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

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

Event Grid-rendszertémakör létrehozása

Most, hogy van egy erőforráscsoportunk, létrehozunk egy rendszertémakört. Az Event Grid rendszertémaköre egy vagy több, az Azure-szolgáltatások, például az Azure Policy és az Azure Event Hubs által közzétett eseményt jelöl. Ez a rendszertéma az Microsoft.PolicyInsights.PolicyStates Azure Policy állapotváltozásainak témakörtípusát használja.

Először regisztrálnia kell az és EventGrid az PolicyInsights erőforrás-szolgáltatókat (RP-ket) a megfelelő felügyeleti hatókörben. Míg az Azure Portal automatikusan regisztrál minden olyan RP-t, amelyet első alkalommal hív meg, az Azure CLI nem.

# 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

Ezután cserélje le <subscriptionId> a hatókör paramétert az előfizetés azonosítójára, az <resource_group_name> erőforráscsoport paraméterben pedig a korábban létrehozott erőforráscsoportra.

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

Ha az Event Grid rendszertémaköre a felügyeleti csoport hatókörére lesz alkalmazva, akkor az Azure CLI --source paraméterszintaxisa kissé eltérő. Példa:

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

Üzenetvégpont létrehozása

A témakörre való feliratkozás előtt hozzuk létre az eseményüzenet végpontját. A végpont általában az eseményadatok alapján hajt végre műveleteket. Az útmutató egyszerűsítése érdekében egy olyan előre létrehozott webalkalmazást helyezünk üzembe, amely megjeleníti az esemény üzeneteit. Az üzembe helyezett megoldás egy App Service-csomagot, egy App Service-webalkalmazást és egy, a GitHubról származó forráskódot tartalmaz.

A <your-site-name> elemet a webalkalmazás egyedi nevére cserélje le. A webalkalmazás nevének egyedinek kell lennie, mert a DNS-bejegyzés része.

# 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

Az üzembe helyezés befejezése eltarthat néhány percig. A sikeres üzembe helyezést követően tekintse meg a webalkalmazást, hogy meggyőződjön annak működéséről. Egy webböngészőben navigáljon a következő helyre: https://<your-site-name>.azurewebsites.net.

A helynek megjelenített üzenetek nélkül kell megjelennie.

Feliratkozás a rendszertémakörre

A témakörre való feliratkozással lehet tudatni az Event Griddel, hogy mely eseményeket kívánja nyomon követni, és hová szeretné küldeni azokat. Az alábbi példa feliratkozik a létrehozott rendszertémakörre, és végpontként átadja a webalkalmazás URL-címét az eseményértesítések fogadásához. Az <event_subscription_name> elemet cserélje le az esemény-előfizetéshez választott névre. A <resource_group_name> és <your-site-name> elemnél a korábban létrehozott értékeket adja meg.

A webalkalmazás végpontjának az /api/updates/ utótagot kell tartalmaznia.

# 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

Tekints meg újra a webalkalmazást, ahol láthatja, hogy az fogadta az előfizetés érvényesítési eseményét. Az eseményadatok kibontásához kattintson a szem ikonra. Az Event Grid elküldi az érvényesítési eseményt, így a végpont megerősítheti, hogy eseményadatokat akar kapni. A webalkalmazás az előfizetés érvényesítéséhez szükséges kódot tartalmaz.

Képernyőkép az Event Grid-előfizetés érvényesítési eseményéről az előre elkészített webalkalmazásban.

Szabályzat-hozzárendelés létrehozása

Ebben a rövid útmutatóban létrehoz egy szabályzat-hozzárendelést, és hozzárendeli a Kötelező címke hozzárendelését az erőforráscsoportok definíciójára. Ez a szabályzatdefiníció azonosítja azokat az erőforráscsoportokat, amelyeknél hiányzik a szabályzat-hozzárendelés során konfigurált címke.

Futtassa a következő parancsot az Event Grid-témakör tárolásához létrehozott erőforráscsoportra hatókörrel rendelkező szabályzat-hozzárendelés létrehozásához:

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

Az előző parancs a következő információkat használja:

  • Name – A hozzárendelés tényleges neve. Ebben a példában kötelezőtags-eseményeket használtunk.
  • DisplayName – A szabályzat-hozzárendelés megjelenített neve. Ebben az esetben kötelező címkét használ az RG-n.
  • Hatókör – A hatókör határozza meg, hogy a szabályzat-hozzárendelés milyen erőforrások vagy erőforráscsoportok esetében lesz kényszerítve. Ez egyetlen előfizetéstől teljes erőforráscsoportokig terjedhet. Győződjön meg arról, hogy a <scope> helyett az erőforráscsoport neve szerepel. Az erőforráscsoport-hatókör formátuma a következő /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>: .
  • Szabályzat – A hozzárendelés létrehozásához használt szabályzatdefiníció azonosítója. Ebben az esetben ez a szabályzatdefiníció azonosítója, amely megköveteli az erőforráscsoportok címkéjét. A szabályzatdefiníció azonosítójának lekéréséhez futtassa ezt a parancsot: az policy definition list --query "[?displayName=='Require a tag on resource groups']"

A szabályzat-hozzárendelés létrehozása után várja meg, amíg megjelenik egy Microsoft.PolicyInsights.PolicyStateCreated eseményértesítés a webalkalmazásban. A létrehozott erőforráscsoport nem data.complianceState megfelelő értéket jelenít meg a kezdéshez.

Képernyőkép az előre elkészített webalkalmazás erőforráscsoportjának Event Grid-előfizetés házirendállapot-létrehozási eseményéről.

Feljegyzés

Ha az erőforráscsoport más szabályzat-hozzárendeléseket örököl az előfizetésből vagy a felügyeleti csoport hierarchiájából, az egyes események is megjelennek. Győződjön meg arról, hogy az esemény a hozzárendeléshez tartozik ebben az oktatóanyagban a data.policyDefinitionId tulajdonság kiértékelésével.

Változás aktiválása az erőforráscsoporton

Az erőforráscsoport megfelelővé tétele érdekében szükség van egy EventTest nevű címkére. Adja hozzá a címkét az erőforráscsoporthoz az alábbi paranccsal az előfizetés azonosítójára és <resourceGroup> az erőforráscsoport nevére cserélve<subscriptionId>:

# 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

Miután hozzáadta a szükséges címkét az erőforráscsoporthoz, várjon, amíg megjelenik egy Microsoft.PolicyInsights.PolicyStateChanged eseményértesítés a webalkalmazásban. Bontsa ki az eseményt, és az data.complianceState érték most a Megfelelő értéket jeleníti meg.

Hibaelhárítás

Ha az alábbihoz hasonló hibaüzenet jelenik meg, győződjön meg arról, hogy mindkét erőforrás-szolgáltatót regisztrálta azon a hatókörön, amelyre feliratkozik (felügyeleti csoport vagy előfizetés):

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

Az erőforrások eltávolítása

Ha továbbra is használni szeretné ezt a webalkalmazást és az Azure Policy-esemény-előfizetést, ne törölje a cikkben létrehozott erőforrásokat. Ha nem tervezi a folytatást, az alábbi paranccsal törölheti a cikkben létrehozott erőforrásokat.

A <resource_group_name> elemet cserélje le a fent létrehozott erőforráscsoportra.

az group delete --name <resource_group_name>

Következő lépések

Most, hogy már tudja, hogyan hozhat létre témaköröket és esemény-előfizetéseket az Azure Policyhoz, tudjon meg többet a szabályzatállapot-változási eseményekről, valamint arról, hogy az Event Grid milyen segítséget nyújthat: