Práticas recomendadas de FinOps para rede

Este artigo descreve as práticas comprovadas de FinOps para serviços de rede. Eles se concentram na otimização de custos, melhorias de eficiências e percepções de recursos.


Firewall do Azure

As seções a seguir fornecem consultas ARG (Azure Resource Graph) para o Firewall do Azure. Essas consultas ajudam você a obter insights sobre os recursos de firewall do Azure e garantir que eles estejam configurados com as configurações apropriadas. Ao analisar os padrões de uso e exibir recomendações do Assistente do Azure, você pode otimizar suas configurações de firewall do Azure para eficiência de custos.

Consulta: análise de políticas de firewall e firewall do Azure

Essa consulta ARG analisa os firewalls do Azure e suas políticas de firewall associadas em seu ambiente do Azure. Ele visa especificamente firewalls com uma camada de SKU premium e verifica se as configurações em suas políticas de firewall associadas estão utilizando os recursos premium.

Categoria

Otimização

Consulta

resources
| where type =~ 'Microsoft.Network/azureFirewalls' and properties.sku.tier=="Premium"
| project FWID=id, firewallName=name, SkuTier=tostring(properties.sku.tier), resourceGroup, location
| join kind=inner (
    resources
    | where type =~ 'microsoft.network/firewallpolicies'
    | mv-expand properties.firewalls
    | extend intrusionDetection = tostring(properties.intrusionDetection contains "Alert"
        or properties.intrusionDetection contains "Deny")
    | extend transportSecurity = tostring(properties.transportSecurity contains "keyVaultSecretId")
    | extend FWID = tostring(properties_firewalls.id)
    | where intrusionDetection == "False"
        and transportSecurity == "False"
    | project
        PolicyName = name,
        PolicySKU = tostring(properties.sku.tier),
        intrusionDetection,
        transportSecurity,
        FWID
) on FWID

Consulta: Firewall do Azure e análise de sub-redes associadas

Essa consulta ARG analisa os firewalls do Azure e suas sub-redes associadas em seu ambiente do Azure. Ele fornece insights sobre quais sub-redes estão associadas a cada instância do firewall do Azure. Otimize o uso do firewall do Azure tendo uma instância central do firewall do Azure na rede virtual do hub ou no hub seguro da WAN Virtual. Em seguida, compartilhe o mesmo firewall em várias redes virtuais spoke conectadas ao mesmo hub da mesma região.

Categoria

Otimização

Consulta

resources
| where type =~ 'Microsoft.Network/azureFirewalls' and properties.sku.tier=="Premium"
| project
    FWID=id,
    firewallName=name,
    SkuTier=tostring(properties.sku.tier),
    resourceGroup,
    location
| join kind=inner (
    resources
    | where type =~ 'microsoft.network/firewallpolicies'
    | mv-expand properties.firewalls
    | extend intrusionDetection = tostring(properties.intrusionDetection contains "Alert"
        or properties.intrusionDetection contains "Deny")
    | extend transportSecurity = tostring(properties.transportSecurity contains "keyVaultSecretId")
    | extend FWID=tostring(properties_firewalls.id)
    | where intrusionDetection == "False"
        and transportSecurity == "False"
    | project
        PolicyName = name,
        PolicySKU = tostring(properties.sku.tier),
        intrusionDetection,
        transportSecurity,
        FWID
) on FWID

Application Gateway

O Gateway de Aplicativo do Azure é um balanceador de carga do tráfego da Web que permite que você gerencie o tráfego para seus aplicativos Web. Ele fornece serviços de roteamento no nível do aplicativo e balanceamento de carga que permitem criar um front-end web escalonável e altamente disponível em Azure.

Recursos relacionados:

Remover gateways de aplicação ociosos

Recomendação: remova os gateways de aplicativo que não têm pools de back-end para evitar custos desnecessários.

Sobre gateways de aplicação ociosos

Os gateways de aplicativo sem destinos no pool de back-end não estão roteando tráfego ativamente e podem representar recursos não utilizados. Esses gateways ociosos continuam a incorrer em custos mesmo que não atendam a nenhuma função.

Note

Os hubs FinOps podem identificar automaticamente gateways de aplicativo ociosos. Saiba mais.

Identificar gateways de aplicativos ociosos

Use a seguinte consulta ARG para identificar gateways de aplicativo com pools de back-end vazios.

resources
| where type =~ 'Microsoft.Network/applicationGateways'
| extend
    backendPoolsCount = array_length(properties.backendAddressPools),
    SKUName = tostring(properties.sku.name),
    SKUTier = tostring(properties.sku.tier),
    SKUCapacity = properties.sku.capacity,
    backendPools = properties.backendAddressPools,
    resourceGroup = strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)
| project id, name, SKUName, SKUTier, SKUCapacity, resourceGroup, subscriptionId
| join (
    resources
    | where type =~ 'Microsoft.Network/applicationGateways'
    | mvexpand backendPools = properties.backendAddressPools
    | extend backendIPCount = array_length(backendPools.properties.backendIPConfigurations)
    | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses)
    | extend backendPoolName = backendPools.properties.backendAddressPools.name
    | summarize
        backendIPCount = sum(backendIPCount),
        backendAddressesCount = sum(backendAddressesCount)
        by id
) on id
| project-away id1
| where (backendIPCount == 0 or isempty(backendIPCount))
    and (backendAddressesCount==0 or isempty(backendAddressesCount))
| order by id asc

Atualizar gateways de aplicativos clássicos

Recomendação: atualize o SKU do Gateway de Aplicativo v1 para v2 antes da data de desativação da v1 para manter o suporte e acessar recursos aprimorados.

Sobre gateways de aplicação clássicos

O SKU v1 do Application Gateway (Standard e WAF) será descontinuado. O SKU v2 oferece dimensionamento automático, redundância de zona e melhor desempenho. A migração para v2 garante o suporte contínuo e pode reduzir os custos por meio do dimensionamento automático, o que ajusta automaticamente o número de instâncias com base no tráfego.

Note

Os hubs FinOps podem identificar automaticamente gateways de aplicativo clássicos usando o SKU v1. Saiba mais.

Identificar gateways clássicos de aplicativo

Use a consulta ARG a seguir para identificar gateways de aplicativo que ainda usam o SKU v1.

resources
| where type =~ 'microsoft.network/applicationgateways'
| where properties.sku.tier in ('Standard', 'WAF')
| project
    ResourceId = tolower(id),
    ResourceName = name,
    SKUTier = tostring(properties.sku.tier),
    Region = location,
    ResourceGroupName = resourceGroup,
    SubscriptionId = subscriptionId

Proteção contra DDoS

Azure Proteção contra DDoS fornece contramedidas contra as ameaças DDoS mais sofisticadas. Ele fornece recursos aprimorados de mitigação de DDoS para seu aplicativo e recursos implantados em suas redes virtuais.

Recursos relacionados:

Remover planos de proteção contra DDoS não associados

Recomendação: remova os planos de proteção contra DDoS que não estão associados a nenhuma rede virtual para evitar custos desnecessários.

Sobre planos de proteção contra DDoS não associados

Os planos de proteção contra DDoS incorrem em uma cobrança mensal fixa. Os planos que não estão associados a nenhuma rede virtual não fornecem proteção, mas ainda geram custos. A remoção de planos não utilizados elimina gastos desnecessários.

Note

Os hubs FinOps podem identificar automaticamente planos de proteção contra DDoS não associados. Saiba mais.

Identificar planos de proteção contra DDoS não associados

Use a consulta ARG a seguir para identificar planos de proteção contra DDoS que não estão associados a nenhuma rede virtual.

resources
| where type =~ 'microsoft.network/ddosprotectionplans'
| where isnull(properties.virtualNetworks) or array_length(properties.virtualNetworks) == 0
| project
    ResourceId = tolower(id),
    ResourceName = name,
    Region = location,
    ResourceGroupName = resourceGroup,
    SubscriptionId = subscriptionId

ExpressRoute

Azure ExpressRoute permite estender suas redes locais para a nuvem Microsoft por meio de uma conexão privada. Os circuitos do ExpressRoute incorrem em encargos mensais com base na SKU e na largura de banda provisionadas.

Recursos relacionados:

Remover circuitos ExpressRoute não provisionados

Recomendação: exclua ou provisione circuitos do ExpressRoute que estejam em estado de não provisionamento para evitar cobranças desnecessárias.

Sobre circuitos do ExpressRoute não provisionados

Os circuitos do ExpressRoute que permanecem em um estado "NotProvisioned" não estão carregando tráfego ativamente, mas ainda incorrem em encargos mensais. Esses circuitos podem ter sido criados, mas nunca concluídos com o provedor de serviços. Identificá-los e removê-los elimina custos desnecessários.

Note

Os hubs de FinOps podem identificar automaticamente circuitos do ExpressRoute não provisionados. Saiba mais.

Identificar circuitos do ExpressRoute não provisionados

Use a consulta ARG a seguir para identificar circuitos do ExpressRoute em um estado não provisionado.

resources
| where type =~ 'Microsoft.Network/expressRouteCircuits'
    and properties.serviceProviderProvisioningState == "NotProvisioned"
| extend
    ServiceLocation = tostring(properties.serviceProviderProperties.peeringLocation),
    ServiceProvider = tostring(properties.serviceProviderProperties.serviceProviderName),
    BandwidthInMbps = tostring(properties.serviceProviderProperties.bandwidthInMbps)
| project
    ERId = id,
    ERName = name,
    ERRG = resourceGroup,
    SKUName = tostring(sku.name),
    SKUTier = tostring(sku.tier),
    SKUFamily = tostring(sku.family),
    ERLocation = location,
    ServiceLocation,
    ServiceProvider,
    BandwidthInMbps

Load Balancer

O Azure Load Balancer opera na camada 4 do modelo OSI e distribui o tráfego de entrada entre instâncias saudáveis do pool de back-end. Ele fornece alta disponibilidade monitorando a integridade das instâncias de back-end e redirecionando automaticamente o tráfego para longe das não íntegras.

Recursos relacionados:

Remover balanceadores de carga ociosos

Recomendação: Remova balanceadores de carga que não têm nenhum pool de back-end para evitar custos desnecessários.

Sobre balanceadores de carga ociosos

Balanceadores de carga sem destinos no pool de back-end não estão distribuindo ativamente o tráfego e podem representar recursos não utilizados. Os balanceadores de carga de SKU padrão incorrem em custos mesmo quando ociosos, portanto, a remoção de instâncias não usadas pode reduzir os gastos desnecessários.

Note

Os hubs FinOps podem identificar automaticamente balanceadores de carga ociosos. Saiba mais.

Identificar balanceadores de carga ociosos

Use a seguinte consulta ARG para identificar balanceadores de carga com SKU Standard e conjuntos de back-end vazios.

resources
| extend resourceGroup = strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup)
| extend SKUName = tostring(sku.name)
| extend SKUTier = tostring(sku.tier)
| extend location,backendAddressPools = properties.backendAddressPools
| where type =~ 'microsoft.network/loadbalancers'
    and array_length(backendAddressPools) == 0
    and sku.name!='Basic'
| order by id asc
| project
    id,
    name,
    SKUName,
    SKUTier,
    backendAddressPools,
    location,
    resourceGroup,
    subscriptionId

Atualizar balanceadores de carga básicos

Recomendação: atualize os balanceadores de carga que usam a SKU Básica descontinuada para a SKU Standard, para obter melhor desempenho, segurança e suporte contínuo.

Sobre balanceadores de carga básicos

A SKU Básica do Azure Load Balancer foi descontinuada em 30 de setembro de 2025. Os balanceadores de carga básicos não fornecem um SLA, não têm suporte à zona de disponibilidade e têm recursos de diagnóstico limitados. A atualização para o SKU Standard fornece recursos aprimorados de confiabilidade, desempenho e segurança.

Note

Os hubs FinOps podem identificar automaticamente balanceadores de carga básicos. Saiba mais.

Identificar balanceadores de carga básicos

Use a consulta ARG a seguir para identificar balanceadores de carga usando o SKU Básico.

resources
| where type =~ 'microsoft.network/loadbalancers'
| where sku.name =~ 'Basic'
| project
    ResourceId = tolower(id),
    ResourceName = name,
    SKUName = tostring(sku.name),
    Region = location,
    ResourceGroupName = resourceGroup,
    SubscriptionId = subscriptionId

Gateway da NAT

Gateway da NAT do Azure fornece conectividade de saída com a Internet para redes virtuais. Os gateways NAT simplificam a conectividade de Internet somente de saída, fornecendo um serviço SNAT gerenciado e altamente disponível.

Recursos relacionados:

Remover gateways NAT não associados

Recomendação: remova os gateways NAT que não estão associados a nenhuma sub-rede para evitar encargos desnecessários.

Sobre gateways NAT órfãos

Os gateways NAT incorrem em encargos por hora e custos de processamento de dados. Os gateways que não estão associados a nenhuma sub-rede não estão fornecendo conectividade de saída e representam gastos desperdiçados. Esses gateways órfãos podem permanecer após a reconfiguração de uma sub-rede ou rede virtual.

Note

Os hubs FinOps podem identificar automaticamente gateways NAT órfãos. Saiba mais.

Identificar gateways NAT órfãos

Use a consulta ARG a seguir para identificar gateways NAT não associados a nenhuma sub-rede.

resources
| where type == "microsoft.network/natgateways"
| where isnull(properties.subnets) or array_length(properties.subnets) == 0
| project
    id,
    GWName = name,
    SKUName = tostring(sku.name),
    SKUTier = tostring(sku.tier),
    Location = location,
    resourceGroup = tostring(strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup)),
    subnets = properties.subnets,
    subscriptionId

Interface de Rede

Azure NICs (interfaces de rede) permitem que Azure VMs se comuniquem com a Internet, Azure e recursos locais. As NICs não incorrem em encargos diretos, mas NICs órfãs podem indicar oportunidades de limpeza perdidas e complicar o gerenciamento de recursos.

Remover interfaces de rede desanexadas

Recomendação: remova interfaces de rede que não estão anexadas a nenhuma máquina virtual ou ponto de extremidade privado para manter seu ambiente limpo e reduzir a sobrecarga de gerenciamento.

Sobre interfaces de rede desanexadas

Quando uma VM é excluída, suas interfaces de rede associadas podem não ser removidas automaticamente. Essas NICs órfãs podem se acumular ao longo do tempo, bagunçando seu ambiente e potencialmente retendo recursos associados, como IPs públicos. Embora as NICs não incorram em encargos diretos, limpá-las simplifica o gerenciamento de recursos e pode revelar outros recursos órfãos.

Note

Os hubs FinOps podem identificar automaticamente interfaces de rede não anexadas. Saiba mais.

Identificar interfaces de rede não anexadas

Use a consulta ARG a seguir para identificar interfaces de rede não anexadas a nenhuma VM ou ponto de extremidade privado.

resources
| where type =~ 'microsoft.network/networkinterfaces'
| where isnull(properties.virtualMachine) and isnull(properties.privateEndpoint)
| project
    ResourceId = tolower(id),
    ResourceName = name,
    PrivateIP = tostring(properties.ipConfigurations[0].properties.privateIPAddress),
    Region = location,
    ResourceGroupName = resourceGroup,
    SubscriptionId = subscriptionId

Grupo de Segurança de Rede

Os NSGs (grupos de segurança de rede) filtram o tráfego de rede de e para os recursos do Azure em uma rede virtual. Os NSGs contêm regras de segurança que permitem ou negam o tráfego de rede de entrada e saída.

Remover grupos de segurança de rede vazios

Recomendação: remova grupos de segurança de rede que não estão associados a nenhum adaptador de rede ou sub-rede para simplificar seu ambiente e reduzir a sobrecarga de gerenciamento.

Sobre grupos de segurança de rede vazios

Os NSGs que não estão associados a nenhum adaptador de rede ou sub-rede não estão filtrando ativamente o tráfego. Esses recursos não utilizados podem se acumular durante as alterações de infraestrutura, adicionando desordem e complicando as auditorias de segurança. Removê-los simplifica o gerenciamento de rede e ajuda a manter um ambiente limpo.

Note

Os hubs FinOps podem identificar automaticamente grupos de segurança de rede vazios. Saiba mais.

Identificar grupos de segurança de rede vazios

Use a seguinte consulta ARG para identificar NSGs não associados a nenhuma interface de rede ou sub-rede.

resources
| where type =~ 'microsoft.network/networksecuritygroups'
| where isnull(properties.networkInterfaces) and isnull(properties.subnets)
| project
    ResourceId = tolower(id),
    ResourceName = name,
    Region = location,
    ResourceGroupName = resourceGroup,
    SubscriptionId = subscriptionId

DNS privado

A seção a seguir fornece uma consulta ARG para DNS privado. Ele ajuda você a obter insights sobre seus recursos de DNS privado e garantir que eles estejam configurados com as configurações apropriadas.

Consulta: DNS privado

Essa consulta ARG analisa as zonas DNS privadas em seu ambiente do Azure para identificar qualquer uma sem Links de Rede Virtual.

Categoria

Otimização

Consulta

resources
| where type == "microsoft.network/privatednszones"
    and properties.numberOfVirtualNetworkLinks == 0
| project id, PrivateDNSName=name,
    NumberOfRecordSets = tostring(properties.numberOfRecordSets),
    resourceGroup = tostring(strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup)),
    vNets = tostring(properties.properties.numberOfVirtualNetworkLinks),
    subscriptionId

Endereço IP público

Os endereços IP públicos do Azure permitem que os recursos do Azure se comuniquem com a Internet e com outros serviços do Azure voltados ao público. Os endereços IP públicos são atribuídos a recursos como máquinas virtuais, balanceadores de carga e gateways de aplicativo. Endereços IP públicos estáticos incorrem em custos associados ou não a um recurso.

Recursos relacionados:

Atualizar IPs públicos básicos

Recomendação: atualize os endereços IP públicos que usam a SKU Basic descontinuada para a Standard, para obter mais segurança e suporte contínuo.

Sobre IPs públicos básicos

O SKU Básico para endereços IP públicos Azure foi desativado em 30 de setembro de 2025. Os IPs públicos básicos não têm redundância de zona, não dão suporte à preferência de roteamento e estão abertos ao tráfego de entrada por padrão. A atualização para o SKU Standard fornece redundância de zona, comportamento seguro por padrão (fechado ao tráfego de entrada) e suporte para preferências de roteamento.

Note

Os hubs FinOps podem identificar automaticamente IPs públicos básicos. Saiba mais.

Identificar IPs públicos básicos

Use a consulta ARG a seguir para identificar endereços IP públicos usando o SKU Básico.

resources
| where type =~ 'microsoft.network/publicipaddresses'
| where sku.name =~ 'Basic'
| project
    ResourceId = tolower(id),
    ResourceName = name,
    SKUName = tostring(sku.name),
    AllocationMethod = tostring(properties.publicIPAllocationMethod),
    Region = location,
    ResourceGroupName = resourceGroup,
    SubscriptionId = subscriptionId

Remover endereços IP públicos ociosos

Recomendação: remova endereços IP públicos estáticos não anexados para evitar custos de rede desnecessários.

Sobre endereços IP públicos ociosos

Endereços IP públicos estáticos incorrem em custos, independentemente de estarem associados a um recurso. IPs públicos não associados podem se acumular ao longo do tempo, conforme os recursos são excluídos, mas os IPs públicos associados a eles permanecem. Identificar e remover esses recursos órfãos pode reduzir custos desnecessários.

Note

Os hubs FinOps podem identificar automaticamente endereços IP públicos não anexados. Saiba mais.

Identificar endereços IP públicos ociosos

Use a consulta ARG a seguir para identificar endereços IP públicos estáticos não anexados, incluindo aqueles associados a interfaces de rede não anexadas.

resources
| where type =~ 'Microsoft.Network/publicIPAddresses'
    and isempty(properties.ipConfiguration)
    and isempty(properties.natGateway)
    and properties.publicIPAllocationMethod =~ 'Static'
| extend
    PublicIpId = id,
    IPName = name,
    AllocationMethod = tostring(properties.publicIPAllocationMethod),
    SKUName = sku.name,
    Location = location,
    resourceGroup = strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup)
