Anexo Técnico – Integração com AWS

Este é o guia técnico completo dos recursos que a Frust implanta para se conectar à sua conta AWS. Aqui você encontrará todos os stacks de CloudFormation, funções IAM e permissões envolvidas — tanto na avaliação gratuita quanto no serviço de produção — junto com uma explicação clara do que a Frust pode e não pode fazer com esses acessos.

1. Principal AWS da Frust

Na AWS, um Principal é a identidade autorizada a realizar ações — neste caso, a conta AWS que a Frust usa para acessar seu ambiente. Ao implantar um stack de CloudFormation da Frust, é criada uma função IAM em sua conta que apenas este Principal específico pode assumir. Isso significa que nenhuma outra conta ou usuário AWS pode usar essa função.

Todo acesso da Frust à sua conta AWS é feito por meio do seguinte principal AWS, que assume funções criadas em sua conta via CloudFormation:

"Principal": {
  "AWS": "arn:aws:iam::064816466676:root"
}

2. Stack de Avaliação (Onboarding)

Este stack é instalado durante a avaliação gratuita.

É implantado a partir do Guia de Onboarding e cria uma função IAM somente leitura. Seu propósito é permitir ao Frust analisar o consumo cloud do cliente durante o período de teste, sem modificar nenhum recurso. Guia de Onboarding.

{
  "Type": "AWS::IAM::Role",
  "Properties": {
    "RoleName": "FrustEvaluation",
    "AssumeRolePolicyDocument": {
      "Principal": { "AWS": "arn:aws:iam::064816466676:root" },
      "Condition": { "StringEquals": { "sts:ExternalId": "<unique-per-client>" } }
    },
    "Policies": [
      {
        "PolicyName": "GeneralPolicy",
        "Action": [
          "ce:Describe*", "ce:Get*", "ce:List*",
          "ec2:Describe*",
          "savingsplans:Describe*", "savingsplans:List*",
          "rds:Describe*", "rds:List*"
        ]
      }
    ]
  }
}

Permissões limitadas à leitura de custos, savings plans e configuração de instâncias EC2 e RDS. A função pode ser excluída a qualquer momento pelo console AWS. Ao contratar o serviço completo, este stack é substituído pelo ClientStack — ambas as funções têm nomes distintos (FrustEvaluation vs FrustCloudformation) e não geram conflito.

3. Stacks de Produção (Cliente Ativo)

Estes stacks são instalados somente ao contratar o serviço.

A Frust implanta até dois stacks de CloudFormation dependendo dos serviços contratados. Cada stack cria funções IAM específicas e limitadas.

3.1 ClientStack (Função IAM Frust – MPA / Conta Principal)

Este stack é implantado na conta AWS principal do cliente (Management Account). Ele cria uma função IAM chamada FrustCloudformation que permite à Frust ler metadados de custos, uso e recursos.

{
  "Type": "AWS::IAM::Role",
  "Properties": {
    "RoleName": "FrustCloudformation",
    "AssumeRolePolicyDocument": {
      "Principal": { "AWS": "arn:aws:iam::064816466676:root" },
      "Condition": { "StringEquals": { "sts:ExternalId": "<unique-per-client>" } }
    },
    "Policies": [
      {
        "PolicyName": "GeneralPolicy",
        "Action": [
          "application-autoscaling:Describe*",
          "autoscaling:Describe*",
          "ce:Describe*", "ce:Get*", "ce:List*",
          "cloudwatch:GetMetricData",
          "cloudformation:Describe*",
          "pricing:DescribeServices",
          "pricing:GetAttributeValues",
          "pricing:GetProducts",
          "savingsplans:Describe*", "savingsplans:List*",
          "organizations:List*", "organizations:Describe*",
          "organizations:InviteAccountToOrganization",
          "aws-portal:ViewBilling", "aws-portal:ViewUsage"
        ]
      },
      {
        "PolicyName": "EC2Policy",
        "Action": [
          "ec2:Describe*",
          "ecs:DescribeContainerInstances", "ecs:List*",
          "eks:Describe*", "eks:List*"
        ]
      },
      {
        "PolicyName": "RDSPolicy",
        "Action": ["rds:Describe*", "rds:List*"]
      },
      {
        "PolicyName": "RedShiftPolicy",
        "Action": ["redshift:Describe*"]
      },
      {
        "PolicyName": "PolicyES",
        "Action": ["es:Describe*", "es:List*"]
      },
      {
        "PolicyName": "ElasticCachePolicy",
        "Action": ["elasticache:List*", "elasticache:Describe*"]
      }
    ]
  }
}

