Pular para o conteúdo

Regras de políticas

O pacote de políticas são as regras da plataforma escritas como código, e esta página lista cada uma delas: o que verifica, se para uma mudança ou só alerta, e o que a sua mensagem diz para fazer no lugar. Quando um merge request falha numa regra, encontre a regra aqui, leia a alternativa e mude o código para que ele se encaixe.

A página de políticas como código explica onde as regras rodam e o que os seus dois vereditos fazem. Em resumo, as mesmas regras rodam pelo airframe validate num notebook, na validação do merge request, nas execuções do executor na aprovação, e em policy:<root> sobre o plano antes de cada apply.

Cada linha é uma regra, com três informações e uma fonte:

  • Nível é um de três:
    • recusa (deny): o job falha, e o GitLab mescla um merge request só quando o seu pipeline passa (aplicado).
    • alerta (warn): o job mostra o achado e passa. O design pede a aprovação da plataforma para cada alerta; essa aprovação é projetada, então hoje um alerta não segura nada.
    • alerta nesta versão, recusa na próxima: uma regra nova que primeiro alerta, para que os times possam corrigir o que ela recusaria. Que depois ela passe a recusar é uma convenção: nada muda o nível sozinho, e algumas regras marcadas assim ainda são alertas.
  • O que verifica diz o que a regra olha. No código de Terraform o pacote julga só os valores escritos de forma literal; no plano ele vê cada valor.
  • O que sua mensagem indica é a alternativa conforme que a mensagem nomeia, quando nomeia uma.
  • Fonte é o arquivo do pacote que guarda a regra. A lista própria do pacote é docs/policy-pack.md; uma regra cuja fonte diz que não está listada lá está no código, mas falta nessa lista.

As tabelas descrevem o pacote na versão da plataforma 2026.10.01-1, cujo commit do control-plane é c53c0bc.

Nenhum principal público

Nível
Recusa
O que verifica
Uma concessão a allUsers ou allAuthenticatedUsers em qualquer membro, vínculo ou política de IAM.
O que sua mensagem indica
Expor o serviço pelo ingresso externo atrás do IAP, que é projetado; o caminho construído é uma rota na borda compartilhada, atrás do login único.
Fonte
control-plane policy/airframe/iam.rego

Nenhum papel de proprietário ou editor

Nível
Recusa
O que verifica
Os papéis roles/owner e roles/editor, em qualquer forma de IAM. O papel de leitor é permitido: é a leitura permanente prevista no design.
O que sua mensagem indica
Conceder um papel predefinido ou personalizado.
Fonte
control-plane policy/airframe/iam.rego

Nenhuma chave de conta de serviço

Nível
Recusa
O que verifica
Qualquer recurso de chave de conta de serviço.
O que sua mensagem indica
Usar a federação de identidade de carga de trabalho.
Fonte
control-plane policy/airframe/iam.rego

Nenhuma administração de IAM para um membro não listado

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Um papel que administra IAM, como Project IAM Admin, concedido num projeto, numa pasta ou na organização a um membro que o pacote não lista para ele.
O que sua mensagem indica
Nenhuma: os papéis de uma raiz são o escopo que o seu README declara, nunca a administração de IAM.
Fonte
control-plane policy/airframe/iam.rego, input.rego; não está listada em docs/policy-pack.md

Os rótulos da plataforma

Nível
Recusa
O que verifica
Um recurso que declara rótulos precisa levar managed_by, tenant, domain, product, env e criticality. Chaves do KMS, segredos do Secret Manager e grupos do Cloud Identity estão isentos.
O que sua mensagem indica
A mensagem lista os rótulos que faltam. Os módulos do golden path colocam todos eles.
Fonte
control-plane policy/airframe/naming.rego

Os identificadores de projeto seguem as regras de nomes

Nível
Recusa
O que verifica
Um identificador de projeto escrito precisa ser o de um produto, lk-<domain>-<product>[-np]-<rnd>, o de um projeto da plataforma ou o de um playground.
O que sua mensagem indica
As regras de nomes dos contratos, seção 2.
Fonte
control-plane policy/airframe/naming.rego

Um recurso avulso precisa de um motivo

