Ir para o conteúdo

Como soluciono erros ao usar a autenticação do IAM para me conectar a uma instância do Amazon RDS para PostgreSQL ou a um cluster do Aurora PostgreSQL?

5 minuto de leitura
0

Estou enfrentando erros ao usar a autenticação do AWS Identity Access Management (IAM) para me conectar à minha instância Amazon Relational Database Service (Amazon RDS) para PostgreSQL ou ao cluster Amazon Aurora PostgreSQL Compatible Edition.

Breve descrição

Você poderá receber a mensagem de erro “PAM authentication failed for user” quando ocorrer o seguinte:

  • A autenticação do IAM está desativada
  • A política do IAM não inclui a ação rds-db:connection
  • O perfil rds_iam não está associado ao usuário do banco de dados
  • A conexão está incorreta
  • Um perfil do IAM incorreto é usado

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.

A autenticação do IAM está desativada

Por padrão, a autenticação do IAM está desativada. Ative a autenticação IAM para sua instância do Amazon RDS para PostgreSQL ou cluster compatível com o Aurora PostgreSQL.

A política do IAM não inclui a ação rds-db:connect

Para usar a autenticação do banco de dados do IAM para se conectar à sua instância de banco de dados, atualize sua política para incluir a ação rds-db:connect.

Veja a seguir um exemplo de política:

{    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Effect": "Allow",  
            "Action": [  
                "rds-db:connect"  
            ],  
            "Resource": [  
                " arn:aws:rds-db:region:account-id:dbuser:(DbiResourceId for RDS PostgreSQL or DbClusterResourceId for Aurora PostgreSQL)/db_user_name"  
            ]  
        }  
    ]  
}

Observação: certifique-se de usar o ID de recurso e o Nome do recurso da Amazon (ARN) corretos na política.

Para encontrar o ID do recurso de uma instância de banco de dados, selecione a instância de banco de dados ou o cluster no console do Amazon RDS e, em seguida, escolha a guia Configuração. Para obter mais informações, consulte Criando e utilizando uma política do IAM para ter acesso ao banco de dados do IAM.

Observação: A autenticação do IAM não oferece suporte a chaves de contexto específicas do serviço ou de condição global no elemento de condição das declarações de política.

O perfil rds_iam não está associado ao usuário do banco de dados

Para usar a autenticação IAM com o PostgreSQL, o usuário do banco de dados deve assumir o perfil rds_iam. Para confirmar se esse perfil está associado ao usuário, execute o seguinte comando no cliente PostgreSQL:

\du

A seguir está a saída esperada:


                                         List of rolesRole name       |                         Attributes                         | Member of                            
----------------+------------------------------------------------------------+-------------------------------------------------------------  
db_user_name    |                                                            | {rds_iam}                                  
postgres        | Create role, Create DB                                     | {rds_superuser}            
                | Password valid until infinity                              |

Você também pode executar a seguinte consulta em qualquer plataforma:

SELECT r.rolname,       ARRAY(  
           SELECT b.rolname  
           FROM pg_catalog.pg_auth_members m  
           JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)  
           WHERE m.member = r.oid  
       ) AS memberof  
FROM pg_catalog.pg_roles r  
WHERE r.rolname !~ '^pg_'  
ORDER BY 1;

Para criar um usuário e conceder o perfil rds_iam, execute o seguinte comando:

CREATE USER db_user_name WITH LOGIN;GRANT rds_iam TO db_user_name;

A conexão está incorreta

Os tokens de autenticação incluem vários caracteres que podem ser difíceis de usar na linha de comando. Em vez disso, salve o token de autenticação em uma variável de ambiente. Em seguida, use a variável de ambiente ao se conectar ao cluster do Aurora PostgreSQL.

Veja a seguir um exemplo de geração de token de autenticação com variáveis de ambiente:

export RDSHOST='aurorapostgresql.cluster-abcdef12ghi.us-east-1.rds.amazonaws.com'export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-east-1 --username db_user_name)"  
psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=global-bundle.pem dbname=postgres user=db_user_name password=$PGPASSWORD"

Quando o cliente tenta se conectar à instância de banco de dados sem uma conexão SSL/TLS, você recebe o seguinte erro:

“FATAL: nenhuma entrada pg_hba.conf para o host “host.ip”, usuário”<username>“, banco de dados “postgres”, SSL desativado FATAL: falha na autenticação de senha para o usuário “db_user_name””

A autenticação do banco de dados do IAM exige uma conexão SSL/TLS, porque todos os dados que transmitidos de e para sua instância de banco de dados são criptografados. Para evitar o erro anterior, certifique-se de usar uma conexão SSL/TLS. É uma prática recomendada usar a opção sslmode como verify-full e fornecer o certificado na opção sslrootcert em sua string de conexão.

Para baixar o certificado da autoridade de certificação (CA) mais recente, consulte Como usar SSL/TLS para criptografar uma conexão com um cluster de banco de dados.

Um perfil do IAM incorreto é usado

É possível receber uma mensagem de erro porque está usando um perfil do IAM incorreto para gerar o token de autenticação. Para verificar o perfil assumido pelo usuário atual do IAM, execute o comando get-caller-identity:

aws sts get-caller-identity

Se o perfil assumido estiver incorreto, mude de um usuário do IAM para o perfil correto do IAM ou assuma o perfil correto. Se você ainda receber uma mensagem de erro, verifique se a conta da AWS faz parte de uma organização do AWS Organizations. Se a conta fizer parte de uma organização, crie uma política de controle de serviços (SCP) que permita rds-db:. Para obter mais informações, consulte Efeitos de SCP sobre permissões.

Além disso, verifique se há uma hierarquia de usuário do IAM que não tem a permissão rds-db:. Para obter mais informações, consulte Como usar políticas de controle de serviço para definir barreiras de proteção em todas as contas em sua organização da AWS.
Se você usar limites de permissões para entidades do IAM, permita a ação rds-db:connect para seu usuário ou perfil do IAM. Para modificar os limites de permissões de um usuário, consulte Alterar o limite de permissões de um usuário.

AWS OFICIALAtualizada há 5 meses