Segurança: A função usa uma condição ExternalID (sts:ExternalId) exclusiva por cliente para evitar ataques do tipo confused deputy. Apenas o principal da Frust (arn:aws:iam::064816466676:root) pode assumir esta função.

Este stack inclui organizations:InviteAccountToOrganization, que a Frust utiliza para vincular suas contas de faturamento à organização do cliente e habilitar o compartilhamento de Savings Plans. Ver seção 4 para o detalhamento do fluxo.

A permissão cloudformation:Describe* se aplica a todos os stacks da conta, não apenas aos da Frust. A Frust a utiliza exclusivamente para verificar que seus próprios stacks estão corretamente implantados e para detectar mudanças de configuração que possam afetar o serviço. Nenhuma informação sobre outros stacks do cliente é armazenada ou processada.

A permissão ec2:Describe* permite à Frust entender a arquitetura cloud do cliente e detectar mudanças no ambiente que possam requerer ajustes nos contratos de economia vigentes.

3.2 FrustCUR Stack (Relatório de Custo e Uso)

Este stack configura um relatório de Custo e Uso (CUR2) na conta do cliente e o entrega em um bucket S3 privado. A Frust recebe acesso de leitura a este bucket para recuperar dados de faturamento.

{
  "Resources": {
    "CURS3Bucket": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": "cur-reports-{AccountId}",
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "LifecycleConfiguration": {
          "TransitionToGlacierAfterDays": 30,
          "ExpirationInDays": 180
        }
      }
    },
    "CURS3BucketPolicy": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Principal": {
          "AWS": "arn:aws:iam::064816466676:root",
          "Service": [
            "billingreports.amazonaws.com",
            "bcm-data-exports.amazonaws.com"
          ]
        },
        "Action": [
          "s3:GetObject",
          "s3:PutObject",
          "s3:GetBucketPolicy",
          "s3:GetBucketLocation",
          "s3:ListBucket"
        ]
      }
    },
    "CUR2Report": {
      "Type": "AWS::BCMDataExports::Export",
      "Properties": {
        "Format": "PARQUET",
        "Compression": "PARQUET",
        "TimeGranularity": "HOURLY",
        "IncludeResources": true,
        "IncludeSplitCostAllocationData": true
      }
    }
  }
}

4. Organizações AWS Multi-Conta e SCPs

Quando o cliente opera uma organização AWS com múltiplas contas, o serviço da Frust opera a partir de contas próprias da Frust que são vinculadas à organização do cliente. Para que isso funcione corretamente, a Conta de Gerenciamento (MPA) do cliente não deve bloquear as seguintes ações nas contas membro da organização:

Ações necessárias nas contas membro da Frust:

{
  "FrustIAMRole @ Customer MPA": {
    "Action": [
      "organizations:List*",
      "organizations:Describe*",
      "organizations:InviteAccountToOrganization"
    ]
  },
  "FrustIAMRole @ Member (Internal) Accounts": {
    "Action": [
      "organizations:AcceptHandshake",
      "organizations:DeclineHandshake",
      "organizations:LeaveOrganization"
    ]
  }
}

SCPs que podem bloquear o serviço

Se a organização do cliente tiver Service Control Policies (SCPs) que negam qualquer uma das ações acima no nível organizacional, o serviço da Frust não poderá operar corretamente. Isso é especialmente comum em organizações com políticas de segurança rígidas.

A Frust pode ajudar

Se um SCP estiver bloqueando essas ações, a Frust pode auxiliar na configuração de um SCP personalizado que permita explicitamente que as contas da Frust executem essas ações, sem afetar as restrições aplicadas ao restante da organização.

Por que a Frust precisa de organizations:InviteAccountToOrganization

O modelo de serviço da Frust funciona adquirindo Savings Plans e Reserved Instances em suas próprias contas de faturamento e compartilhando-os com a organização do cliente para gerar economias. Para que a AWS permita esse compartilhamento, as contas de faturamento da Frust devem pertencer à mesma organização AWS do cliente, pelo menos temporariamente durante a ativação. A permissão organizations:InviteAccountToOrganization permite à Frust iniciar esse convite a partir da conta de gerenciamento do cliente. O processo completo é: (1) a Frust solicita o convite a partir da MPA do cliente, (2) a conta da Frust aceita o convite, (3) a AWS habilita o compartilhamento de compromissos entre as duas organizações. Em nenhum momento a Frust acessa dados do cliente por meio desse fluxo — trata-se exclusivamente de uma operação de associação organizacional.

