Quando uso a autenticação do AWS Identity and Access Management (IAM) para me conectar à minha instância do Amazon Relational Database Service (Amazon RDS) para MySQL, recebo uma mensagem de erro “Access Denied”.
Breve descrição
Você pode receber mensagens de erro pelos seguintes motivos:
- Permissões de perfil do IAM insuficientes
- A autenticação do IAM está desativada
- Usuário de banco de dados mal configurado
- String de conexão incorreta
Você pode receber uma mensagem de erro semelhante à seguinte:
“ERROR 1045 (28000): Access denied for user 'root'@'10.0.4.253' (using password: YES)”
Resolução
Use o runbook AWSSupport-TroubleshootRDSIAMAuthentication
Para verificar automaticamente a configuração necessária para a autenticação do IAM com uma instância do Amazon RDS, use o runbook AWSSupport-TroubleshootRDSIAMAuthentication. Para resolver o problema, siga as resoluções fornecidas pelo runbook.
Se o runbook não resolver o problema, prossiga para as outras seções da resolução.
Verifique as permissões do perfil do IAM
Para usar a autenticação do banco de dados do IAM para se conectar à sua instância do Amazon RDS para MySQL, você deve ter acesso à ação rds-db:connect. Para obter mais informações, consulte Criar e usar uma política do IAM para acesso do banco de dados do IAM.
Certifique-se de usar o ID de recurso correto e não apenas especificar um nome do recurso da Amazon (ARN). Para encontrar o ID do recurso para sua instância de banco de dados, conclua as seguintes etapas:
- Abra o console do Amazon RDS.
- No painel de navegação, clique em Bancos de dados.
- Escolha sua instância de banco de dados e, em seguida, escolha a guia Configuração.
- Em Configuração, encontre o ID do recurso da sua instância de banco de dados.
Observação: Para obter mais informações, consulte Criar e usar uma política do IAM para acesso do banco de dados do IAM.
Se você usa uma política de controle de serviços (SCP), certifique-se de que sua política permita conexões com a sua instância de banco de dados. Para obter mais informações, consulte Atualizar uma política de controle de serviços (SCP).
Ative a autenticação do IAM
Por padrão, a autenticação do IAM está desativada para instâncias de banco de dados. Analise as configurações da sua instância do Amazon RDS para MySQL ou do seu cluster de banco de dados do Aurora e confirme se a autenticação do IAM está ativada.
Observação: se você clicar em Aplicar imediatamente, todas as alterações pendentes entrarão em vigor imediatamente, em vez de durante uma janela de manutenção. Essa ação pode interromper sua instância do Amazon RDS para MySQL. Para obter mais informações, consulte Usar a configuração de programação de modificações.
Verifique a configuração do usuário do banco de dados
O plug-in AWSAuthenticationPlugin autentica usuários no Amazon RDS para MySQL. Para conectar-se à sua instância do Amazon RDS para MySQL usando a autenticação do IAM, use o AWSAuthenticationPlugin.
Para confirmar se seu perfil do IAM usa esse plug-in, execute o seguinte comando:
select user,plugin,host from mysql.user where user like '%db-user-name%';
Observação: substitua db-user-name pelo nome de usuário de seu banco de dados.
Exemplo de saída:
+------+-------------------------+------+
| user | plugin | host |
+------+-------------------------+------+
| root | AWSAuthenticationPlugin | % |
+------+-------------------------+------+
1 row in set (0.00 sec)
Caso o perfil do IAM utilize um host específico, então deve-se utilizar esse mesmo nome de host. Além disso, verifique se você possui as permissões corretas para acessar o banco de dados especificado.
Para visualizar as permissões concedidas a um usuário, execute o seguinte comando:
show grants for user;
Observação: substitua user pelo nome de usuário.
Para conceder privilégios a outros usuários, execute o seguinte comando:
grant select on mydb.mytable to user;
Observação: substitua mydb pelo nome da instância de banco de dados, mytable pelo nome da tabela e user pelo nome de usuário.
Para obter mais informações, consulte GRANT statement (Declaração GRANT) no site do MySQL.
Corrija a string de conexã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.
Para conectar-se ao banco de dados do Amazon RDS para MySQL, utilize o parâmetro --enable-cleartext-plugin na sua string de conexão. O parâmetro --enable-cleartext-plugin atua como um token de autenticação. Você deve usar ** AWSAuthenticationPlugin** ao se conectar ao banco de dados e configurar o usuário do banco de dados. Se você não configurar ** AWSAuthenticationPlugin** corretamente, receberá uma mensagem de erro “Access Denied” ao se conectar ao seu banco de dados por meio da autenticação do IAM.
Use o exemplo de string de conexão a seguir:
mysql -h endpoint -P 3306 --enable-cleartext-plugin --user=RDSConnect --password=$
Observação: substitua endpoint pelo nome do host da instância de banco de dados que você deseja acessar.
Se você usa o cliente MariaDB, não precisa do parâmetro --enable-cleartext-plugin. Em vez disso, armazene primeiro o token em uma variável de ambiente. Em seguida, use variáveis de ambiente ao se conectar à sua instância de banco de dados MySQL.
Use o exemplo a seguir:
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 do MySQL usando uma variável de ambiente, consulte Conexão à instância de banco de dados.
Informações relacionadas
Como permitir que os usuários se autentiquem em uma instância de banco de dados Amazon RDS para MySQL usando suas credenciais do IAM?
Autenticação do banco de dados do IAM
Autenticação do banco de dados do IAM para MariaDB, MySQL e PostgreSQL