Pular para o conteúdo
Documentação · Nuvem

Conectar Azure.

O GrandeTotal lê o custo diário e o detalhamento por serviço dos últimos 30 dias de uma assinatura Azure, pela API do Cost Management. O acesso é feito por um aplicativo (Service Principal) que você cria e controla, com uma única permissão: ler custos.

O que é pedido

  • Um registro de aplicativo no Microsoft Entra ID, com um Client Secret.
  • O papel Cost Management Reader para esse aplicativo, na assinatura que você quer conectar.
  • Quatro valores: Tenant ID, Client ID, Subscription ID e o valor do Client Secret.
Nada além disso. Cost Management Reader não permite criar, alterar nem apagar recursos, nem ler o conteúdo deles. Se alguém sugerir Contributor ou Owner para "simplificar", não é necessário.

Antes de começar

  • No Entra ID: permissão para registrar aplicativos (por padrão, qualquer usuário membro pode; em alguns tenants só administradores).
  • Na assinatura: papel Owner ou User Access Administrator, que é o que permite atribuir papéis.
  • Tempo: cerca de 10 minutos. Depois de atribuir o papel, a Azure pode levar alguns minutos para propagar.

Caminho rápido: Azure CLI

Se preferir o terminal (ou o Cloud Shell do portal), três comandos fazem os passos 1 a 3 abaixo. Troque <SUBSCRIPTION_ID> pelo ID da assinatura.

az login
az account list --query "[].{nome:name, id:id, tenant:tenantId}" -o table

az ad sp create-for-rbac   --name grandetotal-leitura   --role "Cost Management Reader"   --scopes /subscriptions/<SUBSCRIPTION_ID>

A saída traz, em JSON, os valores que o painel pede:

  • appId → Client ID
  • password → Client Secret (aparece só agora; guarde)
  • tenant → Tenant ID
  • O Subscription ID é o id da assinatura na tabela do segundo comando.

Passo a passo pelo portal

1. Registre o aplicativo

No portal Azure, vá em Microsoft Entra ID → App registrations → New registration. Dê um nome reconhecível (por exemplo, grandetotal-leitura), deixe o tipo de conta padrão e registre. Na página do aplicativo, copie o Application (client) ID e o Directory (tenant) ID.

2. Crie o Client Secret

Em Certificates & secrets → New client secret, escolha uma validade (24 meses é o máximo habitual) e copie o Value na hora: ele só aparece uma vez. Não é o campo Secret ID.

3. Dê o papel de leitura na assinatura

Abra Subscriptions → sua assinatura → Access control (IAM) → Add role assignment. Escolha o papel Cost Management Reader, selecione o aplicativo criado no passo 1 e confirme. Copie também o Subscription ID da página da assinatura.

Onde achar cada valor

  • Tenant ID: Entra ID → Overview → Tenant ID, ou na página do aplicativo (Directory (tenant) ID).
  • Client ID: página do aplicativo → Application (client) ID.
  • Subscription ID: Subscriptions → sua assinatura → Subscription ID.
  • Client Secret: Certificates & secrets → coluna Value (não Secret ID).

Todos os identificadores têm o formato 00000000-0000-0000-0000-000000000000; o secret é um texto longo.

4. Cole os valores no painel

Em /painel/conectar, clique em Conectar Azure, preencha os quatro campos e clique em Verificar e conectar. O GrandeTotal faz o login e pede o custo de ontem; se o papel e o secret estiverem certos, a conexão fica conectada.

5. Sincronize

Use o botão de sincronizar no painel. A consulta ao Cost Management é gratuita (diferente do Cost Explorer da AWS), mas a Azure limita o ritmo das chamadas; por isso o GrandeTotal espera alguns minutos entre sincronizações e, se a Azure pedir, espera e tenta de novo. Os dados vêm com a origem azure_cost_management e o instante em que foram observados.

Conferir se deu certo

  • No portal, Subscriptions → Access control (IAM) → Role assignments: o aplicativo deve aparecer com Cost Management Reader e nenhum outro papel.
  • No painel, o cartão da Azure fica connected e, depois de sincronizar, o total dos últimos 30 dias deve bater com Cost Management → Cost analysis da mesma assinatura (visão Actual cost, agrupada por Service name).
  • Pelo terminal: az role assignment list --assignee <CLIENT_ID> --all -o table.

Trocar ou renovar o secret

O secret expira (a validade que você escolheu). Antes disso, crie um novo em Certificates & secrets e, no painel, refaça a conexão com o valor novo. Se esquecer, a sincronização começa a falhar e o cartão mostra erro; nada mais é afetado.

Como guardamos o secret

O Client Secret é cifrado no banco antes de ser gravado e nunca volta para a tela nem para a API do painel. Ele só é decifrado, na memória, no instante de consultar a Azure. Para a análise por IA, só vão custos agregados (nunca o secret, o Tenant ID, o Client ID ou o Subscription ID). Veja Segurança e acesso.

Erros comuns

  • Não conseguimos ler os custos dessa assinatura: confira se os quatro valores estão certos, se o secret copiado é o Value, se não expirou e se o papel foi dado na assinatura (e não só no grupo de recursos).
  • Funcionou no portal mas falha logo após atribuir o papel: espere de 5 a 10 minutos e verifique de novo; a atribuição de papéis demora a propagar.
  • Erro persistente com tudo certo: o provedor de recursos precisa estar registrado. Rode az provider register --namespace Microsoft.CostManagement (ou Subscriptions → Resource providers → Microsoft.CostManagement → Register) e tente de novo.
  • Muitas requisições em pouco tempo: a Azure responde 429 quando o ritmo é alto. O GrandeTotal espera e tenta de novo sozinho; se o erro aparecer, aguarde alguns minutos.
  • Assinatura sem custos ainda: contas novas podem levar até 24 h para mostrar dados.
  • Moeda diferente da outra nuvem: os painéis somam as nuvens em uma moeda só. Ainda não convertemos: se a AWS cobra em USD e a assinatura Azure em BRL, a sincronização é recusada com um aviso.
  • Contrato Enterprise (EA): o administrador de cobrança precisa ter habilitado AO view charges (e, para contas de departamento, DA view charges); sem isso o papel de leitura não enxerga o custo.
  • Parceiro CSP: o parceiro precisa liberar a visualização de custos para o cliente (política do Azure plan). A visão consolidada por conta de cobrança ainda não existe: lemos uma assinatura por conexão.

Revogar o acesso

A qualquer momento, remova o papel da assinatura ou apague o aplicativo/secret no Entra ID. A próxima sincronização falha e a conexão aparece como erro no painel. Não é necessário avisar o GrandeTotal.