A segurança é um dos aspectos mais importantes da execução de um banco de dados. Seja você um desenvolvedor ou um DBA, se estiver gerenciando o banco de dados, é sua responsabilidade resguardar seus dados e protegê-los de qualquer tipo de acesso não autorizado. O fato lamentável é que muitas organizações não protegem seus dados, como vimos na nova onda de ataques de ransomware MongoDB em setembro de 2017. Anteriormente, publicamos um blog sobre como proteger bancos de dados MongoDB.
Nesta postagem do blog, veremos como proteger seus bancos de dados usando o ClusterControl. Todos os recursos descritos aqui estão disponíveis na versão 1.5.1 do ClusterControl (lançada em 23 de dezembro de 2017). Observe que alguns recursos estão disponíveis apenas para determinados tipos de banco de dados.
Criptografia de backup
O ClusterControl 1.5.1 introduziu um novo recurso chamado criptografia de backup. Todos os backups criptografados são marcados com um ícone de cadeado ao lado:
Você pode usar esse recurso em todos os métodos de backup (mysqldump, xtrabackup, mongodump, pg_dump) suportados pelo ClusterControl. Para ativar a criptografia, basta ativar a opção "Ativar criptografia" ao agendar ou criar o backup. O ClusterControl gera automaticamente uma chave para criptografar o backup. Ele usa o algoritmo de criptografia AES-256 (CBC) e executa a criptografia em tempo real no servidor de destino. O comando a seguir mostra um exemplo de como o ClusterControl executa um backup do mysqldump:
$ mysqldump --defaults-file=/etc/my.cnf --flush-privileges --hex-blob --opt --no-create-info --no-data --triggers --routines --events --single-transaction --skip-comments --skip-lock-tables --skip-add-locks --databases db1 | gzip -6 -c | openssl enc -aes-256-cbc -pass file:/var/tmp/cmon-094508-e0bc6ad658e88d93.tmp | socat - TCP4:192.168.55.170:9999'
Você veria o seguinte erro se tentasse descompactar um backup criptografado sem descriptografá-lo primeiro com a chave apropriada:
$ gunzip mysqldump_2018-01-03_175727_data.sql.gz
gzip: mysqldump_2018-01-03_175727_data.sql.gz: not in gzip format
A chave é armazenada dentro do banco de dados ClusterControl e pode ser recuperada do arquivo cmon_backup.metadata para um conjunto de backup específico. Ele será usado pelo ClusterControl ao realizar a restauração. A criptografia de backups é altamente recomendada, especialmente quando você deseja proteger seus backups fora do local, como arquivá-los na nuvem.
Criptografia cliente-servidor MySQL/PostgreSQL
Além de seguir as etapas de segurança recomendadas durante a implantação, você pode aumentar a confiabilidade do serviço de banco de dados usando a criptografia SSL cliente-servidor. Usando o ClusterControl, você pode realizar esta operação com um simples apontar e clicar:
Você pode então recuperar as chaves e certificados gerados diretamente do host ClusterControl em
Criptografia de replicação de banco de dados
O tráfego de replicação dentro de um Galera Cluster pode ser habilitado com apenas um clique. ClusterControl usa uma chave padrão de 2048 bits e um certificado gerado no nó ClusterControl, que é transferido para todos os nós Galera:
Uma reinicialização do cluster é necessária. O ClusterControl executará uma operação de reinicialização contínua, levando um nó por vez. Você verá um ícone de cadeado verde ao lado do servidor de banco de dados (Galera indica criptografia Galera Replication, enquanto SSL indica criptografia cliente-servidor) na grade Hosts da página Visão geral quando a criptografia estiver habilitada:
Todas as chaves e certificados podem ser gerenciados diretamente no Gerenciamento de Chaves, conforme descrito mais abaixo.
Gerenciamento de Chaves
Todas as chaves e certificados gerados podem ser gerenciados diretamente da interface do usuário do ClusterControl. O Gerenciamento de Chaves permite gerenciar certificados SSL e chaves que podem ser provisionadas em seus clusters:
Se o certificado expirou, você pode simplesmente usar a interface do usuário para gerar um novo certificado com a chave apropriada e a Autoridade de Certificação (CA) ou importar uma chave e um certificado existentes para o host ClusterControl.
Consultores de segurança
Advisors são miniprogramas executados no ClusterControl. Eles executam tarefas específicas e fornecem conselhos sobre como resolver problemas em áreas como desempenho, segurança, gerenciamento de logs, configuração, espaço de armazenamento e outros. Cada orientador pode ser agendado como um cron job e executado como um executável autônomo na interface do usuário do ClusterControl. Ele também pode ser executado através do cliente de linha de comando ClusterControl 's9s'.
O ClusterControl habilita dois consultores de segurança para sistemas baseados em MySQL:
- Acesso de qualquer host ('%') - Identifica todos os usuários que usam um host curinga da tabela do sistema mysql e permite que você tenha mais controle sobre quais hosts podem se conectar aos servidores.
- Verificar número de contas sem senha - Identifica todos os usuários que não possuem senha na tabela do sistema mysql.
Para o MongoDB, temos os seguintes conselheiros:
- Autenticação do MongoDB habilitada - Verifique se a instância do MongoDB está em execução com o modo de autenticação habilitado.
- Verificação de autorização - Verifique se os usuários do MongoDB estão autorizados com função muito permissiva para controle de acesso.
Para obter mais detalhes sobre como o ClusterControl executa as verificações de segurança, você pode consultar o código-fonte semelhante ao JavaScript do orientador em
Várias interfaces de rede
Ter vários NICs nos hosts do banco de dados permite separar o tráfego do banco de dados do tráfego de gerenciamento. Uma rede é usada pelos nós do banco de dados para se comunicarem entre si, e essa rede não é exposta a nenhuma rede pública. A outra rede é utilizada pelo ClusterControl, para fins de gestão. O ClusterControl é capaz de implantar essa configuração de várias redes. Considere o seguinte diagrama de arquitetura:
Para importar o cluster de banco de dados acima para o ClusterControl, deve-se especificar o endereço IP primário dos hosts do banco de dados. Então, é possível escolher a rede de gerenciamento, bem como a rede de dados:
O ClusterControl também pode trabalhar em um ambiente sem acesso à Internet, com os bancos de dados totalmente isolados da rede pública. A maioria dos recursos funcionará bem. Se o host ClusterControl estiver configurado com Internet, ele também será capaz de clonar o repositório do fornecedor do banco de dados para os servidores de banco de dados sem Internet. Basta acessar
O espelhamento pode demorar cerca de 10 a 20 minutos dependendo da conexão com a internet, você verá o novo item na lista mais tarde. Você pode então escolher esse repositório ao dimensionar ou implantar um novo cluster, sem a necessidade de os hosts do banco de dados terem qualquer conexão com a Internet (observe que o repositório offline do sistema operacional também deve estar instalado).
Gerenciamento de usuários do MySQL
O sistema de privilégios do MySQL garante que todos os usuários possam realizar apenas as operações que têm permissão. A concessão é fundamental, pois você não deseja conceder a todos os usuários acesso completo ao seu banco de dados, mas precisa que os usuários tenham as permissões necessárias para executar consultas e realizar tarefas diárias.
O ClusterControl fornece uma interface de usuário interativa para gerenciar os esquemas e privilégios do banco de dados. Ele unifica as contas em todos os servidores MySQL no cluster e simplifica o processo de concessão. Você pode visualizar facilmente os usuários do banco de dados para evitar erros.
Como você pode ver na captura de tela acima, o ClusterControl desativou privilégios desnecessários se você quiser apenas conceder um usuário a um banco de dados (shopdb). "Requer SSL?" só está habilitado se a criptografia SSL cliente/servidor estiver habilitada enquanto as caixas de seleção de privilégios de administração estão totalmente desabilitadas se um banco de dados específico for definido. Você também pode inspecionar a instrução GRANT gerada na parte inferior do assistente para ver a instrução que o ClusterControl executará para criar esse usuário. Esse auxiliar parece bem simples, mas criar usuários e conceder privilégios pode ser propenso a erros.
O ClusterControl também fornece uma lista de usuários inativos para todos os nós de banco de dados no cluster, mostrando as contas que não foram usadas desde a última reinicialização do servidor:
Isso alerta o administrador para contas desnecessárias que existem e que podem prejudicar o servidor. O próximo passo é verificar se as contas não estão mais ativas, e você pode simplesmente usar a opção "Drop Selected User" para removê-las. Certifique-se de ter atividade de banco de dados suficiente para garantir que a lista gerada pelo ClusterControl seja precisa. Quanto maior o tempo de atividade do servidor, melhor.
Mantenha-se sempre atualizado
Para uso em produção, é altamente recomendável instalar os pacotes relacionados ao banco de dados do repositório do fornecedor. Não confie no repositório padrão do sistema operacional, onde os pacotes geralmente estão desatualizados. Se você estiver executando em um ambiente de cluster como Galera Cluster ou mesmo MySQL Replication, sempre terá a opção de corrigir o sistema com o mínimo de tempo de inatividade.
ClusterControl suporta atualização automática de versão secundária para MySQL/MariaDB com um único clique. Basta acessar
As atualizações de versões principais (por exemplo, do MySQL 5.6 para o MySQL 5.7) não são intencionalmente automatizadas. As atualizações principais geralmente exigem a desinstalação dos pacotes existentes, o que é uma tarefa arriscada para automatizar. Um planejamento e testes cuidadosos são necessários para esse tipo de atualização.
A segurança do banco de dados é um aspecto importante da execução do banco de dados em produção. De todos os incidentes sobre os quais lemos frequentemente nos noticiários (e provavelmente há muitos outros que não são divulgados), fica claro que existem grupos ocupados com más intenções. Portanto, certifique-se de que seus bancos de dados estejam bem protegidos.