Ícone do site Aprenda Golang

Configurações seguras com Secrets

Dando continuidade a nossa série de posts sobre Kubernetes, assim como dito no post sobre ConfigMap, nesse post vamos falar um pouco sobre como mandar uma configuração segura utilizando o recurso Secrets.

Esse recurso, como você já deve estar pensando, é utilizado para guardar dados sensíveis, como senhas, tokens de acesso ou chaves de API que sua aplicação precisa para funcionar, mas que não devem ser armazenadas diretamente no código, no manifesto do Deployment ou em ConfigMap.

Criando uma Secret

Assim como o recurso ConfigMap, Secrets são bem simples de serem criados, já que basicamente só precisamos nos preocupar com o atributo data.

apiVersion: v1
kind: Secret
metadata:
  name: database-credentials
type: Opaque
data:
  USERNAME: c3VfcGFzc3dvcmQ=
  PASSWORD: c3VfcGFzc3N3b3JkIA==

Neste manifesto, definimos:

Você pode salvar este manifesto em um arquivo YAML (ex: database-credentials.yaml) e então aplicar usando:

kubectl apply -f database-credentials.yaml

Outra forma de criar uma secret seria utilizando o comando kubectl create secret.

kubectl create secret generic database-credentials \\
  --from-literal=USERNAME=seu_usuario \\
  --from-literal=PASSWORD=sua_senha_segura

Lembre-se de, por motivos de segurança, nunca inclua dados sensíveis diretamente no manifesto ou em ConfigMaps. Sempre criptografe ou codifique seus dados antes de armazená-los.

Tipos de segredos no Kubernetes

O Kubernetes oferece suporte a diferentes tipos de Secrets, cada um com suas próprias características e casos de uso:

Tipo de Secreto“Type” no manifestoDescrição
Opaco“Opaque”Armazena dados arbitrários codificados em Base64. Ideal para senhas, tokens de acesso e chaves secretas.
Docker registrykubernetes.io/dockercfgArmazena credenciais para acessar registros Docker privados.
TLSkubernetes.io/tlsArmazena certificados e chaves privadas para estabelecer conexões TLS seguras.
Serviço de contakubernetes.io/service-account-tokenArmazena o token de autenticação associado a um serviço de conta do Kubernetes.
Bootstrappingbootstrap.kubernetes.io/tokenUsado durante o processo de bootstrapping do nó para assinar ConfigMaps conhecidos.

NOTA: como o Kubernetes é uma ferramenta em constante evolução, é extremamente importante ficar de olho na sua documentação oficial. Isso por que, com o tempo, além de alguns tipos poderem ser depreciados, novos podem ser adicionados.

Exemplo de uso com Deployment

Vamos simular um cenário onde nossa aplicação precisa se conectar a um banco de dados usando uma senha armazenada com segurança.

Para utilizar os dados da secret que criamos anteriormente, precisamos configurar um deployment como o exemplo abaixo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: minha-aplicacao
spec:
  template:
    spec:
      containers:
      - name: app
        env:
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: database-credentials
              key: USERNAME
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: database-credentials
              key: PASSWORD

No deployment, referenciamos a Secret usando valueFrom e secretKeyRef. Nos atributos name e key configuramos, respectivamente, o nome da Secret, seguido pela chave que definimos no manifesto da Secret.

Um detalhe importante aqui é que, o nome da variável de ambiente não precisa ser igual a chave que criamos na Secret.

Boas Práticas

Para manter os dados das Secrets ainda mais seguros, embora não seja obrigatório, é importante seguir as boas práticas:

Conclusão

O recurso Secret é uma peça fundamental para garantir a segurança e confidencialidade das suas aplicações no Kubernetes. Ao utilizar os tipos corretos e seguir as melhores práticas, você pode proteger suas informações sensíveis e manter sua infraestrutura segura.

No próximo post, vou mostrar como armazenar os valores das secrets em um cofre fora do ambiente Kubernetes.

Para ser notificado assim que o post sair, se inscreva na nossa newsletter. Além ficar atualizado, você ainda ganha 20% de desconto em qualquer treinamento, incluindo o curso de Containers & Kubernetes.

Até a próxima!


Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre Kubernetes.

Sair da versão mobile