Obter alterações de recursoGet resource changes

Os recursos são alterados com o uso diário, reconfiguração e até mesmo a reimplantação.Resources get changed through the course of daily use, reconfiguration, and even redeployment. A alteração pode vir de um indivíduo ou de um processo automatizado.Change can come from an individual or by an automated process. A maioria das alterações é por design, mas, às vezes, não é.Most change is by design, but sometimes it isn't. Com os últimos 14 dias do histórico de alterações, o Azure Resource Graph permite que você:With the last 14 days of change history, Azure Resource Graph enables you to:

  • Localize quando foram detectadas alterações em uma propriedade Azure Resource ManagerFind when changes were detected on an Azure Resource Manager property
  • Para cada alteração de recurso, consulte detalhes de alteração de propriedadeFor each resource change, see property change details
  • Veja uma comparação completa do recurso antes e depois da alteração detectadaSee a full comparison of the resource before and after the detected change

A detecção de alterações e os detalhes são importantes para os seguintes cenários de exemplo:Change detection and details are valuable for the following example scenarios:

  • Durante o gerenciamento de incidentes para entender alterações relacionadas potencialmente.During incident management to understand potentially related changes. Consulte eventos de alteração durante uma janela de tempo específica e avalie os detalhes da alteração.Query for change events during a specific window of time and evaluate the change details.
  • Manter um banco de dados de gerenciamento de configuração, conhecido como CMDB, atualizado.Keeping a Configuration Management Database, known as a CMDB, up-to-date. Em vez de atualizar todos os recursos e seus conjuntos de propriedades completos em uma frequência agendada, só obtenha o que foi alterado.Instead of refreshing all resources and their full property sets on a scheduled frequency, only get what changed.
  • Entender quais outras propriedades podem ter sido alteradas quando um estado de conformidade de um recurso mudou.Understanding what other properties may have been changed when a resource changed compliance state. A avaliação dessas propriedades adicionais pode fornecer informações sobre outras propriedades que talvez precisem ser gerenciadas por meio de uma definição de Azure Policy.Evaluation of these additional properties can provide insights into other properties that may need to be managed via an Azure Policy definition.

Este artigo mostra como reunir essas informações por meio do SDK do Resource Graph.This article shows how to gather this information through Resource Graph's SDK. Para ver essas informações na portal do Azure, consulte histórico de alterações de Azure Policy ou o histórico de alterações do log de atividades do Azure.To see this information in the Azure portal, see Azure Policy's Change history or Azure Activity Log Change history. Para obter detalhes sobre as alterações em seus aplicativos da camada de infraestrutura até a implantação do aplicativo, consulte Usar a Análise de Alterações de Aplicativo (versão prévia) no Azure Monitor.For details about changes to your applications from the infrastructure layer all the way to application deployment, see Use Application Change Analysis (preview) in Azure Monitor.

Observação

Os detalhes de alteração no Resource Graph para as propriedades do Resource Manager.Change details in Resource Graph are for Resource Manager properties. Para controlar as alterações dentro de uma máquina virtual, consulte Controlar alterações da Automação do Azure ou Configuração de convidado para VMs de Azure Policy.For tracking changes inside a virtual machine, see Azure Automation's Change tracking or Azure Policy's Guest Configuration for VMs.

Importante

O histórico de alterações no Azure Resource Graph está em visualização pública.Change history in Azure Resource Graph is in Public Preview.

Localizar eventos de alteração detectados e exibir detalhes de alteraçãoFind detected change events and view change details

A primeira etapa para ver o que mudou em um recurso é localizar os eventos de alteração relacionados a esse recurso dentro de uma janela de tempo.The first step in seeing what changed on a resource is to find the change events related to that resource within a window of time. Cada evento de alteração também inclui detalhes sobre o que mudou no recurso.Each change event also includes details about what changed on the resource. Essa etapa é feita por meio do ponto de extremidade REST resourceChanges.This step is done through the resourceChanges REST endpoint.

O ponto de extremidade resourceChanges aceita os seguintes parâmetros no corpo da solicitação:The resourceChanges endpoint accepts the following parameters in the request body:

  • resourceId [required]: O recurso do Azure no qual procurar alterações.resourceId [required]: The Azure resource to look for changes on.
  • interval [required]: Uma propriedade com datas de início e término para quando verificar se há um evento de alteração usando o fuso horário Zulu (Z) .interval [required]: A property with start and end dates for when to check for a change event using the Zulu Time Zone (Z).
  • fetchPropertyChanges (optional): Uma propriedade booliana que define se o objeto de resposta inclui alterações de propriedade.fetchPropertyChanges (optional): A boolean property that sets if the response object includes property changes.