Nível
Alerta
O que verifica
Cada recurso que uma raiz de produto declara por conta própria em vez de por um módulo do golden path.
O que sua mensagem indica
Dar um motivo no merge request, e usar os módulos do golden path quando um deles cobre o recurso.
Fonte
control-plane policy/airframe/naming.rego

O nome de um recurso avulso começa com o do produto

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Um recurso avulso cujo nome não começa com o seu rótulo product e um hífen.
O que sua mensagem indica
Começar o nome com o slug do produto, como dizem as regras de nomes dos contratos.
Fonte
control-plane policy/airframe/naming.rego

Uma só região

Nível
Recusa
O que verifica
Qualquer região ou localização escrita que não seja us-central1, uma zona dentro dela, ou global.
O que sua mensagem indica
A região da plataforma, us-central1, que a mensagem nomeia.
Fonte
control-plane policy/airframe/naming.rego

Nenhum identificador ou número de projeto escrito no código

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Fora das fábricas de projetos, qualquer texto com a forma de um identificador ou de um número de projeto, exceto os do projeto de bootstrap e os nomes de buckets da plataforma com a mesma forma.
O que sua mensagem indica
Tirar o projeto das saídas da fábrica ou da saída Ready do produto, porque um projeto reconstruído muda os dois.
Fonte
control-plane policy/airframe/literal_ids.rego; não está listada em docs/policy-pack.md

Nenhum programa externo, leitura web ou provisionador

Nível
Recusa
O que verifica
A fonte de dados external; uma fonte de dados http para um endereço fora da lista permitida, que está vazia; e um provisionador em qualquer recurso.
O que sua mensagem indica
Nenhuma.
Fonte
control-plane policy/airframe/code.rego, data.json

Provedores permitidos e uma versão de Terraform fixada

Nível
Recusa
O que verifica
No código, um provedor de fora dos namespaces permitidos (hashicorp/, gitlabhq/, grafana/, integrations/), e uma raiz sem required_version. Que o backend.tf tenha só o backend está na lista do pacote, mas nenhuma regra o verifica, então essa parte é projetada.
O que sua mensagem indica
Fixar a versão de Terraform da plataforma.
Fonte
control-plane policy/airframe/code.rego, data.json

Estado remoto só entre pares declarados

Nível
Recusa
O que verifica
Numa raiz de produto, ler o estado de outra raiz, exceto uma raiz de prévia que lê o estado de não produção do seu produto.
O que sua mensagem indica
Nada além da regra: ler estado é só para os pares de produtor e consumidor declarados.
Fonte
control-plane policy/airframe/code.rego, data.json

Ingresso só com login único ou pela borda

Nível
Recusa
O que verifica
Um serviço do Cloud Run aberto a todo o tráfego sem IAP, a não ser que seja o serviço de uma prévia ou um serviço nomeado da plataforma que se autentica sozinho; e ingresso só pelo balanceador num serviço que não está na borda compartilhada nem registrado para ingresso externo.
O que sua mensagem indica
Uma prévia é alcançada pelo seu roteador com a verificação de invocador ligada; os outros serviços vão para a borda compartilhada.
Fonte
control-plane policy/airframe/cloud_run.rego

A verificação de invocador continua ligada

Nível
Recusa
O que verifica
Um serviço do Cloud Run com a verificação de invocador desligada, exceto um serviço nomeado que se autentica sozinho numa raiz da plataforma ou um serviço na borda compartilhada.
O que sua mensagem indica
Só os serviços nomeados que se autenticam sozinhos, hoje o controle de aprovação e o gateway de telemetria, ou um serviço na borda podem desligá-la.
Fonte
control-plane policy/airframe/cloud_run.rego, data.json

Um serviço da borda mantém a verificação de invocador

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Um serviço na borda compartilhada com a verificação de invocador desligada, que não seja este site.
O que sua mensagem indica
Manter a verificação ligada com o agente de serviço do IAP como único invocador, renderizando o produto de novo com os módulos atuais do golden path.
Fonte
control-plane policy/airframe/cloud_run.rego; não está listada em docs/policy-pack.md

O backend de um produto tem login único

Nível
Recusa
O que verifica
Numa raiz de produto, um serviço de backend do balanceador sem IAP.
O que sua mensagem indica
Uma rota pública usa a peça de ingresso externo, que é projetada.
Fonte
control-plane policy/airframe/cloud_run.rego; não está listada em docs/policy-pack.md

