共用方式為


回應 Azure 原則狀態變更事件

Azure 原則事件讓應用程式可回應狀態變更。 此整合不必使用複雜的程式碼,或昂貴且效率不佳的輪詢服務即可完成。 而且,事件是透過 Azure 事件方格推送給訂閱者,例如 Azure FunctionsAzure Logic Apps,甚至是您自訂的 HTTP 接聽程式。 更重要的是,您只需按使用量付費。

Azure 原則事件會傳送至 Azure 事件方格,並透過豐富的重試原則和無效傳遞,提供應用程式可靠的傳遞服務。 事件方格負責透過事件方格訂用帳戶,進行適當的事件路由傳送、篩選及多點傳送至目的地。 如需了解詳細資訊,請參閱 Event Grid 訊息傳遞及重試

注意

評估觸發程序完成資源評估後,即會傳送 Azure 原則狀態變更事件至事件方格。

資源合規性狀態變更的事件方格通知最多可能需要 20 分鐘的時間。

事件方格優點

事件方格對 Azure 生態系統中的客戶和服務有一些好處:

  • 自動化:為了隨時掌握您的原則環境,事件方格會提供自動化機制,根據合規性狀態產生警示及觸發工作。
  • 持久傳遞:為了讓服務和使用者應用程式能即時回應原則合規性事件,事件方格會設法提供最低延遲的原則事件。 如果訂閱者的端點無法確認收到事件或未收到事件,事件方格會根據預先決定的重試排程和重試原則重試事件的傳輸。
  • 自訂事件產生者:事件方格的事件產生者和取用者不需要是 Azure 或 Microsoft 服務。 外部應用程式可以接收警示、顯示補救工作的建立,或收集回應狀態變更的人員訊息。 如需完整教學課程,請參閱使用 Azure CLI 路由傳送原則狀態變更事件至事件方格

使用事件方格時有兩個主要實體:

  • 事件:這些事件可以是使用者可能想要回應的任何事件,包括是否建立、變更及刪除資源 (例如 VM 或儲存體帳戶) 的原則合規性狀態。
  • 事件方格訂用帳戶:這些事件訂用帳戶是使用者設定的實體,會將適當的事件集從發行者導向訂閱者。 事件訂用帳戶可以根據事件源起的資源路徑和事件類型來篩選事件。 此外,事件訂用帳戶也可以依 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 原則掃描資源的時間 (國際標準時間)。 若要排序事件,請使用此屬性,而不是最上層 eventTimetime 屬性。
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,而不是最上層 eventTimetime 屬性。
  • 使用 [主旨] 欄位存取原則狀態變更的資源。

下一步

深入了解事件方格,並嘗試使用 Azure 原則狀態變更事件: