Usar criptografia de senha SCRAM para PostgreSQL
O Salted Challenge Response Authentication Mechanism (SCRAM) é uma alternativa ao algoritmo de resumo de mensagens padrão (MD5) do PostgreSQL para senhas de criptografia. O mecanismo de autenticação SCRAM é considerado mais seguro que o MD5. Para saber mais sobre essas duas abordagens diferentes para proteger senhas, consulte Autorização com senha
Recomendamos que você use o SCRAM em vez de o MD5 como o esquema de criptografia de senha para seu cluster de banco de dados do Aurora PostgreSQL. A partir da versão 14 do Aurora PostgreSQL, o SCRAM é compatível com todas as versões disponíveis do Aurora PostgreSQL, por exemplo, as versões 10, 11, 12, 13 e 14. É um mecanismo criptográfico de resposta a desafios que usa o algoritmo scram-sha-256 para autenticação e criptografia de senha.
Convém atualizar as bibliotecas das aplicações cliente para oferecer compatibilidade com o SCRAM. Por exemplo, versões do JDBC anteriores à 42.2.0 não são compatíveis com o SCRAM. Para obter mais informações, consulte Driver JDBC do PostgreSQL
nota
A versão 14 do Aurora PostgreSQL e versões posteriores são compatíveis com scram-sha-256 para criptografia de senha por padrão para novos clusters de banco de dados. Ou seja, o grupo de parâmetros de cluster de banco de dados padrão (default.aurora-postgresql14
) tem seu valor password_encryption
definido como scram-sha-256.
Configurar o cluster de banco de dados do Aurora PostgreSQL para exigir o SCRAM
Para o Aurora PostgreSQL 14.3 e versões superiores, você pode exigir que o cluster de banco de dados do Aurora PostgreSQL aceite apenas senhas que usem o algoritmo scram-sha-256.
Importante
Para proxies RDS existentes com bancos de dados PostgreSQL, se você modificar a autenticação do banco de dados para usar somente SCRAM
, o proxy ficará indisponível por até 60 segundos. Para evitar o problema, faça o seguinte:
O banco de dados deve permitir tanto a autenticação
SCRAM
quanto aMD5
.Para usar somente a autenticação
SCRAM
, crie um proxy, migre o tráfego da aplicação para o novo proxy e exclua o proxy anteriormente associado ao banco de dados.
Antes de fazer alterações em seu sistema, entenda o processo completo da seguinte forma:
Obtenha informações sobre todos os perfis e criptografia de senha para todos os usuários do banco de dados.
Confira novamente as configurações dos parâmetros do cluster de banco de dados do Aurora PostgreSQL para verificar os parâmetros que controlam a criptografia de senha.
Se seu cluster de banco de dados do Aurora PostgreSQL usa um grupo de parâmetros padrão, você precisará criar um grupo de parâmetros de cluster de banco de dados personalizado e aplicá-lo ao seu cluster de banco de dados do Aurora PostgreSQL para que você possa modificar parâmetros quando necessário. Se seu cluster de banco de dados do Aurora PostgreSQL usa um grupo de parâmetros personalizado, você poderá modificar os parâmetros necessários posteriormente no processo, conforme necessário.
-
Altere o parâmetro
password_encryption
parascram-sha-256
. -
Avise a todos os usuários do banco de dados que eles precisam atualizar as senhas. Faça o mesmo para a conta
postgres
. As novas senhas são criptografadas e armazenadas usando o algoritmo scram-sha-256. Verifique se todas as senhas são criptografadas usando o tipo de criptografia.
-
Se todas as senhas utilizarem scram-sha-256, você poderá alterar o parâmetro de
rds.accepted_password_auth_method
paramd5+scram
.
Atenção
Depois de alterar rds.accepted_password_auth_method
para scram-sha-256, os usuários (perfis) com senhas criptografadas com md5
não conseguirão se conectar.
Preparar-se para exigir o SCRAM para seu cluster de banco de dados do Aurora PostgreSQL
Antes de fazer qualquer alteração em seu cluster de banco de dados do Aurora PostgreSQL, confira todas as contas de usuário do banco de dados existentes. Além disso, verifique o tipo de criptografia usada para senhas. Você pode realizar essas tarefas usando a extensão rds_tools
. Essa extensão é compatível com o Aurora PostgreSQL 13.1 e versões superiores.
Como obter uma lista de usuários (perfis) de banco de dados e métodos de criptografia de senha
Use o
psql
para conectar-se à instância primária de seu cluster de banco de dados do Aurora PostgreSQL conforme mostrado a seguir.psql --host=
cluster-name-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordInstale a extensão
rds_tools
.postgres=>
CREATE EXTENSION rds_tools;
CREATE EXTENSION
Obtenha uma lista de perfis e criptografias.
postgres=>
SELECT * FROM rds_tools.role_password_encryption_type();Você verá uma saída semelhante à seguinte.
rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | md5 user_465 | md5 postgres | md5 (8 rows)
Criar um grupo de parâmetros de cluster de banco de dados personalizado
nota
Se seu cluster de banco de dados do Aurora PostgreSQL já usa um grupo de parâmetros personalizado, não é necessário criar outro.
Para obter uma visão geral dos grupos de parâmetros do Aurora, consulte Criar um grupo de parâmetros do cluster de banco de dados no Amazon Aurora.
O tipo de criptografia de senha usada para senhas é definido em um parâmetro, password_encryption
. A criptografia permitida pelo cluster de banco de dados do Aurora PostgreSQL é definida em outro parâmetro, rds.accepted_password_auth_method
. Alterar qualquer um desses valores padrão exige que você crie um grupo de parâmetros de cluster de banco de dados personalizado e aplique-o ao seu cluster.
Você também pode usar o AWS Management Console ou a API do RDS para criar um grupo de parâmetros de cluster de banco de dados personalizado. Consulte mais informações em Criar um grupo de parâmetros do cluster de banco de dados no Amazon Aurora.
Associe o grupo de parâmetros personalizado à sua instância de banco de dados.
Como criar um grupo de parâmetros de cluster de banco de dados personalizado
Use o comando
create-db-cluster-parameter-group
da CLI para criar o grupo de parâmetros personalizado para o cluster. O exemplo a seguir usaaurora-postgresql13
como a origem desse grupo de parâmetros personalizado.Para Linux, macOS ou Unix:
aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name '
docs-lab-scram-passwords
' \ --db-parameter-group-family aurora-postgresql13 --description 'Custom DB cluster parameter group for SCRAM
'Para Windows:
aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name "
docs-lab-scram-passwords
" ^ --db-parameter-group-family aurora-postgresql13 --description "Custom DB cluster parameter group for SCRAM
"Depois, associe o grupo de parâmetros personalizado ao seu cluster.
Use o comando
modify-db-cluster
da CLI para aplicar esse grupo de parâmetros personalizado ao cluster de banco de dados do Aurora PostgreSQL.Para Linux, macOS ou Unix:
aws rds modify-db-cluster --db-cluster-identifier '
your-instance-name
' \ --db-cluster-parameter-group-name "docs-lab-scram-passwords
Para Windows:
aws rds modify-db-cluster --db-cluster-identifier "
your-instance-name
" ^ --db-cluster-parameter-group-name "docs-lab-scram-passwords
Para sincronizar novamente seu cluster de banco de dados do Aurora PostgreSQL com seu grupo de parâmetros de cluster de banco de dados personalizado, reinicie a instância primária e todas as outras instâncias do cluster.
Configurar a criptografia de senha para usar o SCRAM
O mecanismo de criptografia de senha usado por um cluster de banco de dados do Aurora PostgreSQL é definido no grupo de parâmetros de cluster de banco de dados no parâmetro password_encryption
. Os valores permitidos não estão definidos, md5
ou scram-sha-256
. O valor padrão depende da versão do Aurora PostgreSQL da seguinte forma:
Aurora PostgreSQL 14: o padrão é
scram-sha-256
Aurora PostgreSQL 13: o padrão é
md5
Com um grupo de parâmetros de cluster de banco de dados personalizado anexado ao seu cluster de banco de dados do Aurora PostgreSQL, você pode modificar valores para o parâmetro de criptografia de senha.
Como alterar a configuração de criptografia de senha para scram-sha-256
Altere o valor da criptografia de senha para scram-sha-256, conforme mostrado a seguir. A alteração pode ser aplicada imediatamente porque o parâmetro é dinâmico, portanto, não é necessário reiniciar para que a alteração seja implementada.
Para Linux, macOS ou Unix:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name \ 'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'
Para Windows:
aws rds modify-db-parameter-group --db-parameter-group-name ^ "docs-lab-scram-passwords" --parameters "ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate"
Migrar senhas para funções de usuário para o SCRAM
Você pode migrar senhas de perfis de usuário para o SCRAM conforme descrito a seguir.
Como migrar senhas de usuário (função) do banco de dados do MD5 para o SCRAM
Faça login como usuário administrador (nome de usuário padrão,
postgres
) conforme mostrado a seguir.psql --host=
cluster-name-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordConfira a configuração do parâmetro
password_encryption
em sua instância de banco de dados do RDS para PostgreSQL usando o comando a seguir.postgres=>
SHOW password_encryption;
password_encryption --------------------- md5 (1 row)
Altere o valor desse parâmetro para scram-sha-256. Esse é um parâmetro dinâmico, portanto, você não precisa reinicializar a instância depois de fazer essa alteração. Confira o valor novamente para garantir que agora ele esteja definido como
scram-sha-256
da seguinte forma.postgres=>
SHOW password_encryption;
password_encryption --------------------- scram-sha-256 (1 row)
Avise a todos os usuários do banco de dados para alterar senhas. Altere também sua própria senha para a conta
postgres
(o usuário do banco de dados com privilégios derds_superuser
).labdb=>
ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me';ALTER ROLE
Repita o processo para todos os bancos de dados no cluster de banco de dados do Aurora PostgreSQL.
Alterar o parâmetro para exigir o SCRAM
Esta é a etapa final do processo. Depois de fazer a alteração no procedimento a seguir, as contas de usuário (perfis) que ainda usam a criptografia md5
para senhas não poderão fazer login no cluster de banco de dados do Aurora PostgreSQL.
O rds.accepted_password_auth_method
especifica o método de criptografia que o cluster de banco de dados do Aurora PostgreSQL aceita para uma senha de usuário durante o processo de login. O valor padrão é md5+scram
, o que significa que qualquer método é aceito. Na imagem a seguir, você pode encontrar a configuração padrão para esse parâmetro.
Os valores permitidos para esse parâmetro são md5+scram
ou scram
. Alterar esse valor de parâmetro para scram
torna isso um requisito.
Como alterar o valor do parâmetro para exigir autenticação SCRAM para senhas
Verifique se todas as senhas de usuários para todos os bancos de dados no cluster de banco de dados do Aurora PostgreSQL usam
scram-sha-256
para criptografia de senha. Para fazer isso, consulterds_tools
para obter o perfil (usuário) e o tipo de criptografia, da seguinte forma.postgres=>
SELECT * FROM rds_tools.role_password_encryption_type();
rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | scram-sha-256 user_465 | scram-sha-256 postgres | scram-sha-256 ( rows)
Repita a consulta para todas as instâncias de banco de dados em seu cluster de banco de dados do Aurora PostgreSQL.
Se todas as senhas usam scram-sha-256, você pode prosseguir.
Altere o valor da autenticação de senha aceita para scram-sha-256 da seguinte forma.
Para Linux, macOS ou Unix:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'
Para Windows:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"