Pular para o conteúdo principal

Fundamentação Teórica: Apply and Manage Tags on Resources


1. Intuição Inicial​

Imagine que você gerencia um datacenter físico com centenas de servidores. Para saber quais servidores pertencem ao time de desenvolvimento, quais são de produção, quais são do projeto de e-commerce e quais do ERP, você coloca etiquetas físicas em cada servidor. Quando chega a conta de energia, você consegue calcular quanto cada projeto consumiu porque sabe exatamente quais servidores pertencem a cada um.

No Azure, tags são exatamente essas etiquetas, mas digitais. Uma tag é um par chave:valor que você associa a qualquer recurso Azure. São metadados que você define livremente para categorizar, organizar e rastrear seus recursos de acordo com as necessidades da sua organização.

Exemplo concreto:

ChaveValor
EnvironmentProduction
CostCenterCC-2045
Projectecommerce-v2
Ownertime-backend
CreatedBypipeline-devops

Com essas cinco tags em cada recurso, você consegue responder perguntas como: "Quanto o projeto ecommerce-v2 gastou esse mês?" ou "Quais recursos pertencem ao time-backend?" ou "Quais recursos de produção não têm dono definido?"


2. Contexto​

Onde tags se encaixam na governança Azure​

Tags são uma peça fundamental da estratégia de governança de qualquer organização que opera no Azure em escala. Elas são o mecanismo que conecta recursos técnicos a contexto de negócio.

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

Por que tags existem​

O Azure não tem como saber que uma VM específica pertence ao projeto X do departamento Y. Essa informação é de negócio, não técnica. Tags são o mecanismo pelo qual você injeta contexto de negócio na infraestrutura técnica.

Sem tags, a fatura do Azure mostra linhas de custo por tipo de recurso e subscription, sem nenhuma correlação com projetos, times ou centros de custo. Com tags, você obtém visibilidade granular de gastos alinhada ao seu modelo organizacional.


3. Construção dos Conceitos​

3.1 O que é uma tag tecnicamente​

Uma tag é um par chave:valor armazenado como metadado no Azure Resource Manager (ARM) associado a um recurso. Tecnicamente:

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

Limites técnicos por recurso:

LimiteValor
Tags por recurso ou Resource Group50
Comprimento máximo da chave512 caracteres
Comprimento máximo do valor256 caracteres
Comprimento máximo da chave (Storage Accounts)128 caracteres
Comprimento máximo do valor (Storage Accounts)256 caracteres

3.2 Case sensitivity​

Tags são case-insensitive para chaves na mesma perspectiva de um único recurso, mas case-sensitive em filtros e queries. Isso significa que Environment e environment são tratados como a mesma chave no mesmo recurso, mas ao filtrar recursos pelo portal ou CLI, você precisa usar a capitalização exata que foi usada.

A prática recomendada é definir uma convenção de capitalização e segui-la rigorosamente. Os padrões mais comuns são:

  • PascalCase: CostCenter, ProjectName, Environment
  • lowercase: costcenter, projectname, environment
  • kebab-case: cost-center, project-name, environment

Escolha um padrão e use Azure Policy para enforçá-lo.

3.3 Quais recursos suportam tags​

A maioria dos recursos Azure suporta tags, mas não todos. Recursos que não suportam tags incluem:

  • Azure AD (usuários, grupos, service principals)
  • Recursos clássicos (modelo de deployment antigo)
  • Alguns tipos de sub-recursos e recursos de sistema

Para verificar se um tipo de recurso suporta tags, consulte a documentação de cada resource provider ou use:

az provider show --namespace "Microsoft.Compute" \
--query "resourceTypes[?resourceType=='virtualMachines'].capabilities"

3.4 Tags não são herdadas automaticamente​

Este é o ponto mais importante e mais frequentemente mal compreendido sobre tags no Azure:

Tags em um Resource Group NÃO são propagadas automaticamente para os recursos dentro dele.

Se você taga o RG com Environment: Production, as VMs, storage accounts e outros recursos dentro do RG não recebem essa tag. Cada recurso tem seu próprio conjunto de tags independente.

Da mesma forma, tags em uma Subscription não são propagadas para os RGs ou recursos dentro dela.

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

VM-Web-01 e Key Vault estão sem tags apesar de estarem num RG taggeado. Para garantir que recursos herdem tags do RG, é necessário usar Azure Policy com efeito Modify (coberto na seção de integração).


4. Visão Estrutural​

Fluxo de decisão para estratégia de tagging​

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

Como tags se integram com outros serviços​

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

5. Funcionamento na Prática​

Ciclo de vida de uma tag​

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

Comportamentos importantes e não óbvios​

Tags em Resource Groups são independentes dos recursos dentro. Um RG pode ter a tag Environment: Production e conter recursos sem nenhuma tag, ou com tags diferentes. O RG é um escopo de gestão, não um contêiner que propaga suas propriedades.

Tags são propriedades do recurso no ARM, não dentro do recurso. Tags não afetam o funcionamento do recurso. Uma VM com ou sem tags tem comportamento idêntico. As tags existem apenas no plano de gerenciamento (ARM), não no plano de dados.

Modificar tags de um recurso não causa downtime. Adicionar, modificar ou remover tags é uma operação no metadata do recurso. Não reinicia serviços nem afeta disponibilidade.

Tags participam do Azure Resource Graph para queries complexas. Com tags consistentes, você pode fazer queries poderosas como "todos os recursos de produção sem tag de owner, em todas as subscriptions":

Resources
| where tags['Environment'] == 'Production'
| where isnull(tags['Owner'])
| project name, type, resourceGroup, subscriptionId

Alguns serviços propagam tags para recursos filhos. Por exemplo, ao criar uma VM, o Azure pode propagar as tags da VM para os discos e NICs associados, dependendo da configuração. Mas isso é comportamento específico de alguns resource providers, não uma regra geral.


6. Formas de Implementação​

Portal do Azure​

Quando usar: aplicação pontual em recursos individuais, revisão visual de tags, correção manual

Para aplicar tags em um recurso:

  1. Navegue até o recurso
  2. No menu lateral, clique em Tags
  3. Digite a chave e o valor nos campos fornecidos
  4. Clique em Apply

Para aplicar tags em múltiplos recursos via portal:

  1. Use o Azure Resource Manager > Tags no portal para filtrar e editar tags em escala (limitado, menos prático para muitos recursos)

Limitação: não escala, não é reproduzível, erros de digitação criam inconsistências.


Azure CLI​

# Aplicar tags em um recurso (substitui tags existentes pelo conjunto especificado)
az resource tag \
--tags Environment=Production CostCenter=CC-2045 Project=ecommerce-v2 \
--resource-group "rg-producao" \
--name "vm-web-01" \
--resource-type "Microsoft.Compute/virtualMachines"

# Aplicar tags em um Resource Group
az group update \
--name "rg-producao" \
--tags Environment=Production CostCenter=CC-2045 Owner=time-backend

# IMPORTANTE: O comando acima SUBSTITUI todas as tags existentes.
# Para ADICIONAR tags sem perder as existentes, use --set:
az resource update \
--resource-group "rg-producao" \
--name "vm-web-01" \
--resource-type "Microsoft.Compute/virtualMachines" \
--set tags.NewTag=NewValue

# Remover uma tag específica sem afetar as outras
az resource update \
--resource-group "rg-producao" \
--name "vm-web-01" \
--resource-type "Microsoft.Compute/virtualMachines" \
--remove tags.OldTag

# Listar recursos com uma tag específica
az resource list \
--tag Environment=Production \
--output table

# Listar recursos SEM uma tag específica (requer Resource Graph)
az graph query \
-q "Resources | where isnull(tags['CostCenter']) | project name, type, resourceGroup"

# Aplicar tags em todos os recursos de um RG (script bash)
for resource_id in $(az resource list --resource-group "rg-producao" --query "[].id" -o tsv); do
az resource tag \
--ids "$resource_id" \
--tags Environment=Production CostCenter=CC-2045
done

Atenção crítica: az resource tag e az group update --tags substituem o conjunto completo de tags. Se você especificar apenas uma tag, todas as outras são removidas. Para adicionar tags mantendo as existentes, use az resource update --set tags.ChaveNova=Valor.


