Ir para o conteúdo

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?

6 minuto de leitura
0

Desejo me conectar a uma instância de banco de dados MySQL do Amazon Relational Database Service (Amazon RDS). Desejo usar as credenciais do AWS Identity and Access Management (AWS IAM) em vez de usar métodos de autenticação nativos.

Resolução

Observação: use uma conexão MySQL não criptografada somente quando seu cliente e servidor estiverem na mesma nuvem privada virtual (VPC) e a rede for confiável.

Pré-requisito: Você deve executar uma instância de banco de dados que ofereça suporte à autenticação de banco de dados do IAM e uma instância do Amazon Elastic Compute Cloud (Amazon EC2) para se conectar ao banco de dados.

Para verificar a configuração necessária para a autenticação do IAM, use o runbook AWSSupport-TroubleshootRDSIAMAuthentication do AWS Systems Manager Automation. Também é possível usar o runbook para solucionar problemas de conectividade com a instância do Amazon RDS ou o cluster Amazon Aurora.

Ative a autenticação de banco de dados do IAM na instância de banco de dados do RDS

É possível usar o console do Amazon RDS, a AWS CLI ou a API do Amazon RDS para ativar a autenticação do banco de dados do IAM.

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.

Se você usar o console do Amazon RDS para modificar a instância do banco de dados, escolha Aplicar imediatamente para ativar a autenticação de banco de dados do IAM. Para obter mais informações, consulte Instâncias de banco de dados do Amazon RDS.

Observação: quando você escolher Aplicar imediatamente, todas as modificações pendentes também serão aplicadas imediatamente. Para obter mais informações, consulte Usando a configuração de modificações do cronograma.

Crie uma conta de usuário do banco de dados que use um token de autenticação da AWS

Para conectar-se à instância de banco de dados ou ao endpoint do cluster, execute o comando a seguir:

mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p

Observação: use sua senha principal para fazer login.

Para criar uma conta de usuário do banco de dados que usa a autenticação do IAM em vez de uma senha, execute o seguinte comando:

CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

Por padrão, o usuário do banco de dados não tem permissões. O usuário do banco de dados aparece como GRANT USAGE quando você executa SHOW GRANTS FOR {dbusername}. Para exigir uma conta de usuário ao usar SSL para se conectar, execute o seguinte comando:

ALTER USER {dbusername} REQUIRE SSL;

Para fechar o MySQL, execute o comando exit. Em seguida, saia da instância de banco de dados.

Adicione uma política do IAM que mapeie o usuário do banco de dados para o perfil do IAM

Conclua as etapas a seguir:

  1. Abra o console do IAM.
  2. No painel de navegação, selecione Políticas.
  3. Selecione Criar política.
  4. Insira uma política que permita a ação rds-db:connect para o usuário necessário. Para obter mais informações, consulte Criar e usar uma política do IAM para acesso do banco de dados do IAM.
    Observação: certifique-se de inserir os detalhes dos recursos do seu banco de dados na seção Recursos.
  5. Escolha Avançar.
  6. Em Nome, insira um nome de política.
  7. Selecione Criar política.

Crie um perfil do IAM que permita o acesso ao Amazon RDS

Conclua as etapas a seguir:

  1. Abra o console do IAM.
  2. No painel de navegação, escolha Perfis.
  3. Selecione Criar perfil.
  4. Na seção Tipo de entidade confiável, selecione Serviço da AWS.
  5. Na seção Caso de uso, em Caso de serviço ou usuário, escolha EC2.
  6. Escolha Avançar.
  7. Use a barra de pesquisa para encontrar a política do IAM.
  8. Escolha Avançar.
  9. Em Nome do perfil, insira um nome para esse perfil do IAM.
  10. Selecione Criar perfil.

Anexe o perfil do IAM à instância do Amazon EC2

Conclua as etapas a seguir:

  1. Abra o console do Amazon EC2.
  2. No painel de navegação, escolha Instâncias e selecione a instância que você usa para se conectar ao Amazon RDS.
  3. Anexe o perfil do IAM à instância do EC2.
  4. Use SSH para se conectar à instância do EC2.

Gere um token de autenticação da AWS para identificar o perfil do IAM

Depois de se conectar à sua instância do Amazon EC2, execute o seguinte comando generate-db-auth-token da AWS CLI para gerar um token de autenticação:

aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}

Copie e armazene o token de autenticação para usar mais tarde. Ou use um AWS SDK para .NET para gerar um token.

Baixe o arquivo do pacote de certificados raiz SSL

Para baixar um pacote de certificados para todas as regiões da AWS, consulte Pacotes de certificados por regiões da AWS.

Use as credenciais de perfil do IAM e o token de autenticação para se conectar à instância do banco de dados do RDS

Depois de baixar o arquivo de certificado, execute o seguinte comando para usar o SSL para se conectar à instância de banco de dados:

RDSHOST="rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com"TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"  

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/global-bundle.pem --enable-cleartext-plugin --user=jane_doe --password=$TOKEN

Observação: se você usa um cliente MariaDB, não inclua a opção —enable-cleartext-plugin.

Use as credenciais de perfil do IAM e certificados SSL para conectar-se à instância do banco de dados do RDS

Depois de baixar o arquivo de certificado, use SSL para se conectar à instância de banco de dados.

Informações relacionadas

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

Quais são os privilégios mínimos necessários para que um usuário realize criações, exclusões, modificações, backup e recuperação em uma instância de banco de dados do Amazon RDS?