| project PublicIpId, IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId
| union (
    Resources
    | where type =~ 'microsoft.network/networkinterfaces'
        and isempty(properties.virtualMachine)
        and isnull(properties.privateEndpoint)
        and isnotempty(properties.ipConfigurations)
    | extend IPconfig = properties.ipConfigurations
    | mv-expand IPconfig
    | extend PublicIpId= tostring(IPconfig.properties.publicIPAddress.id)
    | project PublicIpId
    | join (
        resource
        | where type =~ 'Microsoft.Network/publicIPAddresses'
        | extend
            PublicIpId = id,
            IPName = name,
            AllocationMethod = tostring(properties.publicIPAllocationMethod),
            SKUName = sku.name,
            resourceGroup,
            Location = location
    ) on PublicIpId
    | project
        PublicIpId,
        IPName,
        SKUName,
        resourceGroup,
        Location,
        AllocationMethod,
        subscriptionId
)

Consulta: Identificar o método de roteamento de endereços IP públicos

Essa consulta ARG analisa endereços IP públicos e identifica o método de roteamento, o método de alocação e o SKU. Ele também analisa outros detalhes de endereços IP públicos associados a uma configuração de IP.

Categoria

Otimização

Consulta

resources
| where type =~ 'Microsoft.Network/publicIPAddresses'
    and isnotempty(properties.ipConfiguration)
| where tostring(properties.ipTags) == "[]"
| extend
    PublicIpId = id,
    RoutingMethod = id,
    IPName = name,
    AllocationMethod = tostring(properties.publicIPAllocationMethod),
    SKUName = sku.name,
    Location = location,
    resourceGroup = strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup)
| project
    PublicIpId,
    IPName,
    RoutingMethod,SKUName,
    resourceGroup,
    Location,
    AllocationMethod,
    subscriptionId

Consulta: Verificar a política de proteção contra DDoS de endereços IP públicos

Se você precisar proteger menos de 15 recursos de IP público, a camada de proteção de IP será a opção mais econômica. No entanto, se você tiver mais de 15 recursos de IP público para proteger, a camada de proteção de rede se tornará mais econômica.

Categoria

Otimização

Consulta

resources
| where type == "microsoft.network/publicipaddresses"
| project ddosProtection = tostring(properties.ddosSettings), name
| where ddosProtection has "Enabled"
| count
| project TotalIpsProtected = Count
| extend CheckIpsProtected = iff(TotalIpsProtected >= 15, "Enable Network Protection tier", "Enable PIP DDoS Protection")

Gateway de Rede Virtual

Rede Virtual do Azure Gateways fornecem conectividade entre locais entre suas redes virtuais Azure e a infraestrutura local. Os gateways incorrem em encargos por hora com base em sua SKU.

Recursos relacionados:

Remover gateways de VNet não utilizados

Recomendação: remova gateways de rede virtual que não têm nenhuma conexão ativa para evitar encargos desnecessários.

Sobre gateways de VNet ociosos

Os gateways de rede virtual geram custos por hora com base em seu nível de SKU, independentemente de estarem sendo usados ativamente. Gateways sem conexões não estão fornecendo conectividade entre locais e representam gastos desperdiçados. Esses gateways ociosos podem permanecer após uma migração ou quando os requisitos de conectividade são alterados.

Note

Os hubs FinOps podem identificar automaticamente gateways de VNet ociosos. Saiba mais.

Identificar gateways de VNet ociosos

Use a consulta ARG a seguir para identificar gateways de rede virtual sem nenhuma conexão ativa.

resources
| where type == "microsoft.network/virtualnetworkgateways"
| extend resourceGroup = strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup)
| project id, GWName=name, resourceGroup, location, subscriptionId
| join kind = leftouter(
    resources
    | where type == "microsoft.network/connections"
    | extend id = tostring(properties.virtualNetworkGateway1.id)
    | project id
) on id
| where isempty(id1)
| project
    id,
    GWName,
    resourceGroup,
    location,
    subscriptionId,
    status=id

Fornecer comentários

Deixe-nos saber como estamos indo com uma avaliação rápida. Usamos essas revisões para melhorar e expandir ferramentas e recursos do FinOps.

Se você estiver procurando algo específico, vote em um existente ou crie uma ideia. Compartilhe ideias com outras pessoas para obter mais votos. Nos concentramos em ideias com a maioria dos votos.


Recursos relacionados:

Soluções relacionadas: