回應 Azure 原則狀態變更事件
Azure 原則事件讓應用程式可回應狀態變更。 此整合不必使用複雜的程式碼,或昂貴且效率不佳的輪詢服務即可完成。 而且,事件是透過 Azure 事件方格推送給訂閱者,例如 Azure Functions、Azure Logic Apps,甚至是您自訂的 HTTP 接聽程式。 更重要的是,您只需按使用量付費。
Azure 原則事件會傳送至 Azure 事件方格,並透過豐富的重試原則和無效傳遞,提供應用程式可靠的傳遞服務。 事件方格負責透過事件方格訂用帳戶,進行適當的事件路由傳送、篩選及多點傳送至目的地。 如需了解詳細資訊,請參閱 Event Grid 訊息傳遞及重試。
事件方格優點
事件方格對 Azure 生態系統中的客戶和服務有一些好處:
- 自動化:為了隨時掌握您的原則環境,事件方格會提供自動化機制,根據合規性狀態產生警示及觸發工作。
- 持久傳遞:為了讓服務和使用者應用程式能即時回應原則合規性事件,事件方格會設法提供最低延遲的原則事件。 如果訂閱者的端點無法確認收到事件或未收到事件,事件方格會根據預先決定的重試排程和重試原則重試事件的傳輸。
- 自訂事件產生者:事件方格的事件產生者和取用者不需要是 Azure 或 Microsoft 服務。 外部應用程式可以接收警示、顯示補救工作的建立,或收集回應狀態變更的人員訊息。 如需完整教學課程,請參閱使用 Azure CLI 路由傳送原則狀態變更事件至事件方格。
使用事件方格時有兩個主要實體:
- 事件:這些事件可以是使用者可能想要回應 Azure 資源的任何事件。 例如,如果已針對虛擬機或記憶體帳戶等資源建立、變更和刪除原則合規性狀態。
- 事件方格訂用帳戶:這些事件訂用帳戶是使用者設定的實體,會將適當的事件集從發行者導向訂閱者。 事件訂用帳戶可以根據事件源起的資源路徑和事件類型來篩選事件。 此外,事件訂用帳戶也可以依 Azure 訂用帳戶與管理群組之間的範圍進行篩選。
常見的 Azure 原則事件案例是追蹤原則評估期間的資源合規性狀態何時變更。 事件型架構是一種有效率的方式,可對這些變更做出反應,並協助對合規性狀態變更進行事件型反應。
另一個案例是自動觸發補救工作,而不需在原則頁面上手動選取 [建立補救工作 ]。 事件方格會檢查目前不符合規範的合規性狀態和資源是否可補救。 深入了解補救結構。 補救需要受控識別,且原則必須有效modify
deployIfNotExists
。 深入了解效果類型。
事件方格作為稽核系統有助於儲存狀態變更,並瞭解一段時間內不符合規範的原因。 事件方格的案例是無窮無盡的,而且根據動機,事件方格是可設定的。
可用的事件類型
Azure 原則會發出下列事件類型:
事件類型 | 描述 |
---|---|
Microsoft.PolicyInsights.PolicyStateCreated | 建立原則合規性狀態時引發。 |
Microsoft.PolicyInsights.PolicyStateChanged | 變更原則合規性狀態時引發。 |
Microsoft.PolicyInsights.PolicyStateDeleted | 刪除原則合規性狀態時引發。 |
事件屬性
事件具有下列的最高層級資料:
屬性 | 類型 | 描述 |
---|---|---|
topic |
string | 事件來源的完整資源路徑。 此欄位無法寫入。 事件方格提供此值。 |
subject |
string | 合規性狀態變更的資源完整識別碼,包括資源名稱和資源類型。 使用格式、/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName> |
eventType |
string | 此事件來源已註冊的事件類型之一。 |
eventTime |
string | 事件產生的時間,以提供者的 UTC 時間為準。 |
id |
string | 事件的唯一識別碼。 |
data |
object | Azure 原則事件資料。 |
dataVersion |
string | 資料物件的結構描述版本。 發行者會定義結構描述版本。 |
metadataVersion |
string | 事件中繼資料的結構描述版本。 「事件方格」會定義最上層屬性的結構描述。 事件方格提供此值。 |
資料物件具有下列屬性:
屬性 | 類型 | 描述 |
---|---|---|
timestamp |
string | Azure 原則掃描資源的時間 (國際標準時間)。 若要排序事件,請使用此屬性,而不是最上層 eventTime 或 time 屬性。 |
policyAssignmentId |
string | 原則指派的資源識別碼。 |
policyDefinitionId |
string | 原則定義的資源識別碼。 |
policyDefinitionReferenceId |
string | 如果原則指派適用於方案,參考識別碼即適用於方案定義中的原則定義。 可以是空的。 |
complianceState |
string | 原則指派相關的資源合規性狀態。 |
subscriptionId |
string | 資源的訂用帳戶識別碼。 |
complianceReasonCode |
string | 合規性原因代碼。 可以是空的。 |
事件範例
下列範例顯示限定在訂用帳戶層級的原則狀態建立事件的結構描述:
[{
"id": "5829794FCB5075FCF585476619577B5A5A30E52C84842CBD4E2AD73996714C4C",
"topic": "/subscriptions/<SubscriptionID>",
"subject": "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>",
"data": {
"timestamp": "2021-03-27T18:37:42.4496956Z",
"policyAssignmentId": "<policy-assignment-scope>/providers/microsoft.authorization/policyassignments/<policy-assignment-name>",
"policyDefinitionId": "<policy-definition-scope>/providers/microsoft.authorization/policydefinitions/<policy-definition-name>",
"policyDefinitionReferenceId": "",
"complianceState": "NonCompliant",
"subscriptionId": "<subscription-id>",
"complianceReasonCode": ""
},
"eventType": "Microsoft.PolicyInsights.PolicyStateCreated",
"eventTime": "2021-03-27T18:37:42.5241536Z",
"dataVersion": "1",
"metadataVersion": "1"
}]
限定在訂用帳戶層級的原則狀態變更事件的結構描述架構會類似:
[{
"id": "5829794FCB5075FCF585476619577B5A5A30E52C84842CBD4E2AD73996714C4C",
"topic": "/subscriptions/<SubscriptionID>",
"subject": "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>",
"data": {
"timestamp": "2021-03-27T18:37:42.4496956Z",
"policyAssignmentId": "<policy-assignment-scope>/providers/microsoft.authorization/policyassignments/<policy-assignment-name>",
"policyDefinitionId": "<policy-definition-scope>/providers/microsoft.authorization/policydefinitions/<policy-definition-name>",
"policyDefinitionReferenceId": "",
"complianceState": "NonCompliant",
"subscriptionId": "<subscription-id>",
"complianceReasonCode": ""
},
"eventType": "Microsoft.PolicyInsights.PolicyStateChanged",
"eventTime": "2021-03-27T18:37:42.5241536Z",
"dataVersion": "1",
"metadataVersion": "1"
}]
下列範例顯示限定在管理群組層級的原則狀態建立事件的結構描述:
[{
"id": "5829794FCB5075FCF585476619577B5A5A30E52C84842CBD4E2AD73996714C4C",
"topic": "/tenants/<tenantId>/providers/Microsoft.Management/managementGroups/<managementGroupId>",
"subject": "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>",
"data": {
"timestamp": "2021-03-27T18:37:42.4496956Z",
"policyAssignmentId": "<policy-assignment-scope>/providers/microsoft.authorization/policyassignments/<policy-assignment-name>",
"policyDefinitionId": "<policy-definition-scope>/providers/microsoft.authorization/policydefinitions/<policy-definition-name>",
"policyDefinitionReferenceId": "",
"complianceState": "NonCompliant",
"subscriptionId": "<subscription-id>",
"complianceReasonCode": ""
},
"eventType": "Microsoft.PolicyInsights.PolicyStateCreated",
"eventTime": "2021-03-27T18:37:42.5241536Z",
"dataVersion": "1",
"metadataVersion": "1"
}]
限定在管理群組層級的原則狀態變更事件的結構描述架構會類似:
[{
"id": "5829794FCB5075FCF585476619577B5A5A30E52C84842CBD4E2AD73996714C4C",
"topic": "/tenants/<tenantId>/providers/Microsoft.Management/managementGroups/<managementGroupId>",
"subject": "/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroup>/providers/<ProviderNamespace>/<ResourceType>/<ResourceName>",
"data": {
"timestamp": "2021-03-27T18:37:42.4496956Z",
"policyAssignmentId": "<policy-assignment-scope>/providers/microsoft.authorization/policyassignments/<policy-assignment-name>",
"policyDefinitionId": "<policy-definition-scope>/providers/microsoft.authorization/policydefinitions/<policy-definition-name>",
"policyDefinitionReferenceId": "",
"complianceState": "NonCompliant",
"subscriptionId": "<subscription-id>",
"complianceReasonCode": ""
},
"eventType": "Microsoft.PolicyInsights.PolicyStateChanged",
"eventTime": "2021-03-27T18:37:42.5241536Z",
"dataVersion": "1",
"metadataVersion": "1"
}]
消費事件做法
處理 Azure 原則事件的應用程式應遵循下列建議的做法:
- 為了路由傳送事件至相同的事件處理常式,您可以設定多個訂閱,所以請勿假設事件來自特定來源。 再者,請檢查訊息的主題,確保原則指派、原則定義和資源狀態變更事件適用的項目。
- 請檢查
eventType
,並請勿假設您收到的所有事件都是您預期的類型。 - 判斷 Azure 原則中事件的順序時,請使用
data.timestamp
,而不是最上層eventTime
或time
屬性。 - 使用 [主旨] 欄位存取原則狀態變更的資源。
下一步
深入了解事件方格,並嘗試使用 Azure 原則狀態變更事件: