O plano de controlo e um único binário Go, olivares, configurado por um pequeno conjunto de
flags no seu subcomando serve e um punhado de variaveis de ambiente — não um
ficheiro de configuração extenso. Os valores predefinidos são escolhidos para falhar fechado: binds loopback, TLS
ativo, sem credenciais distribuídas. Tudo abaixo e retirado das próprias definições de comando
e raiz de composição do binário; onde uma definição não pode ser confirmada no código-fonte, não
esta listada aqui.
Segredos que ligam fontes reais e custodiam chaves reais permanecem em ficheiros detidos pelo operador ou segredos montados referenciados por variavel de ambiente — nunca no armazém. Para o caminho executavel de ponta a ponta, veja o guia de auto-hospedagem; para a listagem completa de flags, veja a referência CLI.
O subcomando serve
olivares serve executa o servidor HTTP REST/web e o servidor gRPC num único
processo, com a consola web servida na mesma origem que a API. Estes são os
inputs de configuração comuns.
| Flag | Predefinido | Propósito |
|---|---|---|
--listen | 127.0.0.1:8443 | Endereço de escuta HTTP (API REST + consola web embebida). |
--grpc-listen | 127.0.0.1:8444 | Endereço de escuta gRPC (plano de controlo / ingestão de coletor). |
--data-dir | $OLIVARES_DATA_DIR ou ./olivares-data | Chave de assinatura de auditoria, material TLS e — para SQLite — o ficheiro de armazém. |
--engine | sqlite | Motor de armazém: sqlite ou postgres. |
--dsn | vazio (ficheiro SQLite no dir de dados) | String de conexão do armazém. |
--checkpoint-interval | 1h | Frequência de escrita de ponto de verificação de auditoria assinado sobre cada cadeia de inquilino. 0 desativa. |
--insecure | desligado | Serve HTTP/gRPC em texto simples. Apenas desenvolvimento localhost. |
--seed-demo | desligado | Carrega um ambiente de amostra sintético. Recusa arrancar num bind não-loopback. |
TLS esta ativo por defeito. Sem --tls-cert/--tls-key fornecidos, o motor garante
um certificado auto-assinado no diretório de dados uma vez, antecipadamente, antes de qualquer
listener aceitar uma conexão — portanto tanto os servidores HTTP como gRPC usam o mesmo
certificado e nenhum recua para texto simples. Quando gera esse certificado
regista a impressão digital SHA-256 para que os clientes possam confiar nele ou fixa-lo.
--insecure e a única forma de servir texto simples, e o caminho gRPC falha fechado:
fora de --insecure o servidor recusa construir um listener em texto simples em vez de
degradar silenciosamente. Use-o apenas contra 127.0.0.1 durante desenvolvimento local.
--seed-demo provisiona um administrador de demonstração com uma palavra-passe pública na árvore de código
e dados de ambiente fabricados — apenas para demos e E2E. O motor recusa-se a arranca-lo
se qualquer listener for não-loopback. Use um diretório de dados descartavel.
Um segundo nível de flags governa topologias distribuídas e de TLS mutuo —
--admin-dsn e --allow-privileged-db-role (Postgres), --grpc-client-ca
(TLS mutuo de coletor), e --region/--known-regions (residência de dados). Estes são
cobertos abaixo e listados na integra na referência CLI.
Variaveis de ambiente
O motor le um pequeno número de variaveis de ambiente no arranque. As abaixo são confirmadas na raiz de composição e ligação.
Diretório de dados e fontes
| Variavel | Efeito |
|---|---|
OLIVARES_DATA_DIR | Diretório de dados predefinido quando --data-dir não é dado (recua para ./olivares-data). Contém a chave de assinatura de auditoria, material TLS e o ficheiro de armazém SQLite. Persista-o entre reinicios. |
OLIVARES_SOURCES_CONFIG | Caminho para um ficheiro JSON que liga fontes de observação reais, fornecedores de roster de identidade e fontes de documentos de conhecimento antes do motor arrancar. |
OLIVARES_SOURCES_CONFIG e o único input através do qual fontes de sinal não-demo
e fornecedores de roster são resolvidos. E a configuração com segredos do operador
e e deliberadamente mantida fora do armazém. O motor le-a no arranque e regista
cada fonte antes do runtime arrancar.
O tratamento e honesto em vez de fail-fast. Uma variavel em falta, um ficheiro ilegível ou JSON invalido, ou uma lista de fontes configurada-mas-vazia todos avisam e produzem uma configuração vazia — o motor nunca aborta o arranque. Uma fonte não configurada mostra um aviso em vez de crashar o plano ou fingir que funciona: sem nada ligado, o mapa de acesso simplesmente fica vazio. Para o popular, configure pelo menos uma fonte — veja ligar uma fonte e, para o caminho cooperativo Claude Code, ligar Claude Code.
Ponto de decisão de autorização
O controlo de acesso nativo baseado em atributos e papeis sempre governa. Um ponto de decisão de políticas externo (PDP), quando selecionado, e uma camada adicional apenas de restrição que só pode estreitar a decisão que RBAC incorporado já tomou — nunca amplia-la.
| Variavel | Efeito |
|---|---|
OLIVARES_PDP_ENGINE | Seleciona o PDP externo: cedar, opa ou none (vazio/none = apenas ABAC nativo). |
OLIVARES_PDP_CEDAR_FILE | Motor Cedar: caminho para o ficheiro de políticas do operador. |
OLIVARES_PDP_OPA_URL / _OPA_PATH / _OPA_TOKEN | Motor OPA: URL base, caminho de decisão e token bearer para o endpoint Open Policy Agent. |
Dois adaptadores residem atrás de um ponto — um avaliador Cedar embebido (o caminho Go puro) e
um adaptador OPA-via-HTTP. Se OLIVARES_PDP_ENGINE seleciona um motor mas a sua config e
invalida (um ficheiro Cedar ilegível, um alvo OPA malformado), o motor desativa apenas
o PDP externo, mantém o motor ABAC nativo e RBAC a aplicar, e regista em voz alta.
Um ficheiro de políticas quebrado nunca deixa pedidos sem governança e nunca crasha o plano.
Para o modelo deny-by-default, veja governança.
Chave de assinatura de auditoria
O registo de auditoria e apenas adicao, encadeado por hash e ancorado por pontos de verificação assinados com Ed25519. A chave de assinatura por evento e resolvida no arranque, fail-closed para cada fonte custodiada.
| Variavel | Efeito |
|---|---|
OLIVARES_AUDIT_SIGNING_KEY | Chave de assinatura provisionada pelo cliente, base64, inline. |
OLIVARES_AUDIT_SIGNING_KEY_FILE | Caminho para um segredo montado contendo a chave (preferido — o valor nunca entra no ambiente do processo). |
OLIVARES_KEY_CUSTODY | Postura de custódia declarada (byok ou cmek). Um arranque cuja custódia real de chave não corresponde a declarada e recusado. |
Sem nenhuma destas definida, a chave e cunhada no primeiro arranque no diretório de dados —
o fallback honesto de no único / desenvolvimento. Partilhar uma chave entre replicas (via
o valor env ou um segredo montado) e necessário para alta disponibilidade: caso contrário cada
no cunha a sua e o registo bifurca-se no failover. A assinatura por evento permanece sempre
on-box. A custódia encapsulada por KMS (chave gerida pelo cliente) e uma postura adicional configurada
através de OLIVARES_KEY_WRAP; veja a referência CLI.
Seleção de armazém
O motor seleciona o seu armazém a partir de --engine.
| Motor | Quando usar | Notas |
|---|---|---|
sqlite (predefinido) | Binário único, no único, instalações air-gapped. | Armazém embebido Go puro, zero dependências externas. Sem --dsn, o ficheiro de armazém reside no diretório de dados. |
postgres | Implantações multi-inquilino e de escala. | Adiciona isolamento de inquilino por segurança ao nível de linha. Requer um papel de aplicação de menor privilégio. |
SQLite e o predefinido e não precisa de serviço externo — e o armazém compatível com air-gap, sem dependências para a topologia de no único, e o que a implantação Docker Compose de um comando executa. Mude para Postgres quando precisar de isolamento multi-inquilino ou escala horizontal, não antes.
Escolher postgres opta pelo backstop de segurança ao nível de linha que isola inquilinos.
O motor recusa arrancar contra um superutilizador Postgres ou papel BYPASSRLS —
o que desativaria esse backstop — a menos que --allow-privileged-db-role explicitamente
sobreponha a guarda (apenas inquilino único / descartavel). Para leituras cross-inquilino completas de Sistema
(listagem de organizações, cobertura de pontos de verificação multi-inquilino) forneca um papel admin dedicado
NOSUPERUSER BYPASSRLS via --admin-dsn; sem ele essas leituras funcionam
limitadas por RLS e podem retornar vazio. OLIVARES_DB_MAX_CONNS limita o pool de
aplicação por no.
Multi-inquilino e residência
Uma única instancia e multi-inquilino por construção em Postgres, com segurança ao nível de linha
isolando os dados de cada inquilino. A residência de dados e sobreposta por --region.
- Região única (predefinido, sem
--region): sem aplicação de residência. - Com escopo de região (
--region eu,--region us, …): a instancia serve apenas inquilinos fixados a sua região de origem e nega acesso cross-região fail-closed.--known-regionslista os códigos de região válidos em toda a implantação; a fixacao de um inquilino deve ser um deles, e uma config de região malformada falha o arranque antes do armazém abrir.
Pontos de verificação de auditoria
--checkpoint-interval controla a frequência de escrita de um ponto de verificação assinado sobre cada
cadeia de inquilino (predefinido 1h; 0 desativa). Um ponto de verificação final e escrito no
encerramento limpo antes do armazém fechar, portanto a cadeia e ancorada no encerramento assim como no
intervalo. Veja verificar uma versão para como a cadeia
assinada e verificada a jusante.
Valores seguros por defeito
Estas posturas estão em vigor sem nenhuma configuração além de serve. São a
postura predefinida do produto, não endurecimento opcional.
| Área | Predefinido | O que significa |
|---|---|---|
| Credenciais | Nenhuma distribuída | Sem nome de utilizador ou palavra-passe predefinidos. No primeiro arranque sem utilizadores, o motor cunha um token de configuração de uso único e imprime-o apenas para a saída padrão — nunca para os registos. |
| Transporte | TLS ativo | HTTP e gRPC servem sobre TLS; um certificado auto-assinado e gerado no diretório de dados se nenhum for fornecido, e a sua impressão digital e registada. |
| Endereço de bind | Loopback | --listen e --grpc-listen predefinidos para 127.0.0.1. Acessibilidade fora do host e uma decisão deliberada do operador. |
| Modo texto simples | Desligado | --insecure e a única forma de servir texto simples, e o caminho gRPC falha fechado. Apenas desenvolvimento localhost. |
| Semeadura de demo | Desligada | --seed-demo esta desligado e recusa qualquer bind não-loopback, porque cunha um administrador de demonstração com palavra-passe pública. |
| Telemetria para casa | Desligada | O motor não telefona para casa. Conexões de saída existem apenas para as fontes que configura — que é o que torna um plano de controlo air-gapped possível com zero saída de rede. |
Os binds loopback significam que o motor não é alcançável fora do host até que os mude.
Quando o pública — digamos mapeando uma porta do host em Docker Compose — TLS já esta ativo
para o proteger; não emparelhe um bind publicado com --insecure. Numa instalação nova o
motor imprime um bloco FIRST-BOOT SETUP para a saída padrão com o token de configuração
único (leia dos registos do contentor sob Compose); o administrador usa-o para criar
o primeiro utilizador, depois autentica-se.
Para o que o produto observa, onde governa e onde a cobertura e escalonada, leia honestidade e limites.