Criptografia de Segredos

Configuração de Criptografia de Segredos

O RKE2 suporta criptografar segredos em repouso, e fará o seguinte automaticamente:

  • Gerar uma chave AES-CBC.

  • Gerar um arquivo de configuração de criptografia com a chave gerada.

  • Passar a configuração para o APIServer do Kubernetes como encryption-provider-config.

Escolhendo o Provedor de Criptografia

Versão Gate

Disponível a partir das versões de abril de 2025: v1.30.12+rke2r1, v1.31.8+rke2r1, v1.32.4+rke2r1, v1.33.0+rke2r1.

Conformidade com FIPS

A conformidade com FIPS 140-3 está disponível apenas com o provedor aescbc.

Usando a flag --secrets-encryption-provider, você pode escolher qual provedor de criptografia usar. O padrão é aescbc.

O RKE2 suporta os seguintes provedores de criptografia:

  • aescbc: AES-CBC com preenchimento PKCS#7

  • secretbox: XSalsa20 e Poly1305

Migrando Provedores

Você pode migrar do provedor aescbc para o provedor secretbox seguindo estas etapas:

  1. Certifique-se de que o provedor secretbox é suportado pela sua versão do RKE2.

  2. Atualize/Adicione a flag secrets-encryption-provider no seu arquivo de configuração do RKE2 para secretbox.

  3. Gire as chaves de criptografia, seguindo a seção [Encryption Key Rotation] abaixo.

Arquivo de Configuração de Criptografia Gerado

Abaixo está um exemplo do arquivo de configuração de criptografia que o RKE2 gera com o provedor padrão aescbc:

#/var/lib/rancher/rke2/server/cred/encryption-config.json
{
  "kind": "EncryptionConfiguration",
  "apiVersion": "apiserver.config.k8s.io/v1",
  "resources": [
    {
      "resources": [
        "secrets"
      ],
      "providers": [
        {
          "aescbc": {
            "keys": [
              {
                "name": "aescbckey",
                "secret": "xxxxxxxxxxxxxxxxxxx"
              }
            ]
          }
        },
        {
          "identity": {}
        }
      ]
    }
  ]
}

Ferramenta de Criptografia de Segredos

O RKE2 contém um subcomando secrets-encrypt, que permite que os administradores realizem as seguintes tarefas:

  • Adicionar novas chaves de criptografia de segredos

  • Rotacionar e deletar chaves de criptografia de segredos

  • Recriptografar segredos

Não seguir o procedimento adequado ao girar as chaves de criptografia de segredos pode causar perda permanente de dados. Criar um instantâneo antes de girar é recomendado. Prossiga com cautela.

Rotação de Chaves de Criptografia de Segredos

Versão Gate

Disponível a partir das versões de setembro de 2024: v1.29.9+rke2r1, v1.30.5+rke2r1, v1.31.1+rke2r1.

Para versões mais antigas, veja [Encryption Key Rotation Classic].

  • Servidor Único

  • Alta Disponibilidade

Para rotacionar chaves de criptografia de segredos em um cluster de servidor único:

  1. Rotacionar chaves de criptografia de segredos.

    rke2 secrets-encrypt rotate-keys
  2. Aguarde a recriptografar terminar. Observe os logs do servidor ou aguarde por:

    $ rke2 secrets-encrypt status
    Encryption Status: Enabled
    Current Rotation Stage: reencrypt_finished

Para rotacionar chaves de criptografia de segredos em configurações de alta disponibilidade:

Neste exemplo, 3 servidores são usados para um cluster de alta disponibilidade, referidos como S1, S2, S3. É recomendado que você escolha um nó de servidor do qual executar os comandos secrets-encrypt.

  1. Rotacionar chaves de criptografia de segredos no S1.

    rke2 secrets-encrypt rotate-keys
  2. Aguarde a recriptografar terminar. Observe os logs do servidor ou aguarde por:

    $ rke2 secrets-encrypt status
    Encryption Status: Enabled
    Current Rotation Stage: reencrypt_finished
  3. Reinicialize sequencialmente o RKE2 no S1, S2, S3.

    systemctl restart rke2-server.service

    Aguarde o comando systemctl retornar antes de reinicializar o próximo servidor.

Rotação de Chaves de Criptografia Clássica

Novo Procedimento

Se estiver usando versões do RKE2 mais novas que v1.30.1+rke2r1, recomendamos usar o [Encryption Key Rotation] em vez disso.

  • Servidor Único

  • Alta Disponibilidade

Para rotacionar chaves de criptografia de segredos em um cluster de nó único:

  1. Preparar:

    rke2 secrets-encrypt prepare
  2. Reinicie o pod kube-apiserver:

    # Get the kube-apiserver container ID export CONTAINER_RUNTIME_ENDPOINT="unix:///var/run/k3s/containerd/containerd.sock" crictl ps --name kube-apiserver # Stop the pod crictl stop <CONTAINER_ID>
  3. Rotacionar:

    rke2 secrets-encrypt rotate
  4. Reinicie o pod kube-apiserver novamente.

  5. Recriptografar:

    rke2 secrets-encrypt reencrypt

Para rotacionar chaves de criptografia de segredos em configurações de alta disponibilidade:

Neste exemplo, 3 servidores são usados para um cluster de alta disponibilidade, referidos como S1, S2, S3. Embora não seja obrigatório, é recomendado que você escolha um nó de servidor do qual executar os comandos secrets-encrypt.

  1. Preparar no S1.

    rke2 secrets-encrypt prepare
  2. Reinicialize sequencialmente S1, S2, S3.

    systemctl restart rke2-server.service

    Aguarde o comando systemctl retornar antes de reinicializar o próximo servidor.

  3. Rotacionar no S1.

    rke2 secrets-encrypt rotate
  4. Reinicialize sequencialmente S1, S2, S3.

  5. Recriptografar no S1.

    rke2 secrets-encrypt reencrypt

    Aguarde até que a recriptografia seja concluída, seja por meio dos logs do servidor journalctl -u rke2-server ou por meio de rke2 secrets-encrypt status. O status retornará reencrypt_finished quando concluído.

  6. Reinicialize sequencialmente S1, S2, S3.

Status da Criptografia de Segredos

O subcomando secrets-encrypt status exibe informações sobre o status atual da criptografia de segredos no nó.

Um exemplo do comando em um nó de servidor único:

$ rke2 secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: start
Server Encryption Hashes: All hashes match

Active  Key Type  Name
------  --------  ----
 *      AES-CBC   aescbckey

Outro exemplo em cluster HA, após a rotação das chaves, mas antes de reiniciar os servidores:

$ rke2 secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: rotate
Server Encryption Hashes: hash does not match between node-1 and node-2

Active  Key Type  Name
------  --------  ----
 *      AES-CBC   aescbckey-2021-12-10T22:54:38Z
        AES-CBC   aescbckey

Os detalhes de cada seção são os seguintes:

  • Estado de Criptografia: Exibido se a criptografia de segredos está desativada ou ativada no nó.

  • Estágio Atual de Rotação: Indica o estágio atual de rotação no nó. Os estágios são: start, prepare, rotate, reencrypt_request, reencrypt_active, reencrypt_finished

  • Hashes de Criptografia do Servidor: Útil para clusters HA, isso indica se todos os servidores estão no mesmo estágio com seus arquivos locais. Isso pode ser usado para identificar se é necessário reiniciar os servidores antes de prosseguir para o próximo estágio. No exemplo HA acima, o nó-1 e o nó-2 têm hashes diferentes, indicando que atualmente não possuem a mesma configuração de criptografia. Reiniciar os servidores sincronizará sua configuração.

Tabela de chaves Descrição

Active

O * indica quais chaves, se houver, estão atualmente sendo usadas para a criptografia de segredos. A chave ativa é usada pelo Kubernetes para criptografar quaisquer novos segredos.

Tipo de Chave

O RKE2 suporta apenas o tipo de chave AES-CBC. Encontre mais informações aqui.

Nome

Nome da chave de criptografia. O padrão é aescbckey-<DATE_AND_TIME>.