Nenhum endereço público de banco de dados

Nível
Recusa
O que verifica
Uma instância do Cloud SQL com um endereço IPv4 público.
O que sua mensagem indica
Nenhuma.
Fonte
control-plane policy/airframe/cloud_run.rego

Instâncias mínimas acima de zero

Nível
Alerta
O que verifica
Um serviço do Cloud Run que mantém instâncias rodando, além da única instância aquecida do sandbox.
O que sua mensagem indica
A aprovação da plataforma, fora da criticidade 1; a aprovação é projetada.
Fonte
control-plane policy/airframe/cloud_run.rego

Um banco de dados sidecar é só de uma prévia

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Um contêiner chamado database ao lado de um serviço que não é de uma prévia.
O que sua mensagem indica
Produção e não produção usam Cloud SQL.
Fonte
control-plane policy/airframe/cloud_run.rego; não está listada em docs/policy-pack.md

Um serviço com banco de dados sidecar roda uma instância

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Um serviço com um contêiner database que pode escalar para mais de uma instância.
O que sua mensagem indica
Rodar no máximo uma instância, porque os seus dados vivem na instância.
Fonte
control-plane policy/airframe/cloud_run.rego; não está listada em docs/policy-pack.md

Uma prévia não cria instâncias de banco de dados

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Uma instância do Cloud SQL, do Redis ou do AlloyDB rotulada com o ambiente de uma prévia.
O que sua mensagem indica
Usar a instância compartilhada do substrato de prévias ou um sidecar.
Fonte
control-plane policy/airframe/cloud_run.rego; não está listada em docs/policy-pack.md

Nenhum recurso da plataforma numa raiz de produto

Nível
Recusa
O que verifica
Numa raiz de produto, qualquer um dos tipos que a plataforma detém, como redes, sub-redes, regras de firewall, zonas DNS, certificados, projetos, pastas, APIs habilitadas, políticas da organização, políticas de negação, perímetros, pools de identidade, roteadores e NAT.
O que sua mensagem indica
Nenhuma: eles pertencem às raízes da plataforma.
Fonte
control-plane policy/airframe/platform_owned.rego

O Secret Manager é o único armazenamento, e nenhum valor passa pelo Terraform

Nível
Recusa
O que verifica
Uma versão de segredo com o valor em secret_data, e um segredo no Vault, na AWS ou no Azure. Uma versão cujo valor é só de escrita, secret_data_wo, passa, porque fica fora do plano e do estado.
O que sua mensagem indica
Um mantenedor adiciona o valor no Secret Manager, ou o valor é só de escrita.
Fonte
control-plane policy/airframe/platform_owned.rego

Nenhum projeto, banco de dados, bucket ou repositório é destruído fora de uma remoção

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Um plano que destrói ou substitui um projeto, uma instância do Cloud SQL, um bucket ou um repositório do GitLab, a não ser que pertença a um produto que o catálogo dá como removido com a data já passada. A proteção contra exclusão que as fábricas de projetos colocam nos projetos de um produto ativo é o piso abaixo dela.
O que sua mensagem indica
Colocar o ciclo de vida do produto como removido, depois de retire_after, no catálogo.
Fonte
control-plane policy/airframe/lifecycle.rego

O runner confiável não é substituído pelo próprio pipeline

Nível
Recusa
O que verifica
Um plano que apaga ou substitui a instância do runner confiável, o que encerraria o job que o aplica.
O que sua mensagem indica
Aplicar esse plano de um notebook com a concessão platform-apply.
Fonte
control-plane policy/airframe/runner.rego; não está listada em docs/policy-pack.md

Estas regras leem o .gitlab-ci.yml de um repositório. Os repositórios da plataforma estão isentos das que tratam do arquivo de um produto.

O arquivo de um produto mantém as inclusões da plataforma

Nível
Alerta nesta versão, recusa na próxima
O que verifica
O arquivo de um produto precisa incluir tf-apply e drift-report, não pode incluir de novo os componentes injetados validate ou build-test, não pode nomear um job como um job da plataforma, como plan: ou gate:, e não pode declarar os estágios de políticas.
O que sua mensagem indica
Manter as inclusões que o template renderizou, remover uma inclusão injetada ou um estágio de políticas, e dar outro nome ao job próprio.
Fonte
control-plane policy/airframe/pipeline.rego

