Melhores práticas de segurança
O PostgreSQL ganhou uma reputação de confiabilidade, estabilidade e consistência de dados, e se tornou a escolha preferida como um banco de dados relacional de código aberto para muitas empresas. O RDS for PostgreSQL é um serviço Web baseado na nuvem, confiável, escalável, fácil de gerenciar e pronto para uso imediato.
Faça configurações de segurança a partir das seguintes dimensões para atender às suas necessidades de serviço.
- Configurar o número máximo de conexões com o banco de dados
- Configurar o tempo limite para autenticação de cliente
- Configurar SSL e algoritmo de criptografia
- Configurar a criptografia de senha
- Desativar a cotação da barra invertida
- Verificar e excluir periodicamente funções que não são mais usadas
- Revogar todas as permissões no esquema public
- Definir um período de validade de senha apropriado para uma função de usuário
- Configurar o nível de log para registrar instruções SQL que causam erros
- Fornecimento de privilégios mínimos para contas de banco de dados
- Ativar backup de dados
- Ativar a auditoria de banco de dados
- Evitar o acesso à sua instância do RDS for PostgreSQL pela Internet
- Atualizar a versão do banco de dados para a mais recente
Configurar o número máximo de conexões com o banco de dados
O parâmetro max_connections especifica o máximo de conexões simultâneas permitidas em um banco de dados. Se o valor deste parâmetro for grande, o banco de dados do RDS for PostgreSQL poderá solicitar mais memória compartilhada do Sistema V ou semáforo. Como resultado, a memória ou o semáforo compartilhado solicitados podem exceder o valor padrão no SO. Defina max_connections com base na complexidade do serviço. Para obter detalhes, consulte Sugestões de uso da instância.
Configurar o tempo limite para autenticação de cliente
O parâmetro authentication_timeout especifica a duração máxima permitida para autenticação de cliente, em segundos. Este parâmetro impede que o cliente ocupe o canal de conexão por um longo tempo. O valor padrão é 60s. Se a autenticação não for concluída dentro do período especificado, a conexão será fechada à força. Essa configuração pode aumentar a segurança da instância do RDS for PostgreSQL.
Configurar SSL e algoritmo de criptografia
O SSL é recomendado para conexões TCP/IP porque o SSL garante que todas as comunicações entre o cliente e o servidor sejam criptografadas, evitando vazamento e adulteração de dados e garantindo a integridade dos dados. Ao configurar a criptografia SSL, você precisa configurar um protocolo TLS seguro e um algoritmo de criptografia no servidor. TLSv1.2 e EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EDH+aRSA+AESGCM:EDH+aDSS+AESGCM:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!SRP:!RC4 são recomendados. Para obter detalhes, consulte Conexão SSL.
Para configurar o protocolo TLS e o algoritmo de criptografia, altere os valores de ssl_min_protocol_version e ssl_ciphers, respectivamente.
Configurar a criptografia de senha
As senhas devem ser criptografadas. Quando você usa CREATE USER ou ALTER ROLE para alterar uma senha, a senha é criptografada por padrão. O método de criptografia de senha scram-sha-256 é recomendado. Para alterar o método de criptografia de senha, altere o valor de password_encryption.
A opção MD5 é usada apenas para compatibilidade com versões anteriores. Novas instâncias de BD usam scram-sha-256 por padrão.
A modificação de password_encryption entra em vigor somente depois que a senha é redefinida.
Desativar a cotação da barra invertida
O parâmetro backslash_quote especifica se uma aspa simples (') em uma cadeia de caracteres pode ser substituída por uma aspa de barra invertida (\'). A maneira preferida padrão de SQL de representar uma aspa simples é duplicá-la (''). Se o código do lado do cliente escapar incorretamente, é possível um ataque de injeção de SQL. É aconselhável definir backslash_quote como safe_encoding para rejeitar consultas nas quais uma aspa simples parece ser escapada por uma barra invertida, evitando riscos de injeção de SQL.
Verificar e excluir periodicamente funções que não são mais usadas
Verifique se todas as funções são obrigatórias. Qualquer função desconhecida deve ser revisada para garantir que seja usada corretamente. Se alguma função não for mais usada, exclua-a. Para consultar funções, execute o seguinte comando:
SELECT rolname FROM pg_roles;
Revogar todas as permissões no esquema public
O esquema public é o esquema padrão. Todos os usuários podem acessar objetos nele, incluindo tabelas, funções e exibições, que podem causar vulnerabilidades de segurança. Você pode executar o seguinte comando como usuário root para revogar as permissões:
revoke all on schema public from public;
Definir um período de validade de senha apropriado para uma função de usuário
Ao criar uma função, você pode usar a palavra chave VALID UNTIL para especificar quando a senha da função se tornar inválida. Se essa palavra chave for ignorada, a senha será válida permanentemente. É aconselhável alterar a senha periodicamente, por exemplo, a cada três meses. Para configurar um período de validade de senha, execute o seguinte comando:
CREATE ROLE name WITH PASSWORD 'password' VALID UNTIL 'timestamp';
Para verificar se um período de validade de senha está configurado, execute o seguinte comando:
SELECT rolname,rolvaliduntil FROM pg\_roles WHERE rolsuper = false AND rolvaliduntil IS NULL;
Configurar o nível de log para registrar instruções SQL que causam erros
O parâmetro log_min_error_statement especifica quais instruções SQL que causam erros podem ser registradas nos logs do servidor. As instruções SQL do nível especificado ou superior são registradas nos logs. Os valores válidos incluem debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, log, fatal e panic. O valor de log_min_error_statement deve ser pelo menos error. Para obter detalhes, consulte Relatórios de log.
Fornecimento de privilégios mínimos para contas de banco de dados
O RDS for PostgreSQL permite que você conceda permissões baseadas em funções a uma conta de banco de dados para acesso a dados e comandos. É aconselhável criar contas de banco de dados e autorizar as contas com base no princípio do privilégio mínimo. Se alguma permissão de conta não atender aos requisitos de função, atualize a permissão da conta ou exclua a conta com base nos requisitos de serviço. O RDS for PostgreSQL tem algumas contas integradas, que são usadas para fornecer serviços abrangentes de O&M em segundo plano para instâncias de BD e não podem ser usadas ou excluídas pelos usuários.
Ativar backup de dados
Quando você cria uma instância de BD do RDS, uma política de backup automatizado é ativada por padrão com o período de retenção definido como sete dias. Você pode alterar o período de retenção do backup conforme necessário. As instâncias de BD do RDS for PostgreSQL oferecem suporte a backups automatizados e backups manuais. Você pode fazer backup de sua instância periodicamente. Se a instância falhar ou os dados estiverem danificados, restaure usando backups para garantir a confiabilidade dos dados. Para obter detalhes, consulte Backups de dados.
Ativar a auditoria de banco de dados
Ao usar a extensão de auditoria do PostgreSQL (pgAudit) com sua instância do RDS for PostgreSQL, você pode capturar registros detalhados que os auditores geralmente precisam para atender aos regulamentos de conformidade. Por exemplo, você pode usar a pgAudit para controlar alterações feitas em bancos de dados e tabelas específicos, bem como registrar usuários que fazem essas alterações e muitos outros detalhes. pgAudit está desativada por padrão. Você pode ativá-la com base nos requisitos de serviço. Para obter detalhes, consulte Uso a pgAudit.
Evitar o acesso à sua instância do RDS for PostgreSQL pela Internet
Não implemente sua instância na Internet ou em uma zona desmilitarizada (DMZ). Em vez disso, implemente em uma rede privada da Huawei Cloud e use roteadores ou firewalls para protegê-la. Não vincule um EIP à sua instância para acesso pela Internet para evitar acesso não autorizado e ataques DDoS. Se você vinculou um EIP à sua instância, é aconselhável desvinculá-lo. Se você precisar de um EIP, configure regras de grupo de segurança para restringir os endereços IP de origem que podem acessar sua instância.
Atualizar a versão do banco de dados para a mais recente
O PostgreSQL 9.5, 9.6 e 10 chegaram ao fim da vida útil (EOL) e não são mais mantidos pela comunidade. Um aviso do EOS foi lançado para o RDS for PostgreSQL 9.5 e 9.6. O uso de uma versão anterior pode representar riscos de segurança. A execução do software da versão mais recente pode proteger o sistema contra certos ataques. Você pode atualizar a versão secundária ou a versão principal da sua instância de BD, conforme necessário.