5. O Que a Frust Pode Fazer Com Essas Permissões

Stack de Avaliação

  • Ler dados do AWS Cost Explorer (custos, uso, tendências históricas)
  • Visualizar o inventário de instâncias reservadas e savings plans
  • Descrever recursos de EC2 e RDS (tipos, configurações)

Stacks de Produção (Cliente Ativo)

  • Tudo acima, mais:
  • Ler os Relatórios de Custo e Uso (CUR) para calcular tendências históricas detalhadas
  • Descrever recursos de ECS, EKS, ElastiCache, ElasticSearch e Redshift
  • Listar e descrever a estrutura do AWS Organizations para análise multi-conta
  • Ler métricas completas do CloudWatch para otimização avançada de recursos
  • Acessar metadados de autoscaling para recomendações inteligentes de scaling
  • Visualizar savings plans ativos e reservas para gestão de compromissos
  • Acessar dados de faturamento consolidado em organizações multi-conta
  • Ser convidado para a organização AWS do cliente (InviteAccountToOrganization): isso permite que os Savings Plans e Reserved Instances da Frust cubram o consumo do cliente através do faturamento consolidado. O cliente mantém 100% da independência e propriedade de suas contas em todo momento.

5. O Que a Frust Não Pode Fazer

A grande maioria das permissões é de somente leitura (Describe*, List*, Get*). Como exceção, um conjunto reduzido de ações de escrita existe exclusivamente para gerenciar o ciclo de vida dos compromissos cloud (organizations:InviteAccountToOrganization, organizations:AcceptHandshake, organizations:LeaveOrganization) — essas ações não são exercidas sobre dados ou recursos do cliente, mas sobre a associação à organização AWS da Frust. Fora dessas exceções, a Frust explicitamente não pode:

  • Acessar, ler, modificar ou excluir quaisquer dados armazenados em seus bancos de dados, buckets S3 (exceto o bucket CUR), repositórios de código-fonte, contêineres ou instâncias
  • Criar, modificar ou excluir recursos AWS em sua conta (fora das ações de gestão de compromissos descritas acima)
  • Modificar funções IAM, políticas ou permissões além daquelas criadas pelos stacks de CloudFormation
  • Acessar logs de aplicação, segredos, variáveis de ambiente ou arquivos de configuração
  • Realizar operações de escrita em sua infraestrutura (sem ec2:Run*, sem s3:Put* além do bucket CUR, sem rds:Create*, etc.)
  • Acessar o conteúdo de suas cargas de trabalho nem quaisquer dados de negócios processados em seu ambiente cloud

6. Custo que a Integração Gera na Sua Conta AWS

A integração da Frust gera um impacto econômico mínimo na sua conta. Veja o detalhamento por recurso:

Custo zero ou desprezível

  • Funções IAM (ClientStack, MarketplaceStack, Stack de Avaliação): funções IAM não têm custo na AWS.
  • Stacks de CloudFormation: a implantação e manutenção de stacks não tem custo.
  • Savings Plans API (savingsplans:Describe*, List*): as chamadas somente leitura à API do Savings Plans não têm custo na AWS.
  • CloudWatch GetMetricData: as chamadas ao GetMetricData custam $0,01 USD por 1.000 métricas solicitadas. O uso da Frust é mínimo e pontual — representa centavos por mês.
  • BCM Data Exports (CUR): a exportação em si não tem custo adicional.

Custo menor (apenas com FrustCUR Stack)

O único recurso que gera custo é o bucket S3 criado pelo FrustCUR Stack para armazenar os relatórios de faturamento:

  • ·Armazenamento S3 Standard (primeiros 30 dias): ~$0,023/GB. Para uma conta típica, o CUR em formato PARQUET ocupa entre 100 MB e 1 GB por mês — menos de $0,03/mês.
  • ·Armazenamento S3 Glacier (dias 30–180): os arquivos migram automaticamente para o Glacier Instant Retrieval a ~$0,004/GB, reduzindo o custo a centavos.
  • ·Exclusão automática: os arquivos são excluídos automaticamente após 180 dias. O armazenamento não se acumula indefinidamente.
  • ·Cost Explorer API (ce: *): as chamadas à API do Cost Explorer custam $0,01 USD por solicitação. O uso da Frust é mínimo — tipicamente menos de 100 chamadas por mês, menos de $1 USD/mês.
