Por que estou recebendo um erro de acesso negado quando tento me conectar ao Amazon RDS para MySQL usando a autenticação do IAM?

5 minuto de leitura
0

Estou tentando me conectar à instância do Amazon Relational Database Service (Amazon RDS) para MySQL usando a autenticação do AWS Identity Access Management (IAM). Mas continuo recebendo um erro "Access Denied" (Acesso negado): ERROR 1045 (28000): Access denied for user 'root'@'10.0.4.253' (using password: YES) (ERRO 1045 (28000):Acesso negado para o usuário 'root'@'10.0.4.253' [usando senha: SIM]) Como corrigir isso?

Descrição breve

Se você não conseguir se conectar a uma instância de banco de dados Amazon RDS para MySQL ou Aurora usando a autenticação do IAM, verifique os seguintes motivos:

  • Autenticação do IAM desativada
  • Permissões de perfil do IAM insuficientes
  • Usuário do banco de dados está configurado incorretamente
  • String de conexão incorreta

Resolução

Autenticação do IAM desativada

Por padrão, a autenticação do IAM está desativada. Reveja as configurações do cluster Amazon RDS para MySQL e certifique-se de que a autenticação do IAM esteja ativada. No console do Amazon RDS, você pode modificar a instância escolhendo Database Authentication(Autenticação de banco de dados). Depois, escolha Password and IAM database authentication (Senha e autenticação de banco de dados do IAM) e Continue (Continuar) para atualizar as configurações.

Observação: se você escolher Apply Immediately (Aplicar imediatamente) ao atualizar as configurações do cluster, todas as modificações pendentes serão aplicadas imediatamente (em vez de durante uma janela de manutenção). Esta ação pode causar uma interrupção prolongada da instância do Amazon RDS para MySQL. Para obter mais informações, consulte Usar a configuração Aplicar imediatamente.

Permissões de função IAM insuficientes

Para se conectar com êxito à sua instância do Amazon RDS for MySQL usando a autenticação de banco de dados do IAM, você deve ter acesso à ação rds-db:connect. A ação rds-db:connect permite conexões com a instância de banco de dados.

Por exemplo:

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

Observação: substitua db-user-name pelo usuário da conta do banco de dados associado à autenticação do IAM.

Além disso, verifique se você está usando o ID de recurso correto (em vez de especificar apenas o ARN). Para encontrar o ID de recurso de uma instância de banco de dados, escolha a guia Recurso no console de gerenciamento da AWS. Em seguida, escolha a guia Configuração para exibir o ID do recurso.

Para obter mais informações sobre os elementos listados no exemplo de política do IAM, consulte Criação e uso de uma política do IAM para acesso ao banco de dados do IAM.

Usuário do banco de dados está configurado incorretamente

Com o Amazon RDS para MySQL, a autenticação do IAM é tratada pelo AWSAuthenticationPlugin. Então, para se conectar à instância do Amazon RDS para MySQL usando a autenticação do IAM, você deve usar o AWSAuthenticationPlugin. Para confirmar que esse plug-in está associado ao seu perfil do IAM, execute o seguinte comando:

select user,plugin,host from mysql.user where user like '%db-user-name%';

Você recebe uma saída similar a esta:

+------+-------------------------+------+
| user | plugin | host |
+------+-------------------------+------+
| root | AWSAuthenticationPlugin | % |
+------+-------------------------+------+
1 row in set (0.00 sec)

Se o perfil do IAM for restrito ao uso de um host específico, certifique-se de que esteja usando o nome de host correto. Além disso, certifique-se de que tenha as permissões adequadas para acessar o banco de dados especificado.

Para visualizar as permissões concedidas a um usuário, use esta sintaxe de comando:

show grants for <user>;

Para conceder privilégios a outro usuário, use esta sintaxe de comando:

grant select on <mydb>.<mytable> to <user>;

String de conexão incorreta

Ao se conectar ao banco de dados Amazon RDS para MySQL, você deve usar a opção --enable-cleartext-plugin na string de conexão. A sintaxe --enable-cleartext-plugin é usada para passar a senha, que funciona como um token de autenticação.

Por exemplo:

$ mysql -h <endpoint> -P 3306 --enable-cleartext-plugin --user=RDSConnect --password=$

A sintaxe --enable-cleartext-plugin também indica que o AWSAuthenticationPlugin deve ser usado para a conexão de banco de dados. O plugin é necessário ao configurar o usuário do banco de dados e é necessário para que a autenticação do IAM funcione. Se o AWSAuthenticationPlugin estiver configurado incorretamente, a autenticação do IAM não funcionará. Como resultado, você receberá um erro Acesso negado ao tentar se conectar ao banco de dados.

Além disso, como os tokens de autenticação consistem em vários caracteres (o que pode ser desordenado na linha de comando), salve o token em uma variável de ambiente. Em seguida, use essa variável ao se conectar à sua instância de banco de dados MySQL. Por exemplo:

RDSHOST="rdsmysql.123456789012.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username db-user-name)"
mysql --host=$RDSHOST --port=3306 --enable-cleartext-plugin --user=db-user-name --password=$TOKEN

Para obter mais informações sobre como se conectar a uma instância de banco de dados MySQL usando uma variável de ambiente, consulte Estabelecendo conexão a uma instância de banco de dados.


Informações relacionadas

Como faço para permitir que os usuários se autentiquem em uma instância de banco de dados MySQL do Amazon RDS usando suas credenciais do IAM?

Autenticação de banco de dados do IAM

Autenticação de banco de dados do IAM para MySQL e PostgreSQL