Exemplo de corpo de solicitação:Example request body:

{
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/MyResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
    "interval": {
        "start": "2019-09-28T00:00:00.000Z",
        "end": "2019-09-29T00:00:00.000Z"
    },
    "fetchPropertyChanges": true
}

Com o corpo da solicitação acima, o URI da API REST para resourceChanges é:With the above request body, the REST API URI for resourceChanges is:

POST https://management.azure.com/providers/Microsoft.ResourceGraph/resourceChanges?api-version=2018-09-01-preview

A resposta é semelhante a este exemplo:The response looks similar to this example:

{
    "changes": [
        {
            "changeId": "{\"beforeId\":\"3262e382-9f73-4866-a2e9-9d9dbee6a796\",\"beforeTime\":\"2019-09-28T00:45:35.012Z\",\"afterId\":\"6178968e-981e-4dac-ac37-340ee73eb577\",\"afterTime\":\"2019-09-28T00:52:53.371Z\"}",
            "beforeSnapshot": {
                "snapshotId": "3262e382-9f73-4866-a2e9-9d9dbee6a796",
                "timestamp": "2019-09-28T00:45:35.012Z"
            },
            "afterSnapshot": {
                "snapshotId": "6178968e-981e-4dac-ac37-340ee73eb577",
                "timestamp": "2019-09-28T00:52:53.371Z"
            },
            "changeType": "Create"
        },
        {
            "changeId": "{\"beforeId\":\"a00f5dac-86a1-4d86-a1c5-a9f7c8147b7c\",\"beforeTime\":\"2019-09-28T00:43:38.366Z\",\"afterId\":\"3262e382-9f73-4866-a2e9-9d9dbee6a796\",\"afterTime\":\"2019-09-28T00:45:35.012Z\"}",
            "beforeSnapshot": {
                "snapshotId": "a00f5dac-86a1-4d86-a1c5-a9f7c8147b7c",
                "timestamp": "2019-09-28T00:43:38.366Z"
            },
            "afterSnapshot": {
                "snapshotId": "3262e382-9f73-4866-a2e9-9d9dbee6a796",
                "timestamp": "2019-09-28T00:45:35.012Z"
            },
            "changeType": "Delete"
        },
        {
            "changeId": "{\"beforeId\":\"b37a90d1-7ebf-41cd-8766-eb95e7ee4f1c\",\"beforeTime\":\"2019-09-28T00:43:15.518Z\",\"afterId\":\"a00f5dac-86a1-4d86-a1c5-a9f7c8147b7c\",\"afterTime\":\"2019-09-28T00:43:38.366Z\"}",
            "beforeSnapshot": {
                "snapshotId": "b37a90d1-7ebf-41cd-8766-eb95e7ee4f1c",
                "timestamp": "2019-09-28T00:43:15.518Z"
            },
            "afterSnapshot": {
                "snapshotId": "a00f5dac-86a1-4d86-a1c5-a9f7c8147b7c",
                "timestamp": "2019-09-28T00:43:38.366Z"
            },
            "propertyChanges": [
                {
                    "propertyName": "tags.org",
                    "afterValue": "compute",
                    "changeCategory": "User",
                    "changeType": "Insert"
                },
                {
                    "propertyName": "tags.team",
                    "afterValue": "ARG",
                    "changeCategory": "User",
                    "changeType": "Insert"
                }
            ],
            "changeType": "Update"
        },
        {
            "changeId": "{\"beforeId\":\"19d12ab1-6ac6-4cd7-a2fe-d453a8e5b268\",\"beforeTime\":\"2019-09-28T00:42:46.839Z\",\"afterId\":\"b37a90d1-7ebf-41cd-8766-eb95e7ee4f1c\",\"afterTime\":\"2019-09-28T00:43:15.518Z\"}",
            "beforeSnapshot": {
                "snapshotId": "19d12ab1-6ac6-4cd7-a2fe-d453a8e5b268",
                "timestamp": "2019-09-28T00:42:46.839Z"
            },
            "afterSnapshot": {
                "snapshotId": "b37a90d1-7ebf-41cd-8766-eb95e7ee4f1c",
                "timestamp": "2019-09-28T00:43:15.518Z"
            },
            "propertyChanges": [{
                "propertyName": "tags.cgtest",
                "afterValue": "hello",
                "changeCategory": "User",
                "changeType": "Insert"
            }],
            "changeType": "Update"
        }
    ]
}

