Pular para o conteúdo principal

🔐 Segurança

Introdução

A segurança é uma prioridade máxima no Semaphore UI. Seja automatizando tarefas críticas de infraestrutura ou gerenciando o acesso da equipe a sistemas sensíveis, o Semaphore UI foi projetado para oferecer operações robustas e seguras desde a instalação. Esta seção descreve como o Semaphore lida com a segurança e o que você deve considerar ao implantá-lo em produção.

Autenticação e autorização

O Semaphore oferece suporte a autenticação segura e a mecanismos flexíveis de autorização:

  • Métodos de login:

    • Usuário/senha
      Método padrão que usa credenciais armazenadas no banco de dados do Semaphore. As senhas são armazenadas com hash usando um algoritmo forte (bcrypt).

    • LDAP
      Permite a integração com serviços de diretório corporativos. Oferece suporte a filtragem de usuários/grupos e a conexões seguras via LDAPS.

    • OpenID Connect (OIDC)
      Permite o login único (SSO) com provedores de identidade como Google, Azure AD ou Keycloak. Oferece suporte a claims personalizadas e mapeamento de grupos.

  • Autenticação de dois fatores (2FA)
    A 2FA baseada em TOTP está disponível e é recomendada para todos os usuários. Ela pode ser habilitada por usuário e oferece suporte a códigos de recuperação opcionais. Consulte as opções de configuração auth.totp.enabled e auth.totp.allow_recovery.

  • Controle de acesso baseado em funções
    Você pode atribuir diferentes funções aos usuários, como Admin, Maintainer ou Viewer, limitando o acesso conforme a responsabilidade.

  • Gerenciamento de sessões
    As sessões são protegidas com cookies HTTP seguros. Os mecanismos de expiração de sessão e de logout garantem uma exposição mínima.

Segredos e credenciais

Gerenciar segredos com segurança é um recurso central:

  • Key Store criptografado
    Credenciais e variáveis secretas são criptografadas em repouso usando criptografia AES.

  • Isolamento de ambiente
    Os segredos são passados aos jobs apenas em tempo de execução e não são expostos diretamente ao ambiente do contêiner.

  • Chaves SSH e tokens
    Os usuários são responsáveis por enviar chaves SSH e tokens válidos. Eles são criptografados e usados apenas durante a execução das tarefas.

  • Integração com HashiCorp Vault (Pro)
    Os segredos podem ser armazenados em uma instância externa do Vault. Escolha o armazenamento por segredo ao criar ou editar um segredo.

Criptografia de dados

Os dados sensíveis são armazenados no banco de dados de forma criptografada. Você deve definir a opção de configuração access_key_encryption no arquivo de configuração para habilitar a criptografia das Access Keys. Ela deve ser gerada pelo comando:

head -c32 /dev/urandom | base64

Execução de código / playbooks não confiáveis

O Semaphore executa playbooks e comandos definidos pelo usuário, o que pode ser arriscado:

  • Isolamento em contêineres
    As tarefas são executadas em contêineres Docker isolados. Esses contêineres não têm acesso ao sistema host.

  • Privilégio mínimo
    Os contêineres são executados com permissões mínimas e podem ser restringidos ainda mais usando flags do Docker.

  • Execução em chroot
    O Semaphore pode executar tarefas dentro de um chroot jail para isolar ainda mais o ambiente de execução do sistema host.

  • Usuário do processo da tarefa
    As tarefas podem ser executadas sob um usuário de sistema dedicado e não root (por exemplo, semaphore) para reduzir o impacto de possíveis exploits. Isso é opcional e pode ser configurado conforme as políticas do sistema.

Implantação segura

Para garantir que o Semaphore seja implantado com segurança:

  • Use HTTPS
    O Semaphore oferece suporte a HTTPS tanto por meio do seu suporte TLS integrado quanto por meio de um proxy reverso como o Nginx. É altamente recomendável habilitar o HTTPS em produção.

    Para habilitar o suporte HTTPS integrado, adicione o seguinte bloco ao config.json:

    {
    ...
    "tls": {
    "enabled": true,
    "cert_file": "/path/to/cert/example.com.cert",
    "key_file": "/path/to/key/example.com.key"
    }
    ...
    }
  • Execute atrás de um firewall
    Limite o acesso ao Semaphore UI e ao banco de dados apenas a IPs confiáveis.

  • Segurança do banco de dados
    Use senhas fortes e restrinja o acesso ao banco de dados apenas ao Semaphore.

Atualizações e gerenciamento de patches

Atualizações de segurança são publicadas regularmente:

  • Mantenha-se atualizado
    Use sempre a versão estável mais recente.

  • Changelog
    Revise as alterações no GitHub antes de atualizar.

  • Atualizações automáticas
    Se estiver usando Docker, considere pipelines de automação para atualizações regulares.

Relato de vulnerabilidades

Encontrou uma vulnerabilidade? Ajude-nos a manter o Semaphore seguro:

Prazos-alvo para correção de vulnerabilidades

Nosso objetivo é corrigir as vulnerabilidades relatadas dentro dos seguintes prazos-alvo:

  • Crítica: em até 30 dias
  • Alta: em até 60 dias
  • Média: em até 90 dias
  • Baixa: melhor esforço, normalmente em até 180 dias

Patches fora do ciclo podem ser lançados para problemas ativamente explorados que afetem as versões estáveis mais recentes.

Ferramentas de segurança de código

Usamos CodeQL, Codacy, Snyk e Renovate para analisar a base de código e as dependências, e para automatizar as atualizações de dependências.

  • Sem exploits públicos
    Não divulgue vulnerabilidades publicamente até que sejam corrigidas.

  • Agradecimentos
    Pesquisadores de segurança podem ser mencionados nas notas de versão, se desejarem.