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

Conectar AWS.

O GrandeTotal lê o custo diário e o detalhamento por serviço dos últimos 30 dias da sua conta AWS, via AWS Cost Explorer. O acesso é feito por uma role IAM que você cria e controla — sem chave de acesso de longa duração e sem nenhuma permissão de escrita.

O que é pedido

  • Uma role IAM que confia na conta AWS do GrandeTotal, exigindo um External ID exclusivo da sua conexão.
  • Uma política anexada a essa role com uma única ação: ce:GetCostAndUsage.
Nada além disso. A role não precisa de permissão para listar recursos, ler configuração, alterar nada ou assumir outras roles. Se um assistente ou um técnico sugerir uma política mais ampla (ReadOnlyAccess, ViewOnlyAccess etc.) para "simplificar", não é necessário para o GrandeTotal funcionar.

Passo a passo

1. Inicie a conexão no painel

Em /painel/conectar, clique em Conectar AWS. O painel gera um External ID exclusivo para essa conexão e mostra a conta AWS do GrandeTotal que precisa ser confiada — os dois valores aparecem na tela nesse momento, use exatamente o que for exibido ali.

2. Crie a role IAM na conta a conectar

No console AWS da conta que você quer conectar, vá em IAM → Roles → Create role → Custom trust policy e cole a política de confiança abaixo, substituindo os dois valores entre <> pelos que o painel mostrou:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<CONTA_AWS_DO_GRANDETOTAL>:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "<EXTERNAL_ID_MOSTRADO_NO_PAINEL>"
        }
      }
    }
  ]
}

3. Anexe a política de permissão

Crie e anexe uma política gerenciada só com esta ação, sem restrição de recurso (o Cost Explorer não é escopável por recurso):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ce:GetCostAndUsage",
      "Resource": "*"
    }
  ]
}

4. Nomeie, crie e copie o ARN

Dê um nome reconhecível à role (por exemplo, grandetotal-raiox), confirme a criação e copie o Role ARN (formato arn:aws:iam::123456789012:role/grandetotal-raiox).

Role ARN, não Policy ARN. São duas telas parecidas no console: a da role criada no passo 4 (arn:...:role/grandetotal-raiox) e a da política de permissão que você anexou no passo 3 (arn:...:policy/...). O painel só aceita o primeiro — colar o ARN da policy dá erro na verificação.

5. Cole o ARN no painel e verifique

De volta em /painel/conectar, cole o ARN e clique em Verificar e conectar. O GrandeTotal tenta assumir a role naquele instante (sessão de 15 minutos, sem credencial permanente armazenada); se a política de confiança e o External ID baterem, a conexão fica conectada.

6. Sincronize

Use o botão de sincronizar no painel para buscar os últimos 30 dias. O GrandeTotal consulta o Cost Explorer na região us-east-1 (única região onde o serviço existe) e grava o total diário e o detalhamento por serviço, com a origem aws_cost_explorer e o instante em que os valores foram observados.

Opcional: recomendações e anomalias da AWS

O AWS FinOps Agent (agente de custo da própria AWS, em prévia) lê o Cost Optimization Hub e o Cost Anomaly Detection. O GrandeTotal pode ler essas duas fontes, só em leitura, na tela /painel/aws-finops. Para isso, acrescente esta declaração à política da role (a de custo continua igual) e ative o Cost Optimization Hub no console de Billing and Cost Management (gratuito):

{
  "Effect": "Allow",
  "Action": [
    "ce:GetAnomalies",
    "cost-optimization-hub:ListRecommendations",
    "cost-optimization-hub:ListEnrollmentStatuses"
  ],
  "Resource": "*"
}

Cada leitura faz requisições ao Cost Explorer, cobradas pela AWS a US$ 0,01 na sua conta. O próprio AWS FinOps Agent não tem API: ele é usado pelo console da AWS, por um aplicativo web, e entrega relatórios no Slack e no Jira.

Opcional: custo por recurso e inventário

Na tela /painel/aws-custos o GrandeTotal mostra o custo por conta, região, tipo de uso e serviço (isso usa só ce:GetCostAndUsage, que a role já tem) e, para ir mais fundo, o custo por recurso e o inventário. Para esses dois, acrescente à política da role:

{
  "Effect": "Allow",
  "Action": [
    "ce:GetCostAndUsageWithResources",
    "ec2:DescribeRegions",
    "ec2:DescribeInstances",
    "ec2:DescribeVolumes",
    "rds:DescribeDBInstances",
    "lambda:ListFunctions",
    "ecs:ListClusters",
    "ecs:DescribeClusters",
    "ec2:DescribeAddresses",
    "s3:ListAllMyBuckets",
    "ecr:DescribeRepositories"
  ],
  "Resource": "*"
}

O custo por recurso também exige ligar, no Cost Explorer, as preferências de dados no nível de recurso (a AWS leva até 48 horas para começar a guardar e só mantém 14 dias). Cada página do Cost Explorer custa US$ 0,01 na sua conta; por isso a leitura fica guardada por 6 horas e há um limite diário. O inventário usa chamadas gratuitas de descrição.

Erros comuns

  • Não conseguimos assumir esse role: confira se o ARN colado está correto, se o External ID na política de confiança é exatamente o que o painel mostrou (sem espaços) e se a conta principal do trust policy é a conta AWS do GrandeTotal, não a sua.
  • AccessDenied ao sincronizar: confirme que a política anexada tem a ação ce:GetCostAndUsage e que o Cost Explorer está habilitado na conta (em contas recém-criadas, pode levar até 24h para os dados aparecerem).
  • Conta em AWS Organizations: o Cost Explorer só retorna os dados da conta dona da role. Para consolidado de organização, conecte a conta de pagamento (management account) com a mesma role.

Revogar o acesso

A qualquer momento, exclua a role no IAM ou remova a declaração de confiança — a próxima sincronização falha e a conexão aparece como erro no painel. Não é necessário avisar o GrandeTotal antes de revogar.

Quer saber o que existe do nosso lado para isso funcionar? Veja Segurança e acesso.