Quero começar o post de hoje com um desafio, a tarefa é a seguinte: recuperar a lista de recursos criados em uma Assinatura do Azure nos últimos 7 dias.

Como você implementaria?
Deixa nos comentários qual foi a primeira solução que veio na sua cabeça.

Azure Resource Graph

Se sua resposta envolve utilizar o Azure Resource Graph para buscar uma lista de recursos ordenada pela data de criação, lamento informar, mas, assim como eu, você vai perceber que a tarefa é um pouco mais complicada do que parece.

O problema reside em não existir uma padronização nas propriedades dos tipos de recurso no Azure, ao que parece cada equipe define as propriedades e apensar da documentação ser ótima com relação a isso é complicado, para não dizer impossível, de se conseguir uma lista apurada e mantê-la atualizada.

Executando uma query simples nos recursos da minha assinatura (e olha que nem tenho tantos tipos criados assim) consegui uma lista de ~12 propriedades diferentes.

resources
| where properties contains("time") or properties contains("date")

Alguns dos diferentes tipos de nome:

  • createdTime
  • createdDate
  • creationTime
  • timeCreated
  • timestamp
  • issueDate
  • e outras

Após descobrir isso, ainda existem recursos que não possuem nenhum tipo óbvio de propriedade de criação.
Agora vem a pergunta: como resolver o problema?

Temos duas possibilidades, a primeira seria cria uma Azure Policy que obrigaria todos os recursos a ter uma tag com o nome dataCriacao e o valor seria a data corrente, mas ainda teríamos o problema de não conseguir retornar os recursos já criados na query.

A solução é usar outra tabela no próprio Azure Resource Graph a tabela resourcechanges, responsável por manter uma lista de atualização nos últimos 14 dias de todas as mudanças do Azure.

Get resource changes - Azure Resource Graph
Get resource configuration changes at scale

Agora que temos as informações que precisamos, eu montei a query final do seguinte modo:

resourcechanges
| extend targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType), changeTime = todatetime(properties.changeAttributes.timestamp)
| where changeTime > ago(7d) and changeType == "Create"
| order by changeTime desc 
| project  resourceId=targetResourceId, resourceType=properties.targetResourceType, location, resourceGroup, changeTime

Prontinho, agora conseguimos capturar os recursos criados e podemos fazer as análises necessárias.

Me conta aí nos comentários qual foi a solução que você pensou
[]s e até a próxima.

💡
Podemos te ajudar com uma revisão 100% gratuita do seu ambiente cloud.
Share this post