Kubernetes Security Question #019e3a4f
Qual afirmação sobre Secrets está correta?
Um Secret faz parte da especificação de um Pod.
Os dados do Secret são criptografados com a chave privada do cluster por padrão.
Os dados do Secret são codificados em base64 e armazenados sem criptografia por padrão.
Um Secret só pode ser usado para dados confidenciais.
Official Explanation / Community Explanations
Resumo
A afirmação correta é que os dados do Secret são codificados em base64 e armazenados sem criptografia por padrão. Esta é uma concepção errônea comum: embora a codificação base64 ofusque os dados, ela não fornece criptografia. Os Secrets do Kubernetes são armazenados no etcd e, a menos que a criptografia em repouso seja explicitamente configurada, os dados são armazenados como texto simples (decodificados em base64) no etcd.
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, os dados são codificados em base64 para transporte e armazenamento na API do Kubernetes. No entanto, base64 não é criptografia; é simplesmente um esquema de codificação que pode ser facilmente revertido. Por padrão, os Secrets são armazenados sem criptografia no etcd, o armazenamento chave-valor do cluster. Isso significa que qualquer pessoa com acesso ao etcd pode ler os dados do Secret. Para proteger os Secrets em repouso, você deve habilitar a criptografia em repouso configurando o recurso EncryptionConfiguration e especificando um provedor como aescbc ou kms.
Por que a Afirmação Correta está Certa
- Os dados do Secret são codificados em base64 e armazenados sem criptografia por padrão: Isso é preciso. A codificação base64 é aplicada para permitir que dados binários sejam representados como uma string em manifestos YAML/JSON. No entanto, nenhuma criptografia é aplicada por padrão. Os dados podem ser decodificados facilmente e são armazenados como texto simples no etcd, a menos que a criptografia em repouso esteja habilitada.
Por que as Afirmações Incorretas estão Erradas
-
Um Secret faz parte da especificação de um Pod: Isso está incorreto. Um Secret é um objeto separado da API do Kubernetes que é referenciado pela especificação de um Pod. A especificação do Pod pode referenciar um Secret por meio de variáveis de ambiente ou montagens de volume, mas o Secret em si não é definido dentro da especificação do Pod.
-
Os dados do Secret são criptografados com a chave privada do cluster por padrão: Isso é falso. O Kubernetes não criptografa Secrets por padrão. Embora algumas distribuições ou provedores de nuvem possam habilitar a criptografia por padrão, o padrão upstream do Kubernetes é nenhuma criptografia. A chave privada do cluster não é usada para criptografia de Secrets; a criptografia em repouso requer configuração explícita.
-
Um Secret só pode ser usado para dados confidenciais: Isso é enganoso. Embora os Secrets sejam destinados a dados sensíveis, não há restrição técnica que impeça seu uso para dados não confidenciais. No entanto, a melhor prática é usar ConfigMaps para dados de configuração não sensíveis e Secrets para dados sensíveis. A afirmação não está totalmente correta porque os Secrets podem tecnicamente armazenar qualquer dado, mas são projetados para informações confidenciais.