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.
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"
}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.
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.
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.
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
}
}
}
}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.
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:
A integração da Frust gera um impacto econômico mínimo na sua conta. Veja o detalhamento por recurso:
O único recurso que gera custo é o bucket S3 criado pelo FrustCUR Stack para armazenar os relatórios de faturamento:
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 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:
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.