Exibir as alterações do RBAC do Azure nos logs de atividades

Às vezes, você precisa de informações sobre alterações do RBAC (controle de acesso baseado em função) do Azure para, por exemplo, fins de auditoria ou solução de problemas. Sempre que alguém altera as atribuições ou definições de função das suas assinaturas, tudo é registrado no Log de Atividades do Azure. Você pode exibir os logs de atividade para ver todas as alterações feitas nos últimos 90 dias no RBAC.

Operações registradas em log

Aqui estão as operações relacionadas ao RBAC do Azure que são registradas no Log de Atividades:

  • Criar atribuição de função
  • Excluir atribuição de função
  • Criar ou atualizar definição de função personalizada
  • Excluir definição de função personalizada

Portal do Azure

A maneira mais fácil para começar é exibir os logs de atividades com o portal do Azure. A captura de tela abaixo mostra um exemplo de operações de atribuição de função no Log de Atividades. Também há uma opção para baixar os logs como um arquivo CSV.

Activity logs using the portal - screenshot

Para obter mais informações, clique em uma entrada para abrir o painel Resumo. Clique na guia JSON para acessar um log detalhado.

Activity logs using the portal with summary pane open - screenshot

O log de atividades no portal tem vários filtros. Os do RBAC são os seguintes:

Filter Valor
Categoria de evento
  • Administrativo
Operação
  • Criar atribuição de função
  • Excluir atribuição de função
  • Criar ou atualizar definição de função personalizada
  • Excluir definição de função personalizada

Para saber mais sobre os logs de atividade, veja Log de atividade do Azure.

Interpretada uma entrada de log

A saída de log da guia JSON,do Azure PowerShell ou da CLI do Azure pode incluir muitas informações. Abaixo estão algumas das principais propriedades que você deve procurar ao interpretar uma entrada de log. Para descobrir maneiras de filtrar a saída de log com o Azure PowerShell ou a CLI do Azure, confira as seções mais abaixo.

Propriedade Valores de exemplo Descrição
authorization:action Microsoft.Authorization/roleAssignments/write Criar atribuição de função
Microsoft.Authorization/roleAssignments/delete Excluir atribuição de função
Microsoft.Authorization/roleDefinitions/write Criar ou atualizar definição de função
Microsoft.Authorization/roleDefinitions/delete Excluir definição de função
authorization:scope /subscriptions/{subscriptionId}
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}
Escopo da ação
chamador admin@example.com
{objectId}
Quem iniciou a operação
eventTimestamp 2021-03-01T22:07:41.126243Z Hora em que a ação ocorreu
status:value Iniciado
Com sucesso
Com falha
Status da ação

PowerShell do Azure

Para exibir logs de atividade com o Azure PowerShell, use o comando Get-AzLog.

Esse comando abaixo lista todas as alterações de atribuição de função em uma assinatura nos os últimos sete dias:

