Kubernetes Security Question #019e3a4f
Qual nível padrão de proteção é aplicado aos dados em Secrets na API do Kubernetes?
Os valores usam criptografia simétrica AES
Os valores são armazenados em texto simples
Os valores são codificados com hashes SHA256
Os valores são codificados em base64
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
EncryptionConfigurationcom um provedor comoaescbcoukms. 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.