Kubernetes Security
medium

Kubernetes Security Question #019e3a4f

Question Statement
Kubernetes Security
#kubernetes
#secrets
#encryption
#base64
#security
Medium

Qual nível padrão de proteção é aplicado aos dados em Secrets na API do Kubernetes?

A

Os valores usam criptografia simétrica AES

B

Os valores são armazenados em texto simples

C

Os valores são codificados com hashes SHA256

D

Os valores são codificados em base64

Correct

Official Explanation / Community Explanations

Resumo

Por padrão, os Secrets do Kubernetes são armazenados em texto simples no datastore etcd, mas são codificados em base64 quando recuperados via API. A codificação base64 não é criptografia; é um esquema de codificação simples que não fornece confidencialidade. A resposta correta é que os valores são codificados em base64.

Como Funciona

Os Secrets do Kubernetes são projetados para armazenar informações sensíveis, como senhas, tokens e chaves. Quando você cria um Secret usando kubectl create secret, os dados fornecidos são codificados em base64 e armazenados no objeto da API. O servidor da API armazena o objeto Secret no etcd. Por padrão, o etcd não criptografa os dados em repouso; os dados do Secret são armazenados como texto simples no etcd. No entanto, quando você recupera um Secret via API (por exemplo, kubectl get secret mysecret -o yaml), os valores são exibidos como strings codificadas em base64. Essa codificação é meramente um formato de representação para dados binários e não fornece qualquer segurança.

Por que o Valor Correto está Certo

A afirmação "Os valores são codificados em base64" está correta porque esse é o comportamento padrão da API do Kubernetes ao retornar dados de Secret. A codificação base64 é usada para permitir que dados binários arbitrários sejam representados como strings ASCII em manifestos YAML ou JSON. Não é uma medida de segurança.

Por que os Valores Incorretos estão Errados

  • Os valores usam criptografia simétrica AES: Isso está incorreto por padrão. O Kubernetes não criptografa Secrets em repouso a menos que você configure explicitamente a criptografia em repouso usando um recurso como EncryptionConfiguration com um provedor como aescbc ou kms. Sem essa configuração, os Secrets são armazenados em texto simples no etcd.
  • Os valores são armazenados em texto simples: Isso é parcialmente verdadeiro para armazenamento no etcd (sem criptografia em repouso), mas a pergunta pergunta sobre o nível de proteção aplicado aos dados na API do Kubernetes. Quando acessados via API, os valores são codificados em base64, não em texto simples. No entanto, a codificação não protege os dados; eles ainda são facilmente decodificados. O comportamento padrão mais preciso é a codificação base64.
  • Os valores são codificados com hashes SHA256: SHA256 é uma função hash criptográfica, que é unidirecional e não reversível. Os Secrets precisam ser usados em sua forma original (por exemplo, como senha ou token), portanto não podem ser hashados. O Kubernetes não faz hash dos dados do Secret; ele armazena o valor original (codificado em base64).

Contexto Adicional

Para realmente proteger os dados do Secret, você deve habilitar a criptografia em repouso para o etcd, usar RBAC para limitar o acesso e considerar o uso de sistemas externos de gerenciamento de segredos como HashiCorp Vault. A codificação base64 padrão é trivial de reverter e não deve ser considerada uma medida de segurança.