Cada evento de alteração detectado para o resourceId tem as seguintes propriedades:Each detected change event for the resourceId has the following properties:

  • alterid - Esse valor é exclusivo para esse recurso.changeId - This value is unique to that resource. Embora a cadeia de caracteres changeId possa, às vezes, conter outras propriedades, só é garantido que seja exclusivo.While the changeId string may sometimes contain other properties, it's only guaranteed to be unique.
  • beforeSnapshot - Contém o snapshotid e carimbo de data/hora do instantâneo de recursos que foi realizado antes de uma alteração ser detectada.beforeSnapshot - Contains the snapshotId and timestamp of the resource snapshot that was taken before a change was detected.
  • beforeSnapshot - Contém o snapshotid e carimbo de data/hora do instantâneo de recursos que foi feito antes de uma alteração ser detectada.afterSnapshot - Contains the snapshotId and timestamp of the resource snapshot that was taken after a change was detected.
  • ChangeType-descreve o tipo de alteração detectada para todo o registro de alteração entre o beforeSnapshot e afterSnapshot.changeType - Describes the type of change detected for the entire change record between the beforeSnapshot and afterSnapshot. Os valores são: Criar, Atualizar e Excluir.Values are: Create, Update, and Delete. A matriz de propriedades propertyChanges só é incluída quando ChangeType é Update.The propertyChanges property array is only included when changeType is Update.
  • propertyChanges - Essa matriz de propriedades detalha todas as propriedades de recurso que foram atualizadas entre beforeSnapshot e afterSnapshot:propertyChanges - This array of properties details all of the resource properties that were updated between the beforeSnapshot and the afterSnapshot:
    • propertyName - O nome da propriedade de recurso que foi alterada.propertyName - The name of the resource property that was altered.
    • changeCategory - Descreve o que fez a alteração.changeCategory - Describes what made the change. Os valores são: Sistema e Usuário.Values are: System and User.
    • ChangeType - Descreve o tipo de alteração detectada para a propriedade de recurso individual.changeType - Describes the type of change detected for the individual resource property. Os valores são: Inserir, Atualizar, Remover.Values are: Insert, Update, Remove.
    • beforevalue - O valor da propriedade de recurso em beforeSnapshot.beforeValue - The value of the resource property in the beforeSnapshot. Não é exibido quando ChangeType é Insert.Isn't displayed when changeType is Insert.
    • afterValue - O valor da propriedade de recurso em afterSnapshot.afterValue - The value of the resource property in the afterSnapshot. Não é exibido quando changeType é Remove.Isn't displayed when changeType is Remove.

Comparar alterações de recursoCompare resource changes

Com o alterid do ponto de extremidade do resourceChanges, o ponto de extremidade REST do resourceChangeDetails é usado para obter os instantâneos anterior e posterior do recurso que foi alterado.With the changeId from the resourceChanges endpoint, the resourceChangeDetails REST endpoint is then used to get the before and after snapshots of the resource that was changed.

O ponto de extremidade do resourceChangeDetails requer dois parâmetros no corpo da solicitação:The resourceChangeDetails endpoint requires two parameters in the request body:

  • resourceId: O recurso do Azure no qual comparar alterações.resourceId: The Azure resource to compare changes on.
  • changeId: O evento de alteração exclusivo para o resourceId coletado de resourceChanges.changeId: The unique change event for the resourceId gathered from resourceChanges.

Exemplo de corpo de solicitação:Example request body:

{
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/MyResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
    "changeId": "{\"beforeId\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"beforeTime\":'2019-05-09T00:00:00.000Z\",\"afterId\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"afterTime\":'2019-05-10T00:00:00.000Z\"}"
}

Com o corpo da solicitação acima, o URI da API REST para resourceChangesDetails é:With the above request body, the REST API URI for resourceChangeDetails is:

POST https://management.azure.com/providers/Microsoft.ResourceGraph/resourceChangeDetails?api-version=2018-09-01-preview

