Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Como faço para criar uma política de senha no Amazon RDS para PostgreSQL?
Quero criar uma política de senha no Amazon Relational Database Service (Amazon RDS) para PostgreSQL.
Breve descrição
Por padrão, o Amazon RDS para PostgreSQL não tem funcionalidade para impor uma política de senha. No entanto, é possível usar hooks do PostgreSQL e as extensões Trusted Language Extensions (TLE) para ampliar os recursos principais. Para personalizar como o PostgreSQL manipula senhas quando você cria ou altera senhas para usuários ou perfis, use o passcheck hook.
Observação: o TLE oferece suporte ao Amazon RDS para PostgreSQL para as versões 16.1 e mais recentes, 15.2 e mais recentes, 14.5 e mais recentes e 13.12 e mais recentes. Para obter mais informações, consulte Requisitos para usar extensões de linguagem confiáveis para PostgreSQL.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Crie um grupo de parâmetros do cliente e configure a extensão TLE
Conclua as etapas a seguir:
-
Crie um grupo de parâmetros personalizado e, em seguida, associe-o à sua instância do Amazon RDS para PostgreSQL.
Observação: alterações no grupo de parâmetros causarão tempo de inatividade. Use uma janela de manutenção para evitar o tempo de inatividade imediato. -
Faça login na sua instância, execute a consulta a seguir e confirme se o parâmetro shared_preload_libraries está atualizado:
postgres=> SHOW shared_preload_libraries;shared_preload_libraries rdsutils,pg_tle,pg_stat_statements (1 row) postgres=> -
Execute a consulta a seguir para criar a extensão TLE:
CREATE EXTENSION pg_tle;Observação: para instalar e configurar a extensão pg_tle, seu perfil de usuário do banco de dados deve ter permissões de perfil rds_superuser.
-
Conceda o papel pgtle_admin ao usuário principal da sua instância Amazon RDS para PostgreSQL. Se você usou um usuário padrão, esse é o usuário principal do postgres:
GRANT pgtle_admin TO example-user;Observação: substitua example-user pelo usuário principal da sua instância Amazon RDS para PostgreSQL.
Configure o passcheck hook
Um passcheck hook do PostgreSQL verifica senhas para operações SQL e não permite que os usuários definam as senhas listadas na tabela password_check.bad_passwords. O passcheck hook também verifica o tamanho da senha e confirma que as senhas contêm letras maiúsculas e minúsculas, números e caracteres especiais.
Observação: é possível modificar a função de um hook do PostgreSQL de acordo com suas necessidades específicas. É possível adicionar mais senhas à tabela bad_passwords, alterar o tamanho necessário da senha ou modificar a função para verificar a complexidade da senha.
Conclua as etapas a seguir:
-
Execute o seguinte comando SQL pgtle.install_extension. Modifique o código SQL de acordo com suas necessidades específicas:
SELECT pgtle.install_extension ( 'example-password-check-rules', '1.0', 'Do not let users use the 10 most commonly used passwords', $_pgtle_$ CREATE SCHEMA password_check; REVOKE ALL ON SCHEMA password_check FROM PUBLIC; GRANT USAGE ON SCHEMA password_check TO PUBLIC; CREATE TABLE password_check.bad_passwords (plaintext) AS VALUES ('123456'), ('password'), ('12345678'), ('qwerty'), ('123456789'), ('12345'), ('1234'), ('111111'), ('1234567'), ('dragon'); CREATE UNIQUE INDEX ON password_check.bad_passwords (plaintext); CREATE FUNCTION password_check.passcheck_hook(username text, password text, password_type pgtle.password_types, valid_until timestamptz, valid_null boolean) RETURNS void AS $$ DECLARE invalid bool := false; BEGIN -- Check password length IF length(password) < 8 THEN RAISE EXCEPTION 'Password must be at least 8 characters long.'; END IF; -- Check common passwords from password from bad_passwords table IF password_type = 'PASSWORD_TYPE_MD5' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE ('md5' || md5(bp.plaintext || username)) = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common password dictionary'; END IF; ELSIF password_type = 'PASSWORD_TYPE_PLAINTEXT' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE bp.plaintext = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common password dictionary'; END IF; END IF; -- Check password contains uppercase lowercase number and special character IF NOT (password ~ '[A-Z]' AND password ~ '[a-z]' AND password ~ '[0-9]' AND password ~ '[^a-zA-Z0-9]') THEN RAISE EXCEPTION 'Password must contain uppercase letters, lowercase letters, numbers, and special characters'; END IF; END $$ LANGUAGE plpgsql SECURITY DEFINER; GRANT EXECUTE ON FUNCTION password_check.passcheck_hook TO PUBLIC; SELECT pgtle.register_feature('password_check.passcheck_hook', 'passcheck'); $_pgtle_$);Observação: no comando anterior, substitua example-password-check-rules pelo nome das suas regras de verificação de senha.
-
Execute a consulta a seguir para criar a extensão:
postgres=> CREATE EXTENSION "example-password-check-rules";Observação: no comando anterior, substitua example-password-check-rules pelo nome das suas regras de verificação de senha.
-
Modifique seu grupo de parâmetros personalizados associado à sua instância e ative o parâmetro pgtle.enable_password_check.
-
Para testar suas regras de verificação de senha, use os exemplos a seguir.
Exemplo:postgres=> CREATE ROLE t_role PASSWORD 'password';ERROR: Cannot use passwords from the common password dictionary CONTEXT: PL/pgSQL function password_check.passcheck_hook(text,text,pgtle.password_types,timestamp with time zone,boolean) line 25 at RAISE SQL statement "SELECT password_check.passcheck_hook($1::pg_catalog.text, $2::pg_catalog.text, $3::pgtle.password_types, $4::pg_catalog.timestamptz, $5::pg_catalog.bool)"Observação: o exemplo anterior indica um erro porque você não pode usar senhas do dicionário comum de senhas.
Exemplo:postgres=> CREATE ROLE t_role PASSWORD 'pass';ERROR: Password must be at least 8 characters long. CONTEXT: PL/pgSQL function password_check.passcheck_hook(text,text,pgtle.password_types,timestamp with time zone,boolean) line 7 at RAISE SQL statement "SELECT password_check.passcheck_hook($1::pg_catalog.text, $2::pg_catalog.text, $3::pgtle.password_types, $4::pg_catalog.timestamptz, $5::pg_catalog.bool)"Observação: o exemplo anterior indica um erro porque a senha deve ter pelo menos 8 caracteres.
Exemplo:postgres=> CREATE ROLE t_role PASSWORD 'passwordd';ERROR: Password must contain uppercase letters, lowercase letters, numbers, and special characters CONTEXT: PL/pgSQL function password_check.passcheck_hook(text,text,pgtle.password_types,timestamp with time zone,boolean) line 31 at RAISE SQL statement "SELECT password_check.passcheck_hook($1::pg_catalog.text, $2::pg_catalog.text, $3::pgtle.password_types, $4::pg_catalog.timestamptz, $5::pg_catalog.bool)"Observação: o exemplo anterior indica um erro porque a senha deve conter letras maiúsculas, minúsculas, números e caracteres especiais.
Para versões do Amazon RDS para PostgreSQL que não oferecem suporte ao TLE, use o AWS Identity and Access Management (AWS IAM) para autenticação Amazon RDS ou Kerberos. Além disso, para restringir a criação de senhas a um conjunto de perfis ou a um perfil específica, consulte Delegar e controlar o gerenciamento de senhas de usuários.
Informações relacionadas
Trabalhando com extensões de linguagem confiáveis para PostgreSQL
Referência de hooks para Trusted Language Extensions for PostgreSQL
- Idioma
- Português

Conteúdo relevante
- feita há 9 meses
- feita há um ano