Get-AzLog -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/roleAssignments/*'}

Esse comando abaixo lista todas as definição de atribuição de função em um grupo de recursos nos os últimos sete dias:

Get-AzLog -ResourceGroupName pharma-sales -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/roleDefinitions/*'}

Filtrar saída de log

A saída de log pode incluir muitas informações. Este comando, além de filtra a saída, lista todas as alterações de atribuição e definição de função feitas nos últimos sete dias em uma assinatura:

Get-AzLog -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/role*'} | Format-List Caller,EventTimestamp,{$_.Authorization.Action},Properties

Veja o seguinte exemplo da saída de log filtrada ao criar uma atribuição de função:

Caller                  : admin@example.com
EventTimestamp          : 3/1/2021 10:07:42 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties              :
                          statusCode     : Created
                          serviceRequestId: {serviceRequestId}
                          eventCategory  : Administrative
                          entity         : /subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}
                          message        : Microsoft.Authorization/roleAssignments/write
                          hierarchy      : {tenantId}/{subscriptionId}

Caller                  : admin@example.com
EventTimestamp          : 3/1/2021 10:07:41 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties              :
                          requestbody    : {"Id":"{roleAssignmentId}","Properties":{"PrincipalId":"{principalId}","PrincipalType":"User","RoleDefinitionId":"/providers/Microsoft.Authorization/roleDefinitions/fa23ad8b-c56e-40d8-ac0c-ce449e1d2c64","Scope":"/subscriptions/
                          {subscriptionId}/resourceGroups/example-group"}}
                          eventCategory  : Administrative
                          entity         : /subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}
                          message        : Microsoft.Authorization/roleAssignments/write
                          hierarchy      : {tenantId}/{subscriptionId}

Se você estiver usando uma entidade de serviço para criar atribuições de função, a propriedade do chamador será uma ID de objeto da entidade de serviço. Você pode usar Get-AzADServicePrincipal para obter informações sobre a entidade de serviço.

Caller                  : {objectId}
EventTimestamp          : 3/1/2021 9:43:08 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties              : 
                          statusCode     : Created
                          serviceRequestId: {serviceRequestId}
                          eventCategory  : Administrative

CLI do Azure

Para exibir logs de atividade com a CLI do Azure, use o comando lista de log de atividades do monitor az.

Este comando lista os logs de atividades em um grupo de recursos desde o dia primeiro até o dia oito de março:

az monitor activity-log list --resource-group example-group --start-time 2021-03-01 --offset 7d

Este comando lista os logs de atividades no provedor de recursos de autorização desde o dia primeiro até o dia oito de março:

az monitor activity-log list --namespace "Microsoft.Authorization" --start-time 2021-03-01 --offset 7d

Filtrar saída de log

A saída de log pode incluir muitas informações. Este comando, além de filtra a saída, lista todas as alterações de atribuição e definição de função feitas nos próximos sete dias em uma assinatura:

az monitor activity-log list --namespace "Microsoft.Authorization" --start-time 2021-03-01 --offset 7d --query '[].{authorization:authorization, caller:caller, eventTimestamp:eventTimestamp, properties:properties}'

Veja o seguinte exemplo da saída de log filtrada ao criar uma atribuição de função:

[
 {
    "authorization": {
      "action": "Microsoft.Authorization/roleAssignments/write",
      "role": null,
      "scope": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}"
    },
    "caller": "admin@example.com",
    "eventTimestamp": "2021-03-01T22:07:42.456241+00:00",
    "properties": {
      "entity": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
      "eventCategory": "Administrative",
      "hierarchy": "{tenantId}/{subscriptionId}",
      "message": "Microsoft.Authorization/roleAssignments/write",
      "serviceRequestId": "{serviceRequestId}",
      "statusCode": "Created"
    }
  },
  {
    "authorization": {
      "action": "Microsoft.Authorization/roleAssignments/write",
      "role": null,
      "scope": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}"
    },
    "caller": "admin@example.com",
    "eventTimestamp": "2021-03-01T22:07:41.126243+00:00",
    "properties": {
      "entity": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
      "eventCategory": "Administrative",
      "hierarchy": "{tenantId}/{subscriptionId}",
      "message": "Microsoft.Authorization/roleAssignments/write",
      "requestbody": "{\"Id\":\"{roleAssignmentId}\",\"Properties\":{\"PrincipalId\":\"{principalId}\",\"PrincipalType\":\"User\",\"RoleDefinitionId\":\"/providers/Microsoft.Authorization/roleDefinitions/fa23ad8b-c56e-40d8-ac0c-ce449e1d2c64\",\"Scope\":\"/subscriptions/{subscriptionId}/resourceGroups/example-group\"}}"
    }
  }
]

Logs do Azure Monitor

Os logs do Azure Monitor são outra ferramenta que você pode usar para coletar e analisar as alterações do RBAC em todos os recursos do Azure. Os logs do Azure Monitor apresentam os seguintes benefícios:

  • Escrever consultas complexas e lógica
  • Integrar com alertas, Power BI e outras ferramentas
  • Salvar dados por períodos de retenção mais longos
  • Referência cruzada com outros logs, como segurança, máquina virtual e personalizados

Aqui estão as etapas básicas para começar:

  1. Criar um espaço de trabalho do Log Analytics.

  2. Configure a Atividade para o workspace.

  3. Veja os Insights dos logs de atividades. Uma maneira rápida de acessar a página de visão geral do Log de Atividades é clicar na opção Logs.

    Azure Monitor logs option in portal

  4. Use a Análise de logs do Azure Monitor para consultar e exibir os logs, se quiser. Para obter mais informações, consulte Introdução às consultas de log no Azure Monitor.

Aqui está uma consulta que retorna novas atribuições de função organizadas por provedor de recursos de destino:

AzureActivity
| where TimeGenerated > ago(60d) and Authorization contains "Microsoft.Authorization/roleAssignments/write" and ActivityStatus == "Succeeded"
| parse ResourceId with * "/providers/" TargetResourceAuthProvider "/" *
| summarize count(), makeset(Caller) by TargetResourceAuthProvider

Aqui está uma consulta que retorna as alterações de atribuição de função exibidas em um gráfico:

AzureActivity
| where TimeGenerated > ago(60d) and Authorization contains "Microsoft.Authorization/roleAssignments"
| summarize count() by bin(TimeGenerated, 1d), OperationName
| render timechart

Activity logs using the Advanced Analytics portal - screenshot

Próximas etapas