Secrets

Nesta página, descrevemos o objeto Secret do Kubernetes e o uso dele no Kubernetes Engine.

O que é uma chave secreta?

Chaves secretas são objetos seguros que armazenam dados confidenciais, como senhas, tokens OAuth e chaves SSH, nos clusters. Armazenar dados confidenciais em chaves secretas é mais seguro que ConfigMaps em texto simples ou nas especificações de pod. O uso de chaves secretas permite controlar como os dados confidenciais são usados e reduz o risco de expor os dados a usuários não autorizados.

Também é possível criptografar Secrets na camada de aplicativos usando uma chave gerenciada no Cloud KMS. Para saber mais, consulte Criptografia de secrets da camada de aplicativos.

Como criar um Secret

Você cria uma chave secreta usando o seguinte comando:

kubectl create secret [TYPE] [NAME] [DATA]

[TYPE] pode ser:

  • generic: cria uma chave secreta a partir de um arquivo local, diretório ou valor literal.
  • docker-registry: cria uma chave secreta dockercfg para uso com um registro do Docker. Usado para autenticação nos registros do Docker.
  • tls: cria uma chave secreta TLS a partir do par de chave pública/privada. O par de chave pública/privada precisa existir de antemão. O certificado de chave pública precisa ser codificado com .PEM e corresponder à chave particular fornecida.

Para a maioria das chaves secretas, você usa o tipo generic.

[DATA] pode ser:

  • um caminho para um diretório contendo um ou mais arquivos de configuração, indicado usando as sinalizações --from-file ou --from-env-file;
  • pares de chave-valor, cada um especificado com sinalizações --from-literal.

Para mais informações sobre kubectl create, consulte a documentação de referência.

Outra opção é criar um secret definindo um objeto Secret em um arquivo de manifesto YAML e implantando o objeto por meio de kubectl create -f [FILE]. Por exemplo, consulte Distribuir credenciais com segurança usando chaves secretas.

Com arquivos

Para criar um segredo usando um ou mais arquivos, utilize --from-file ou --from-env-file. O arquivo precisa ser texto simples, mas a extensão do arquivo não importa.

--from-file

Quando você cria o secret usando --from-file, o valor dele é todo o conteúdo do arquivo. Se o valor do secret tiver vários pares de valores-chave, use --from-env-file.

É possível transmitir um único arquivo ou vários deles:

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/FILE] --from-file [/PATH/TO/FILE2]

Você também pode passar um diretório contendo vários arquivos:

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/DIRECTORY]

Por exemplo, o comando a seguir cria um segredo chamado credentials de dois arquivos, username.txt e password.txt, e define as chaves para username.txt e password.txt respectivamente:

kubectl create secret generic credentials --from-file ./username.txt --from-file ./password.txt

Os valores secretos são codificados em base 64 no Kubernetes.

A execução de kubectl get secret credentials -o yaml retorna a seguinte saída:

apiVersion: v1
data:
  password.txt: MTIzNAo=
  username.txt: YWRtaW4K
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

Por padrão, a chave é o nome do arquivo. É possível substituir a chave usando a sintaxe estendida para --from-file:

kubectl create secret [TYPE] [NAME] --from-file=KEY=[/PATH/TO/DIRECTORY]

O exemplo a seguir é idêntico ao anterior, mas define as chaves como username e password, em vez de usar os nomes dos arquivos.

kubectl create secret generic credentials --from-file=username=./username.txt --from-file=password=./password.txt

--from-env-file

Para carregar vários pares de chave-valor em um único segredo, armazene os pares de chave-valor em um ou mais arquivos de texto simples e carregue-os usando --from-env-file em vez de --from-file. É possível carregar vários arquivos especificando a sinalização várias vezes. As mesmas limitações de --from-file se aplicam.

Por exemplo, o comando a seguir cria um segredo chamado credentials de um único arquivo, credentials.txt, que contém vários pares de chave-valor:

# Each of these key-value pairs is loaded into the Secret
username=jane
password=d7xnNss7EGCFZusG

Os valores de segredos são codificados em base64 no Kubernetes.

kubectl create secret generic credentials --from-env-file ./credentials.txt

A execução de kubectl get secret credentials -o yaml retorna a seguinte saída:

apiVersion: v1
data:
  credentials.txt:
    username: YWRtaW4K
    password: MTIzNA==
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

Limitações

Arquivos incomuns, como links simbólicos, dispositivos e canalizações, são ignorados por kubectl. Os subdiretórios também são ignorados. kubectl create secret não se propaga aos subdiretórios.

A partir de valores literais

Para criar uma chave secreta a partir de valores literais, use --from-literal.

Por exemplo, o comando a seguir cria uma chave secreta genérica denominada literal-token com dois pares de chave-valor:

kubectl create secret generic literal-token --from-literal user=admin --from-literal password=1234

Você especifica --from-literal para cada par de chave-valor. Os valores são automaticamente codificados em base64.

A execução de kubectl get secret literal-token -o yaml retorna a seguinte saída:

apiVersion: v1
data:
  password: MTIzNA==
  user: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: ...
  name: literal-token
  namespace: default
  resourceVersion: "2012831"
  selfLink: /api/v1/namespaces/default/secrets/literal-token
  uid: ...
type: Opaque

Na saída precedente, observe que password e user são codificados em base64. A codificação base64 permite que a informação seja processada por aplicativos e serviços que não podem manipular certos caracteres. A codificação base64 não fornece segurança.

Como usar uma chave secreta

Para usar uma chave secreta com as cargas de trabalho, é possível especificar variáveis de ambiente que façam referência aos valores da chave secreta ou ativar um volume contendo a chave secreta.

Para saber sobre o uso de chaves secretas, consulte Como usar chaves secretas.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine