Secret do Kubernetes: data ou stringData e quando é necessária Base64
Os campos data e stringData de um Secret do Kubernetes representam os mesmos valores lógicos, mas são interfaces de escrita diferentes. data espera cadeias codificadas em Base64. stringData aceita texto normal e deixa que o servidor da API do Kubernetes faça a codificação.
Esta diferença importa ao escrever, rever ou editar um manifesto. Nenhum dos campos é uma fronteira de segurança: Base64 é codificação, não encriptação.
A diferença prática
Use data quando o valor já estiver serializado para a API de Secret:
apiVersion: v1
kind: Secret
metadata:
name: credenciais-app
type: Opaque
data:
username: YWRtaW4=
password: c2FtcGxlLXBhc3M=
Use stringData quando quiser escrever valores literais:
stringData:
username: admin
password: sample-pass
A documentação do Kubernetes sobre Secrets descreve stringData como uma forma prática de fornecer valores não codificados. Também avisa que stringData não funciona bem com server-side apply; confirme o seu método de implementação.
Que campo escolher?
stringData é normalmente mais legível para um manifesto novo escrito à mão, se o fluxo o suportar. data é útil quando outro sistema já gera a forma serializada, quando está a editar um manifesto existente ou quando as suas ferramentas esperam valores codificados.
Não guarde credenciais reais num repositório só porque estão em data. Qualquer pessoa que consiga ler o manifesto pode descodificá-las. O Kubernetes separa a segurança do acesso e da distribuição do Secret da sua representação em YAML.
Codificar ou descodificar localmente
Se um manifesto contiver um valor em data, descodifique uma cópia local apenas quando precisar de o inspecionar. Para criar um valor data, codifique localmente o valor original e copie apenas o resultado para o manifesto de trabalho.
O TextForge pode codificar e descodificar texto no navegador sem enviar o valor para um servidor da Wendygo. Trabalhe com uma cópia e mantenha o original no ambiente seguro. Para partilhar um manifesto, o ScrubForge é mais adequado: limpe primeiro a cópia, em vez de apenas codificar o Secret.
Lista de decisão
- Está a criar um Secret a partir de texto literal? Considere
stringDatadepois de confirmar o método de aplicação. - Está a editar um campo
dataexistente? Descodifique apenas uma cópia local quando for necessário inspecioná-lo. - A sua pipeline exige
data? Codifique localmente e valide o YAML. - O manifesto vai sair do ambiente seguro? Remova ou substitua as credenciais antes de o partilhar.
- Uma credencial pode ter sido exposta? Rode-a; codificar ou limpar não desfaz a exposição.
Consulte as boas práticas do Kubernetes para Secrets juntamente com a sua política de acesso ao cluster.
Perguntas frequentes
Os valores de data precisam de Base64?
Sim. data é serializado como cadeias Base64. stringData aceita texto normal e o Kubernetes codifica-o durante a criação ou atualização.
Devo usar data ou stringData?
Use stringData para texto literal se o seu fluxo o suportar. Use data se as suas ferramentas exigirem a forma serializada.
A Base64 protege um Secret?
Não. É codificação reversível, não encriptação. Proteja o manifesto, o cluster e o repositório.