Ir para o conteúdo

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

6 minuto de leitura
0

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

Breve descrição

A mensagem de erro “PAM authentication failed for user” poderá ser exibida quando o seguinte ocorrer:

  • A autenticação do IAM está desativada
  • A política do IAM não inclui a ação rds-db:connect
  • 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 foi usado

Resolução

Observação: se você receber mensagens de erro 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 fica desativada. Ative a autenticação do IAM para sua instância do Amazon RDS para PostgreSQL ou o 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.

Confira 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 o cluster ou a instância de banco de dados no console do Amazon Aurora e do RDS e, em seguida, escolha a guia Configuração. Para obter mais informações, consulte Criar e usar uma política do IAM para acesso do banco de dados do IAM.

Observação: a autenticação do IAM não é compatível com chaves de contexto de condição globais ou específicas de serviço no elemento de condição das instruções da política.

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

Para usar a autenticação do 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 saída esperada é a seguinte:

                                         List of roles
Role 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. O recomendado é salvar 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.

Confira 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, recebe o seguinte erro:

“FATAL: no pg_hba.conf entry for host "host.ip", user "<username>", database "postgres", SSL off FATAL: password authentication failed for user "db_user_name"”

A autenticação do banco de dados do IAM exige uma conexão SSL/TLS porque todo o tráfego de entrada e saída de dados da sua instância de banco de dados é criptografado. 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 Usar SSL/TLS para criptografar uma conexão com um cluster de banco de dados.

Um perfil do IAM incorreto foi usado

Você pode 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 do usuário do IAM que não possui a permissão rds-db:. Para obter mais informações, consulte How to use service control policies to set permission guardrails across accounts in your AWS Organization.

Se você usa 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 Para alterar o limite de permissões de um usuário.

Conectar-se com outra conta da AWS

Se você se conectar a um cluster compatível com o Aurora PostgreSQL com outra conta da AWS, gere o token de autenticação usando credenciais temporárias da conta do cluster. Execute o seguinte comando assume-role da AWS CLI para assumir um perfil na conta do cluster:

aws sts assume-role \
    --role-arn arn:aws:iam::CLUSTER-ACCOUNT-ID:role/ROLE-NAME \
    --role-session-name cross-account-session

Observação: substitua CLUSTER-ACCOUNT-ID pelo ID da conta da AWS em que o cluster reside e ROLE-NAME pelo nome do seu perfil do IAM.

Em seguida, exporte as credenciais temporárias e gere o token de autenticação:

export AWS_ACCESS_KEY_ID=TEMPORARY-ACCESS-KEY
export AWS_SECRET_ACCESS_KEY=TEMPORARY-SECRET-KEY
export AWS_SESSION_TOKEN=TEMPORARY-SESSION-TOKEN

export PGPASSWORD="$(aws rds generate-db-auth-token --hostname CLUSTER-ENDPOINT --port 5432 --region REGION --username DB-USER-NAME)"

Observação: Substitua TEMPORARY-ACCESS-KEY, TEMPORARY-SECRET-KEY e TEMPORARY-SESSION-TOKEN pelos valores da saída de assume-role. Substitua CLUSTER-ENDPOINT pelo endpoint do cluster, REGION pela sua região da AWS e DB-USER-NAME pelo nome de usuário do banco de dados.

Se você gerar o token usando diretamente as credenciais da conta de origem, receberá um erro “password authentication failed”, mesmo que todas as relações de confiança e políticas do IAM estejam configuradas corretamente. O token deve ser gerado de credenciais que pertencem à mesma conta do cluster.

Informações relacionadas

Autenticação do banco de dados do IAM para Aurora

Conectar-se ao cluster de banco de dados usando a autenticação do IAM

Para alterar o limite de permissões de um usuário

AWS OFICIALAtualizada há um ano
1 Comentário

This article was reviewed and updated on 2025-05-27.

ESPECIALISTA

respondeu há 4 meses