Os componentes são fixados num commit

Nível
Alerta nesta versão, recusa na próxima
O que verifica
Em cada repositório, um componente do control-plane incluído num branch, numa tag ou num commit abreviado.
O que sua mensagem indica
Fixá-lo num commit completo do control-plane, como faz airframe pin <sha>.
Fonte
control-plane policy/airframe/pipeline.rego

Um job próprio de um produto nunca faz deploy

Nível
Recusa
O que verifica
Um job de um produto que declara um environment, diretamente ou por extends; uma inclusão que não é um componente; e um job que dispara outro pipeline.
O que sua mensagem indica
Remover o ambiente e fazer o deploy pelo componente tf-apply.
Fonte
control-plane policy/airframe/pipeline.rego, docs/adr/0026-a-product-job-never-deploys.md

Só os componentes da plataforma

Nível
Recusa
O que verifica
A inclusão, num produto, de um componente que não é um dos oito do próprio control-plane: tf-apply, drift-report, image-build, promote-artifact, catalog-publish, reconcile, validate e build-test.
O que sua mensagem indica
A mensagem lista os oito componentes que um produto pode incluir.
Fonte
control-plane policy/airframe/pipeline.rego

As imagens partem de uma imagem base da plataforma

Nível
Recusa
O que verifica
Em cada Dockerfile que .airframe/images.yaml lista, cada FROM e cada COPY --from ou ADD --from que não seja um estágio do mesmo arquivo precisa nomear uma imagem base da plataforma, fixada por uma tag diferente de latest ou por um digest, e nunca calculada a partir de um argumento de build.
O que sua mensagem indica
Construir a partir da imagem base da plataforma para a pilha, nomeada pela sua tag ou pelo seu digest.
Fonte
control-plane policy/airframe/dockerfile.rego, docs/adr/0014-approved-base-images-built-in-project-and-checked-on-every-from.md

Estas regras rodam no executor, sobre os planos com preço de um merge request aprovado, e decidem o status da verificação Airframe cost. Um plano sem preço, por exemplo sem uma chave do Infracost, não é julgado.

Um aumento de custo grande

Nível
Alerta
O que verifica
Uma mudança que acrescenta mais de 10 dólares americanos por mês, ou mais de 25 por cento.
O que sua mensagem indica
A aprovação da plataforma, que é projetada.
Fonte
control-plane policy/airframe/cost.rego; não está listada em docs/policy-pack.md

O orçamento se mantém

Nível
Recusa
O que verifica
Uma mudança cujo custo mensal projetado para o produto passa do seu monthly_budget no catálogo.
O que sua mensagem indica
Aumentar o orçamento com um merge request do catálogo que os líderes do domínio aprovem, antes que esta mudança possa ser mesclada.
Fonte
control-plane policy/airframe/cost.rego; não está listada em docs/policy-pack.md

Estes limites estão em aberto nesta versão da plataforma, e a página de afirmações e mecanismos os lista com o resto:

  • Um recurso avulso gera alerta, nunca recusa. Um produto pode declarar recursos fora dos módulos do golden path; as regras de recusa continuam valendo para eles, assim como as regras sobre os tipos que a plataforma detém.
  • Um recurso sem atributo de rótulos passa pela regra de rótulos, que verifica só os rótulos que um recurso declara.
  • Os Dockerfiles são reconhecidos pelo nome do arquivo. A validação do merge request julga uma mudança só num Dockerfile listado quando o arquivo se chama Dockerfile, Dockerfile.*, *.Dockerfile ou *.dockerfile. Um arquivo listado com outro nome, como Containerfile, só é julgado quando o merge request também muda outro arquivo que a validação observa.
  • Um alerta não segura nada, e nada aplica o rótulo warn nem abre uma exceção: a aprovação e o registro de exceções são projetados.

Onde fica

No repositório control-plane:

Licença MIT. Copyright dos colaboradores do Airframe.

Este site descreve a versão 2026.10.20-1 da plataforma.