A resposta é semelhante a este exemplo:The response looks similar to this example:

{
    "changeId": "{\"beforeId\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"beforeTime\":'2019-05-09T00:00:00.000Z\",\"afterId\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"beforeTime\":'2019-05-10T00:00:00.000Z\"}",
    "beforeSnapshot": {
        "timestamp": "2019-03-29T01:32:05.993Z",
        "content": {
            "sku": {
                "name": "Standard_LRS",
                "tier": "Standard"
            },
            "kind": "Storage",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/MyResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
            "name": "mystorageaccount",
            "type": "Microsoft.Storage/storageAccounts",
            "location": "westus",
            "tags": {},
            "properties": {
                "networkAcls": {
                    "bypass": "AzureServices",
                    "virtualNetworkRules": [],
                    "ipRules": [],
                    "defaultAction": "Allow"
                },
                "supportsHttpsTrafficOnly": false,
                "encryption": {
                    "services": {
                        "file": {
                            "enabled": true,
                            "lastEnabledTime": "2018-07-27T18:37:21.8333895Z"
                        },
                        "blob": {
                            "enabled": true,
                            "lastEnabledTime": "2018-07-27T18:37:21.8333895Z"
                        }
                    },
                    "keySource": "Microsoft.Storage"
                },
                "provisioningState": "Succeeded",
                "creationTime": "2018-07-27T18:37:21.7708872Z",
                "primaryEndpoints": {
                    "blob": "https://mystorageaccount.blob.core.windows.net/",
                    "queue": "https://mystorageaccount.queue.core.windows.net/",
                    "table": "https://mystorageaccount.table.core.windows.net/",
                    "file": "https://mystorageaccount.file.core.windows.net/"
                },
                "primaryLocation": "westus",
                "statusOfPrimary": "available"
            }
        }
    },
    "afterSnapshot": {
        "timestamp": "2019-03-29T01:54:24.42Z",
        "content": {
            "sku": {
                "name": "Standard_LRS",
                "tier": "Standard"
            },
            "kind": "Storage",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/MyResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
            "name": "mystorageaccount",
            "type": "Microsoft.Storage/storageAccounts",
            "location": "westus",
            "tags": {},
            "properties": {
                "networkAcls": {
                    "bypass": "AzureServices",
                    "virtualNetworkRules": [],
                    "ipRules": [],
                    "defaultAction": "Allow"
                },
                "supportsHttpsTrafficOnly": true,
                "encryption": {
                    "services": {
                        "file": {
                            "enabled": true,
                            "lastEnabledTime": "2018-07-27T18:37:21.8333895Z"
                        },
                        "blob": {
                            "enabled": true,
                            "lastEnabledTime": "2018-07-27T18:37:21.8333895Z"
                        }
                    },
                    "keySource": "Microsoft.Storage"
                },
                "provisioningState": "Succeeded",
                "creationTime": "2018-07-27T18:37:21.7708872Z",
                "primaryEndpoints": {
                    "blob": "https://mystorageaccount.blob.core.windows.net/",
                    "queue": "https://mystorageaccount.queue.core.windows.net/",
                    "table": "https://mystorageaccount.table.core.windows.net/",
                    "file": "https://mystorageaccount.file.core.windows.net/"
                },
                "primaryLocation": "westus",
                "statusOfPrimary": "available"
            }
        }
    }
}

beforeSnapshot e afterSnapshot cada uma delas fornecem o tempo que o instantâneo foi tirado e as propriedades nesse momento.beforeSnapshot and afterSnapshot each give the time the snapshot was taken and the properties at that time. A alteração ocorreu em algum ponto entre esses instantâneos.The change happened at some point between these snapshots. Observando o exemplo anterior, podemos ver que a propriedade alterada foi supportsHttpsTrafficOnly.Looking at the previous example, we can see that the property that changed was supportsHttpsTrafficOnly.

Para comparar os resultados, use a propriedade changes no resourceChanges ou avalie a parte content de cada instantâneo no resourceChangeDetails para determinar a diferença.To compare the results, either use the changes property in resourceChanges or evaluate the content portion of each snapshot in resourceChangeDetails to determine the difference. Se você comparar os instantâneos, o carimbo de data/hora sempre será mostrado como uma diferença, apesar de ser esperado.If you compare the snapshots, the timestamp always shows as a difference despite being expected.

Próximas etapasNext steps