Azure PowerShell​

# Aplicar tags em um Resource Group (substitui todas as tags existentes)
Set-AzResourceGroup `
-Name "rg-producao" `
-Tag @{
Environment = "Production"
CostCenter = "CC-2045"
Owner = "time-backend"
}

# Aplicar tags em um recurso específico
$resource = Get-AzResource `
-ResourceGroupName "rg-producao" `
-ResourceName "vm-web-01" `
-ResourceType "Microsoft.Compute/virtualMachines"

$resource.Tags["Environment"] = "Production"
$resource.Tags["CostCenter"] = "CC-2045"
Set-AzResource -ResourceId $resource.ResourceId -Tag $resource.Tags -Force

# Adicionar tag sem perder as existentes
$resource = Get-AzResource -ResourceId "/subscriptions/<sub>/resourceGroups/rg-prod/providers/Microsoft.Compute/virtualMachines/vm-web-01"
$tags = $resource.Tags
$tags["NewTag"] = "NewValue"
Set-AzResource -ResourceId $resource.ResourceId -Tag $tags -Force

# Aplicar tags em todos os recursos de um RG preservando tags existentes
$resources = Get-AzResource -ResourceGroupName "rg-producao"
foreach ($resource in $resources) {
$existingTags = $resource.Tags ?? @{}
$existingTags["Environment"] = "Production"
$existingTags["CostCenter"] = "CC-2045"
Set-AzResource -ResourceId $resource.ResourceId -Tag $existingTags -Force
}

# Listar recursos com uma tag específica
Get-AzResource -Tag @{Environment = "Production"} | Select-Object Name, ResourceType, ResourceGroupName

# Remover uma tag específica de um recurso
$resource = Get-AzResource -ResourceId "<resource-id>"
$tags = $resource.Tags
$tags.Remove("OldTag")
Set-AzResource -ResourceId $resource.ResourceId -Tag $tags -Force

Bicep e ARM Templates​

Em IaC, as tags devem ser definidas como variáveis ou parâmetros reutilizáveis para garantir consistência:

// Definir tags como parâmetro reutilizável
param resourceTags object = {
Environment: 'Production'
CostCenter: 'CC-2045'
Project: 'ecommerce-v2'
Owner: 'time-backend'
CreatedBy: 'pipeline-devops'
CreatedDate: '2026-03-24'
}

// Aplicar no Resource Group
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name: 'rg-producao'
location: 'brazilsouth'
tags: resourceTags
}

// Aplicar na VM
resource vm 'Microsoft.Compute/virtualMachines@2023-09-01' = {
name: 'vm-web-01'
location: resourceGroup().location
tags: union(resourceTags, {
Role: 'web-server' // tag adicional específica desta VM
})
properties: {
// ... configurações da VM
}
}

A função union() no Bicep mescla dois objetos de tags, permitindo que cada recurso herde as tags comuns e adicione suas próprias.


Terraform​

# Variável de tags comuns (definida uma vez, reutilizada em todos os recursos)
locals {
common_tags = {
Environment = "Production"
CostCenter = "CC-2045"
Project = "ecommerce-v2"
Owner = "time-backend"
ManagedBy = "terraform"
}
}

# Resource Group com tags
resource "azurerm_resource_group" "prod" {
name = "rg-producao"
location = "brazilsouth"
tags = local.common_tags
}

# VM com tags comuns + tags específicas
resource "azurerm_linux_virtual_machine" "web" {
name = "vm-web-01"
resource_group_name = azurerm_resource_group.prod.name
location = azurerm_resource_group.prod.location

tags = merge(local.common_tags, {
Role = "web-server"
Tier = "frontend"
})

# ... resto das configurações
}

O uso de locals para tags comuns e merge() para combinar com tags específicas é o padrão Terraform para gestão de tags em escala.


7. Controle e Segurança​

Enforcement de tags com Azure Policy​

Tags só têm valor se forem aplicadas de forma consistente. Azure Policy é o mecanismo para garantir isso:

1. Policy para exigir tag específica (Deny ou Audit):

Built-in policy: "Require a tag on resources"

  • Efeito Deny: bloqueia criação de recursos sem a tag obrigatória
  • Efeito Audit: registra recursos sem a tag como non-compliant, sem bloquear

2. Policy para herdar tag do Resource Group (Modify):

Built-in policy: "Inherit a tag from the resource group if missing"

Esta policy usa efeito Modify para copiar automaticamente uma tag do RG para o recurso, se a tag estiver ausente no recurso. Isso é a solução para "tags não são herdadas automaticamente".

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

3. Policy para valores controlados (Deny com allowedValues):

Custom policy que restringe os valores aceitos para uma tag:

{
"mode": "Indexed",
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
{
"not": {
"field": "tags['Environment']",
"in": ["Production", "Staging", "Development", "Testing"]
}
}
]
},
"then": {
"effect": "Deny"
}
}
}

Esta policy garante que a tag Environment em VMs só pode ter os valores definidos. Qualquer outro valor é bloqueado.

Quem pode modificar tags​

Tags são propriedades dos recursos no ARM. Para modificar tags de um recurso, você precisa de permissão de escrita naquele recurso. Isso significa que:

  • Contributor pode adicionar, modificar e remover tags de recursos
  • Reader não pode modificar tags
  • Uma tag não pode ser usada como controle de acesso; ela é apenas metadado

Para restringir quem pode modificar tags especificamente, sem restringir outras operações, seria necessário uma Custom Role que permita apenas */read e */write para tags, o que é complexo e raramente necessário.


8. Tomada de Decisão​

Definição da taxonomia de tags​

Categoria de tagExemplos de chavesFinalidade
FinanceiroCostCenter, BudgetCode, BusinessUnitChargeback, alocação de custos
OperacionalEnvironment, Tier, Role, CriticalityGestão operacional, automação
ProprietárioOwner, Team, ContactResponsabilidade, onCall
Ciclo de vidaCreatedDate, ExpiresOn, CreatedByGovernança, limpeza automatizada
ProjetoProject, Application, VersionRastreabilidade de investimento
ComplianceDataClassification, RegulationSegurança, requisitos legais

Quando usar cada abordagem de aplicação​

SituaçãoAbordagemMotivo
Novo ambiente sendo provisionadoIaC (Bicep/Terraform) com tags como variávelGarantir consistência desde o início
Recursos existentes sem tagsScript PowerShell/CLI em massa + Policy para novosRemediação em escala + prevenção futura
Tags obrigatórias em toda a organizaçãoAzure Policy com Deny no Management GroupEnforcement centralizado, não depende de disciplina humana
Herdar tags do RG automaticamenteAzure Policy com ModifySolução oficial para propagação de tags
Tag com valores controladosPolicy customizada com allowedValuesEvitar valores inconsistentes como "prod", "Prod", "PROD"
Auditoria de conformidade de tagsAzure Resource Graph + Policy ComplianceQueries escaláveis em toda a organização

9. Boas Práticas​

Defina a taxonomia antes de começar a taguear. Decidir quais tags são obrigatórias, quais são opcionais, quais valores são aceitos e qual é a convenção de capitalização antes de começar. Mudar a taxonomia depois que milhares de recursos já estão taggeados é extremamente trabalhoso.

Comece com poucas tags obrigatórias e adicione gradualmente. Um conjunto de 3 a 5 tags obrigatórias que toda a organização consegue preencher corretamente é muito melhor do que 20 tags das quais metade fica vazia ou incorreta. Tags recomendadas para começar: Environment, CostCenter, Owner, Project.

Use Policy com Deny para tags obrigatórias em produção. Em ambientes de produção maduros, a tag obrigatória deve ser enforçada com Deny. Em ambientes novos ou em transição, comece com Audit para entender o impacto antes de bloquear.

Use IaC como fonte de verdade para tags. Tags devem ser definidas nos templates Terraform ou Bicep, não aplicadas manualmente no portal. Quando um recurso é recriado ou redeploy, as tags são restauradas automaticamente.

Implemente herança de tags do RG via Policy. Aplique a built-in policy "Inherit a tag from the resource group if missing" para as tags mais importantes. Assim, se o RG tem a tag correta, qualquer recurso criado dentro dele recebe automaticamente.

Use tags para automação de ciclo de vida. Tags como ExpiresOn: 2026-06-30 podem ser usadas por runbooks do Azure Automation para identificar e desligar (ou alertar sobre) recursos que passaram da data de expiração.

Nunca use tags para controle de segurança. Tags são metadados, não controles de acesso. Não implemente lógica de segurança que dependa de tags (como "recursos com tag Confidential têm acesso restrito"). Use RBAC e Azure Policy para controle de segurança.


10. Erros Comuns​

ErroPor que aconteceComo evitar
Assumir que tags do RG propagam para recursosComportamento esperado mas que não existe no AzureUsar Policy com Modify para herança explícita
Usar az resource tag e perder tags existentesO comando substitui todas as tagsUsar az resource update --set tags.Chave=Valor para adicionar sem perder
Inconsistência de capitalização: "prod", "Prod", "PROD"Falta de padrão definido e enforçadoDefinir padrão + Policy com allowedValues
Tags apenas no RG, não nos recursos individuaisCrença errônea em herança automáticaAplicar tags em cada recurso, ou usar Policy de herança
Usar tags como único mecanismo de organização sem RGs adequadosTags não substituem estrutura de escoposUsar RGs para isolamento + tags para metadado
Não incluir tags em templates IaCPressa, considerada detalhe menorIncluir variável de tags comuns em todos os templates
Criar tags com muitos valores possíveis sem controleSem Policy de allowedValuesDefinir enum de valores aceitos e enforçar via Policy
Tags com informações sensíveis como senhas ou tokensTags são visíveis para qualquer ReaderNunca colocar credenciais em tags; usar Key Vault

O erro mais comum em escala​

Em organizações com múltiplas equipes, cada time cria suas próprias tags com nomes e valores diferentes para representar o mesmo conceito. Resultado: Env, env, Environment, ENVIRONMENT, environment, Ambiente tudo coexistindo, tornando relatórios de custo por ambiente impossíveis sem limpeza massiva.

A solução é definir um tag taxonomy document como referência oficial e enforçar via Policy antes que a proliferação comece.


11. Operação e Manutenção​

Consultar recursos por tag no dia a dia​

# Listar todos os recursos com uma tag específica
az resource list --tag Environment=Production --output table

# Contar recursos por valor de tag (quantos por ambiente)
az resource list \
--query "[].tags.Environment" \
--output tsv | sort | uniq -c

# Recursos sem uma tag obrigatória (via Resource Graph)
az graph query -q "
Resources
| where isnull(tags['CostCenter']) or tags['CostCenter'] == ''
| project name, type, resourceGroup, subscriptionId
| order by type asc"

# Todos os valores únicos de uma tag (para detectar inconsistências)
az graph query -q "
Resources
| where isnotnull(tags['Environment'])
| summarize count() by tostring(tags['Environment'])
| order by count_ desc"

Relatórios de custo por tag no Cost Management​

  1. Portal > Cost Management + Billing > Cost analysis
  2. Em Group by, selecione Tag e escolha a chave desejada (ex: CostCenter)
  3. O relatório mostra custo agrupado por valor da tag

Atenção: recursos sem a tag aparecem em uma categoria separada (geralmente "untagged" ou com valor vazio). Isso é uma indicação visual de não-conformidade de tagging.

Exportação automática de relatórios de custo por tag​

Configure exports automáticos no Cost Management para um Storage Account, com agrupamento por tag, gerando arquivos CSV mensais que podem ser processados automaticamente para chargeback.

Monitorar conformidade de tags via Policy​

O dashboard Policy > Compliance mostra o percentual de recursos conformes para cada policy de tag. Isso permite rastrear a evolução da cobertura de tags ao longo do tempo.

Limites a monitorar​

LimiteValorImpacto se atingido
Tags por recurso50Não é possível adicionar mais tags; revisar e remover tags desnecessárias
Comprimento da chave512 caracteresErro ao tentar criar tag com chave muito longa
Comprimento do valor256 caracteresErro ao tentar criar tag com valor muito longo

O limite de 50 tags por recurso raramente é atingido com uma taxonomia bem projetada. Se você está se aproximando desse limite, é sinal de que a taxonomia precisa ser revisada e simplificada.


12. Integração e Automação​

Automação baseada em tags com Azure Automation​

Um padrão poderoso é usar tags para controlar comportamentos automáticos de recursos:

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

Exemplo de runbook PowerShell que desliga VMs baseado em tag:

# Runbook: Auto-Shutdown baseado em tag
$vms = Get-AzResource `
-ResourceType "Microsoft.Compute/virtualMachines" `
-Tag @{AutoShutdown = "true"}

$currentHour = (Get-Date).ToString("HH:mm")

foreach ($vm in $vms) {
$shutdownTime = $vm.Tags["ShutdownTime"]
if ($shutdownTime -eq $currentHour) {
Write-Output "Desligando $($vm.Name)..."
Stop-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Force
}
}

Integração com Azure Cost Management para chargeback​

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

Integração com Azure Monitor para alertas segmentados por tag​

É possível criar alertas que filtram por tag para notificar apenas o time responsável por um conjunto de recursos:

# Criar action group para o time de backend
az monitor action-group create \
--name "ag-time-backend" \
--resource-group "rg-monitoramento" \
--short-name "backend" \
--email backend-team@empresa.com

# Criar alerta de CPU alta apenas para VMs com tag Owner=time-backend
az monitor metrics alert create \
--name "cpu-alta-backend-vms" \
--resource-group "rg-monitoramento" \
--scopes "/subscriptions/<sub-id>/resourceGroups/rg-prod" \
--condition "avg Percentage CPU > 90" \
--action "ag-time-backend" \
--description "CPU alta em VMs do time backend"

Limpeza automática de recursos com tag de expiração​

# Runbook: Identificar e reportar recursos expirados
$today = Get-Date

$expiredResources = Get-AzResource | Where-Object {
$_.Tags.ContainsKey("ExpiresOn") -and
[DateTime]::Parse($_.Tags["ExpiresOn"]) -lt $today
}

foreach ($resource in $expiredResources) {
Write-Output "RECURSO EXPIRADO: $($resource.Name) - Expirou em: $($resource.Tags['ExpiresOn'])"
# Opcional: Send-MailMessage ou New-AzMonitorAlertRule
# Opcional: Remove-AzResource -ResourceId $resource.ResourceId -Force
}

13. Resumo Final​

Pontos essenciais:

  • Tags são pares chave:valor associados a recursos como metadado no ARM
  • Não existe herança automática de tags: tags em RG não propagam para recursos dentro
  • O limite é de 50 tags por recurso, com chaves de até 512 caracteres e valores de até 256
  • Tags existem apenas no plano de gerenciamento (ARM) e não afetam o funcionamento dos recursos
  • Para garantir herança de tags do RG, use Azure Policy com efeito Modify ("Inherit tag from resource group if missing")

Diferenças críticas:

  • az resource tag substitui todo o conjunto de tags; az resource update --set tags.Chave=Valor adiciona sem perder as existentes
  • Tags em RG vs. recursos: RG e seus recursos têm conjuntos de tags completamente independentes
  • Policy Deny vs. Modify para tags: Deny bloqueia recursos sem tag; Modify adiciona a tag automaticamente. Ambos são complementares
  • Audit vs. Deny para enforcement: Audit registra não-conformidade sem bloquear; Deny bloqueia na criação

O que precisa ser lembrado para o AZ-104:

  • Tags não são herdadas automaticamente de escopos pai para filho
  • Substituição vs. merge: atenção ao usar comandos que substituem todas as tags versus os que adicionam incrementalmente
  • Azure Resource Graph é a ferramenta para queries complexas de recursos por tags em escala
  • Tags aparecem no Cost Management como dimensão de agrupamento para relatórios de custo
  • A built-in policy "Inherit a tag from the resource group if missing" usa efeito Modify e é a solução oficial para propagação de tags
  • Tags podem ser usadas em automação (Runbooks, Logic Apps) para controlar comportamentos de recursos
  • Chaves de tags são case-insensitive no mesmo recurso mas case-sensitive em filtros e queries externas