Data-at-Rest no MySQL 8.4 — Parte 1: Segurança e o componente keyring_file

Introdução

Com o aumento da atenção à segurança, seja por auditorias, conformidade com a lei e/ou para evitar vazamentos e ataques, uma das preocupações é saber se os dados do banco de dados estão criptografados. Com o MySQL é possível criptografar os dados em disco (data-at-rest), para que, em caso de roubo ou vazamento de dados físicos, a criptografia dificulte a leitura dos dados. A criptografia Transparent Data Encryption (TDE) dos dados no servidor MySQL/Percona Server 8.4 é realizada pelo componente Keyring.

Há diferentes possíveis keyrings para se utilizar, cada um com um diferente nível de segurança, nesta série de dois blogs iremos demonstrar como realizar a configuração de dois tipos:

  • keyring_file — chaves em um arquivo local (este post).
  • keyring_vault — chaves em cofre remoto (OpenBao/Vault) — Parte 2.
O que TDE resolve?

Criptografia de tablespaces InnoDB, logs opcionais e doublewrite; master key no keyring; rotação com ALTER INSTANCE ROTATE INNODB MASTER KEY sem reescrever todas as páginas.

Porém, ele não resolve a proteção contra uma pessoa com acesso ao servidor, nem a separação real de chave se ela mora no mesmo host, o caso do keyring_file.

Configuração

Por padrão a localização das chaves será /var/lib/mysql-keyring, caso queira outra localização, crie a pasta e dê as corretas permissões:

Pasta criada, hora de “instalar” o keyring_file component, note que não é possível instalar-lo via INSTALL COMPONENT, isso ocorre por conta de validações que precisam ocorrer durate a inicialização do serviço antes.
Para criar o arquivo de manifesto e incializar o keyring precisamos criar o arquivo mysqld.my (json) na mesma localização do arquivo binário do mysqld, para verificar na sua instalação você pode executar o seguinte comando:

Caso inicie o mysqld com o caminho completo (/path/to/mysqld), esse mesmo caminho deverá ser o caminho do mysqld.my (/path/to/mysqld.my).

Arquivo criado em /usr/sbin/mysql.my, preste atenção na hora de criar pra manter o padrão de JSON:

Após criar o manifesto, precisamos alterar o arquivo component_keyring_file.cnf, para adicionar o caminho da pasta criada no início ou o valor padrão (/var/lib/mysql-keyring/).

Para confirmar a localização deste arquivo, deve ser criado, utilize o seguinte comando:

Para o exemplo acima, vamos criar o seguinte arquivo /usr/lib64/mysql/plugin/component_keyring_file.cnf:

Corrigas as permissões caso estejam incorretas:

Validar TDE
Componente ativo

Para validar se o componente está ativo, verifique se o Component_name = component_keyring_file e Status = Active:

Master key e tabela cifrada

Validando a criaçào de tabelas criptografadas:

Após criar a mesma tabela pii2 porém sem ENCRYPTION=’Y’, podemos ver abaixo as opções de criação:

Checando no disco a criptografia em ambas as tabelas:

Rotação periódica:

5. Pontos de atenção
  • Um keyring por instância — nunca misture plugin legado + componente.
  • Chave no mesmo host — em caso de comprometimento do host, a chave e o .ibd vazam juntos.
  • Backups — restauração sem o arquivo de keyring ou sem transition-key (xtrabackup)= dados cifrados irrecuperáveis.
Conclusão

keyring_file é um bom ponto de partida para a criptografia no MySQL/Percona Server: manifest, componente, master key e tablespace cifrado. Funciona como esperado, porém, há uma preocupação: se obtém acesso à máquina,  obtém acesso ao keyring_file, o que limita o uso em produção.

Próximo passo: externalizar o keyring – Parte 2: keyring_vault + OpenBao.

Referências
COMPARTILHE:
Picture of Roberto de Bem

Roberto de Bem

Roberto de Bem é Database Engineer na Percona e entusiasta de Open Source. Sempre que possível, contribuo com pull requests, principalmente para projetos e produtos da Percona. Formado em Sistemas de Informação, trabalha com bancos de dados desde 2017, com foco em MySQL. Oracle Certified Professional – MySQL 8.0. Oracle ACE Apprentice.
Picture of Roberto de Bem

Roberto de Bem

Roberto de Bem é Database Engineer na Percona e entusiasta de Open Source. Sempre que possível, contribuo com pull requests, principalmente para projetos e produtos da Percona. Formado em Sistemas de Informação, trabalha com bancos de dados desde 2017, com foco em MySQL. Oracle Certified Professional – MySQL 8.0. Oracle ACE Apprentice.

PARTICIPE

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

POSTADO POR
Picture of Roberto de Bem

Roberto de Bem

Roberto de Bem é Database Engineer na Percona e entusiasta de Open Source. Sempre que possível, contribuo com pull requests, principalmente para projetos e produtos da Percona. Formado em Sistemas de Informação, trabalha com bancos de dados desde 2017, com foco em MySQL. Oracle Certified Professional – MySQL 8.0. Oracle ACE Apprentice.
PARCEIROS