O que é um segredo?
No contexto da segurança de aplicações, um segredo é qualquer informação que comprove, durante o processo de autenticação e autorização, que seu detentor é quem ou o que afirma ser. Se agentes mal-intencionados obtiverem acesso a segredos, eles poderão acessar seus sistemas indevidamente e usá-los para diversos fins, como roubar segredos corporativos e informações de clientes ou até mesmo sequestrar seus dados e exigir um resgate.
Um exemplo clássico é o nome de usuário e a senha que permitem que uma aplicação acesse seu banco de dados, mas um segredo também pode ser uma chave de API, credencial, certificado ou chave privada, entre outros tipos de informação. Como os segredos são usados para controlar o acesso aos ativos de uma organização, armazená-los e protegê-los com segurança é fundamental para reduzir o risco de comprometimento da organização.
O que é gerenciamento de segredos?
O gerenciamento de segredos é o processo que uma organização utiliza para:
- Identificar dados confidenciais
- Classifique os dados
- Rotule os dados
- Armazene os dados com segurança
- Distribuir segredos
- Faça a rotação (substituição) regular dos segredos
Quando as organizações migram de arquiteturas monolíticas para arquiteturas de microsserviços, o número de componentes independentes de aplicações e infraestrutura — cada um com suas próprias credenciais — aumenta, o que significa que há muito mais segredos para gerenciar.
Formas de armazenar segredos
Vamos analisar mais de perto duas opções para armazenar segredos com segurança:
Vault
A abordagem de cofre envolve a instalação de uma ferramenta de terceiros para o gerenciamento de segredos. A solução de cofre criptografa cada segredo para impedir que usuários não autorizados o acessem. O cofre disponibiliza uma API que concede aos usuários acesso aos segredos com base nas políticas estabelecidas. Quando os usuários se autenticam na API, eles só podem acessar os segredos para os quais foram autorizados.
Desvantagens:
- Você deve gerenciar por conta própria a solução e as credenciais
- Exige a criação de uma infraestrutura ao seu redor; caso contrário, é difícil para as equipes trabalharem com ela de forma independente
Prós:
- Familiaridade no setor (a maioria dos desenvolvedores sabe usar esse tipo de ferramenta)
- Integra-se facilmente a outras ferramentas fornecidas pelo fornecedor do cofre
- Alguns cofres estão disponíveis gratuitamente
Há muitas ferramentas disponíveis no mercado que os desenvolvedores podem usar para armazenar e gerenciar segredos criptografados. Para ver um exemplo de como usar uma ferramenta centralizada e automatizada de gerenciamento de segredos, leia nosso artigo no blog, “Proteção de chaves privadas SSL no NGINX com o HashiCorp Vault.”
Provedores de nuvem
Outra abordagem é usar um provedor de nuvem para o gerenciamento de segredos como serviço. Uma das vantagens é que a ferramenta de gerenciamento de segredos geralmente se integra perfeitamente a outros serviços de nuvem, como bancos de dados gerenciados. Os serviços de provedores de nuvem também podem oferecer recursos como rotação automática, embora sejam necessárias pesquisas futuras para verificar se essa opção resulta em indisponibilidade.
Desvantagem:
- Geralmente não é gratuito
Prós:
- O acesso e a interface do usuário são configurados e gerenciados pelo provedor de nuvem
- Integra-se perfeitamente a outros serviços do provedor de nuvem
- Pode ser gerenciado com uma ferramenta de infraestrutura como código
Onde não armazenar segredos
Os segredos devem ser gerenciados com cuidado para evitar interrupções no aplicativo quando forem desbloqueados e acessados. Uma prática recomendada é nunca incluir segredos em um sistema de controle de versão. Armazenar segredos nesse sistema expõe a organização a um possível desastre caso eles sejam acessados acidentalmente ou comprometidos quando uma equipe ou pessoa atualizar o código ou o aplicativo. Por esse motivo, se um segredo for incluído no controle de versão, mesmo que por pouco tempo, ele deverá ser considerado comprometido. Os dados confidenciais devem ser removidos do repositório e eliminados do histórico do sistema de controle de versão.

