Gerenciar a autenticação integrada usando políticas de senha

Selecione uma versão da documentação:

Nesta página, descrevemos como definir e gerenciar políticas de senha para o AlloyDB Omni.

Sobre as políticas de senha

Se os usuários do banco de dados do aplicativo forem autenticados com o AlloyDB Omni usando o método integrado baseado em senha, você poderá tornar a autenticação mais segura aplicando senhas fortes. É possível definir e ativar a aplicação de senhas definindo uma política de senhas do AlloyDB Omni.

Limitações das políticas de senha

As políticas de senha do AlloyDB Omni têm as seguintes limitações:

  • As políticas de senha se aplicam apenas às senhas criadas depois que você as define. As senhas de usuário atuais não são afetadas por uma mudança na política de senhas.

  • As políticas de senha se aplicam apenas a senhas inseridas como texto simples. As políticas de senha não se aplicam a senhas inseridas como strings criptografadas.

Definir uma política de senhas do AlloyDB Omni

Para definir uma política de senhas, atualize os parâmetros de senha da configuração unificada geral (GUC, na sigla em inglês) no arquivo de configuração postgresql.conf. Para saber como definir um parâmetro GUC, consulte Configurar flags de banco de dados do AlloyDB Omni.

Uma política de senhas para o AlloyDB Omni pode incluir as seguintes opções:

  • Não permitir nome de usuário: impede que o nome de usuário seja usado na senha.

  • Complexidade da senha: verifica se a senha contém o número permitido de caracteres minúsculos, maiúsculos, numéricos e não alfanuméricos. Também verifica se o comprimento da senha é válido.

  • Validade da senha: garante que as senhas sejam trocadas periodicamente.

Para uma lista das flags de política de senhas compatíveis com o AlloyDB Omni compatíveis, consulte Flags de política de senhas.

Para obedecer aos padrões de segurança e se alinhar às orientações do recomendador de segurança, ative as três opções juntas configurando as flags de aplicação principais como ON:

  • password.enforce_password_does_not_contain_username
  • password.enforce_complexity
  • password.enforce_expiration

Se você definir alguma dessas três flags como OFF ou omiti-las, o recomendador de segurança vai marcar a instância como não tendo uma política de senhas ativada.

Pré-carregar a biblioteca de validação de senhas

Para que uma política de senhas entre em vigor no AlloyDB Omni, a biblioteca alloydb_password_validation precisa ser carregada. Para carregar essa biblioteca, faça o seguinte:

  1. Localize o arquivo de configuração postgresql.conf para a instalação do AlloyDB Omni e abra-o em um editor de texto.

  2. Localize a linha shared_preload_libraries e verifique se ela inclui alloydb_password_validation. Se não incluir, adicione-a. Quando terminar, a linha shared_preload_libraries vai ficar semelhante a esta:

    shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
    

Aplicar a complexidade da senha

Para aplicar uma política de complexidade de senha, faça o seguinte:

  1. Verifique se o arquivo postgresql.conf pré-carrega a biblioteca de validação de senhas.

  2. Defina a password.enforce_complexity flag como ON.

  3. Use flags de política de senhas para definir sua política de senhas.

Por exemplo, para aplicar uma política de senhas que declare que uma senha precisa conter pelo menos uma letra maiúscula, um número e ter pelo menos 10 caracteres, defina o seguinte no arquivo postgresql.conf:

  • password.enforce_complexity = ON
  • password.min_uppercase_letters = 1
  • password.min_numerical_chars = 1
  • password.min_pass_length = 10

Depois que essas flags forem definidas, uma tentativa de definir uma senha de usuário do banco de dados que não esteja em conformidade com essa política de senhas vai falhar. Por exemplo, com essa política definida, o comando do cliente psql a seguir falha porque a senha foo tem menos de 10 caracteres e não contém um número ou um caractere maiúsculo.

CREATE USER USERNAME WITH PASSWORD foo;

Aplicar a validade da senha

Para aplicar a política de validade da senha, faça o seguinte:

  1. Verifique se o arquivo postgresql.conf pré-carrega a biblioteca de validação de senhas.

  2. Defina a password.enforce_expiration flag como ON.

  3. Defina a password.expiration_in_days flag como o número de dias após a definição de uma senha para que ela expire.

  4. Defina a password.notify_expiration_in_days flag como o número de dias antes da expiração de uma senha para que um usuário comece a receber notificações de expiração de senha.

Por exemplo, para aplicar uma política de senhas que declare que as senhas expiram após 30 dias e que os usuários são notificados 15 dias antes da expiração da senha, defina o seguinte no arquivo postgresql.conf:

  • password.enforce_expiration = ON
  • password.expiration_in_days = 30
  • password.notify_expiration_in_days = 15

Se a senha de um usuário expirar, ele não poderá se conectar ao AlloyDB Omni. Para redefinir a senha de um usuário, faça o seguinte:

  1. Conecte-se ao AlloyDB Omni usando psql. Por exemplo, se você instalou o AlloyDB Omni usando o Docker, execute o seguinte comando:

    sh docker exec -it CONTAINER-NAME psql -h localhost -U postgres

  2. No prompt postgres=#, execute o seguinte comando:

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

Para mais informações sobre como mudar a senha de um usuário, consulte ALTER ROLE na documentação do PostgreSQL.

Aplicar a autenticação baseada em senha para contas de administrador internas

A aplicação de senhas para contas de administrador automatiza e centraliza a rotação e atualização seguras de senhas críticas do sistema, geralmente usando uma ferramenta externa, como Vault. Esse recurso permite a adesão à política de confiança zero, aplicando a autenticação baseada em senha para contas de administrador críticas que o AlloyDB Omni usa para gerenciar vários processos internos.

A aplicação de senhas é compatível com as seguintes contas de banco de dados:

  • alloydbadmin: a conta de superusuário do controlador do Kubernetes (K8s).
  • alloydbmonitor: uma conta somente leitura para coletar métricas de banco de dados.

Para ativar a aplicação, configure a especificação do cluster de banco de dados para referenciar objetos secretos do Kubernetes que armazenam as senhas dessas contas. Esse processo aumenta a segurança e reduz a sobrecarga manual necessária para gerenciar as credenciais das contas de administração internas do banco de dados.

Ativar a aplicação de senhas

Para ativar a aplicação de senhas ao criar um cluster, siga estas etapas:

  1. Verifique se você tem um cluster do Kubernetes executando o operador do Kubernetes do AlloyDB Omni 1.7.0 ou mais recente.
  2. Adicione o atributo systemUserPasswordRefs à especificação do DBCluster. Esse atributo precisa conter pares de chave-valor que vinculam cada nome de conta do sistema interno, por exemplo, alloydbadmin e alloydbmonitor, ao nome do objeto secreto do Kubernetes correspondente.
  3. Antes de criar o banco de dados, verifique se o secret do Kubernetes referenciado contém a senha inicial do usuário e se o formato do atributo segue esta estrutura:

    systemUserPasswordRefs: USER_NAME:USER_NAME-PASSWORD-DATABASE_NAME
    

Gerenciar a rotação de senhas com segurança

Depois de ativar a aplicação, use uma ferramenta externa, como o Vault, para gerenciar a rotação contínua de senhas com segurança.

  1. Atualize a senha do banco de dados. A ferramenta externa atualiza a senha da conta do sistema diretamente no AlloyDB Omni.
  2. Atualize o secret do Kubernetes. A ferramenta externa atualiza o objeto secreto do Kubernetes associado com a nova senha.

    • O conteúdo do objeto secreto precisa ser um par de chave-valor em que a chave é o nome do banco de dados e o valor é a nova senha codificada em base64.
    • Recomendamos usar a seguinte convenção para o nome secreto:

      USER_NAME-pw-DATABASE_NAME
      

    O operador do AlloyDB Omni detecta a mudança no secret do Kubernetes e atualiza automaticamente o cache de senhas usado pelo agente de banco de dados em execução no pod do banco de dados. Em seguida, o agente usa essa nova senha armazenada em cache para todas as operações futuras do banco de dados.

Desativar a aplicação de senhas para um usuário específico

Para desativar a aplicação de senhas para uma conta de sistema específica, remova esse usuário da lista systemUserPasswordRefs na especificação do DBCluster.

  1. Remova o usuário. Na especificação do DBCluster, exclua o par de chave-valor correspondente ao usuário que você quer excluir da aplicação de senhas. Por exemplo, se você estiver desativando para alloydbadmin, remova alloydbadmin: alloydbadmin-pw-dbcluster-sample.
  2. Aplique a especificação modificada do DBCluster usando kubectl apply.

    Depois de aplicar a especificação atualizada, a aplicação de senhas será desativada para esse usuário.

Não permitir nomes de usuário em senhas

Para aplicar a política que impede que uma senha contenha um nome de usuário, faça o seguinte:

  1. Verifique se o arquivo postgresql.conf pré-carrega a biblioteca de validação de senhas.

  2. Defina o password.enforce_password_does_not_contain_username como ON.

Por exemplo, para garantir que uma senha não contenha um nome de usuário como uma substring, defina o seguinte no arquivo postgresql.conf:

  • password.enforce_password_does_not_contain_username = ON

Se essa flag estiver definida, a operação a seguir vai falhar porque a senha alex-secret contém o nome de usuário alex:

CREATE USER alex WITH PASSWORD 'alex-secret';

A seguir