Custo total:A integração da Frust na sua conta AWS é inferior a $0,05 USD por mês para a grande maioria dos clientes.

6. Conformidade com SOC 2 e ISO 27001

O modelo de acesso descrito neste anexo foi projetado para ser compatível com SOC 2 (Critérios de Serviços de Confiança) e ISO 27001. A seguir, um mapeamento ponto a ponto de como a integração da Frust atende aos requisitos de cada framework.

Toda a atividade da Frust em sua conta AWS é registrada automaticamente no AWS CloudTrail sob sua própria conta, sem nenhuma configuração adicional. O cliente pode auditar ou configurar alertas sobre essa atividade a qualquer momento.

SOC 2 — Critérios de Serviços de Confiança

SOC 2 avalia cinco Critérios de Serviços de Confiança: Segurança, Disponibilidade, Integridade do Processamento, Confidencialidade e Privacidade. Veja como a integração da Frust aborda os critérios relevantes para este modelo de acesso:

  • Segurança (CC6): O acesso ao seu ambiente é estritamente controlado por funções IAM com políticas de mínimo privilégio. A condição ExternalID previne a assunção não autorizada de funções. Não há acesso permanente — a Frust usa credenciais STS temporárias que expiram automaticamente.
  • Confidencialidade (CC9): A Frust acessa apenas metadados de recursos cloud (tipos de instância, padrões de uso, dados de faturamento). Nenhum dado de negócio, dado de aplicação, segredo ou código-fonte é acessado ou armazenado pela Frust.
  • Disponibilidade (A1): A integração da Frust não está no caminho de dados de suas cargas de trabalho. Suas aplicações continuam funcionando independentemente do status do serviço da Frust. Os stacks de CloudFormation são funções IAM passivas que não introduzem nenhuma dependência de disponibilidade.
  • Integridade do Processamento (PI1): Todas as recomendações e ações da Frust são baseadas exclusivamente nos metadados que você autoriza. Nenhuma modificação é feita em sua infraestrutura sem uma ação explícita através da plataforma Frust.
  • Privacidade (P1–P8): A Frust não coleta nem processa dados pessoais através da integração com a AWS. No entanto, os dados de faturamento CUR podem conter informações pessoais indiretas se o cliente usar tags de recursos com nomes ou endereços de e-mail. A Frust trata todos os dados de faturamento com as mesmas garantias de confidencialidade que aplica a qualquer dado pessoal.

ISO 27001 — Mapeamento de Controles Principais

ISO 27001 é uma norma internacional para gestão de segurança da informação. Ela define um conjunto de controles (o catálogo Anexo A) que as organizações devem implementar para proteger seus ativos de informação. Quando uma empresa é certificada ISO 27001, significa que um auditor independente verificou que esses controles estão efetivamente implementados e funcionando. O mapeamento abaixo mostra quais controles específicos desse catálogo se aplicam à integração da Frust com seu ambiente AWS.

  • Mínimo privilégio (A.9.4): Todas as funções IAM concedem apenas as permissões mínimas necessárias para a prestação dos serviços contratados.
  • Sem acesso a dados de negócio (A.9.4.1): A Frust acessa apenas metadados de infraestrutura cloud — não dados processados ou armazenados pelas suas cargas de trabalho.
  • Condição ExternalID (A.9.2): Previne a assunção não autorizada de funções (ataque confused deputy), conforme as melhores práticas da AWS.
  • Trilha de auditoria (A.12.4): Todas as assunções de funções pela Frust são registradas no AWS CloudTrail em sua conta, proporcionando visibilidade total e suportando seus próprios requisitos de auditoria.
  • Segregação de dados (A.9.4.1): Os dados de faturamento CUR são armazenados em um bucket S3 privado e dedicado, com acesso restrito à Frust e aos serviços de faturamento da AWS.
  • Revogabilidade (A.9.2.6): O acesso pode ser revogado a qualquer momento excluindo os stacks de CloudFormation, o que remove todas as funções IAM concedidas à Frust.
  • Sem credenciais persistentes (A.9.2.4): A Frust utiliza credenciais temporárias STS (AssumeRole) e nunca armazena chaves de acesso de longa duração no seu ambiente.
frust
un@frust.co🇨🇱 Callao 2911, of 4144, Santiago, RM, 7550285🇺🇸 1111B S Governors Ave STE 29963, Dover, DE 19904
LinkedInAWS PartnerAWS Qualified