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?

8 minuto de leitura
0

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

Breve descrição

Os usuários podem se conectar a uma instância ou cluster de banco de dados do Amazon RDS usando credenciais de usuário ou perfil do IAM e um token de autenticação. A autenticação de banco de dados do IAM é mais segura do que os métodos de autenticação nativos devido ao seguinte:

  • Os tokens de autenticação de banco de dados do IAM são gerados usando suas chaves de acesso da AWS. Você não precisa armazenar credenciais de usuário do banco de dados.
  • Os tokens de autenticação têm um tempo de vida de 15 minutos, então você não precisa impor redefinições de senha.
  • A autenticação de banco de dados do IAM requer uma conexão Secure Socket Layer (SSL). Todos os dados transmitidos de e para sua instância de banco de dados são criptografados.
  • Se sua aplicação estiver sendo executada no Amazon Elastic Compute Cloud (Amazon EC2), você poderá usar suas credenciais de perfil de instância do EC2 para acessar o banco de dados. Você não precisa armazenar senhas de banco de dados em sua instância.

Para configurar a autenticação de banco de dados do IAM usando perfis do IAM, siga estas etapas:

  1. Ative a autenticação de banco de dados do IAM na instância de banco de dados do RDS.
  2. Crie uma conta de usuário do banco de dados que use um token de autenticação da AWS.
  3. Adicione uma política do IAM que mapeie o usuário do banco de dados para o perfil do IAM.
  4. Crie um perfil do IAM que permita o acesso ao Amazon RDS.
  5. Anexe o perfil do IAM à instância do Amazon EC2.
  6. Gere um token de autenticação da AWS para identificar o perfil do IAM.
  7. Baixe o arquivo do certificado raiz SSL ou o arquivo do pacote de certificados.
  8. Conecte-se à instância de banco de dados do RDS usando as credenciais de perfil do IAM e o token de autenticação.
  9. Conecte-se à instância de banco de dados do RDS usando credenciais de perfil do IAM e certificados SSL.

Resolução

Antes de começar, 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 EC2 para se conectar ao banco de dados.

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

Você pode ativar a autenticação de banco de dados do IAM usando o console do Amazon RDS, a AWS Command Line Interface (AWS CLI) ou a API do Amazon RDS. Se você usar o console do Amazon RDS para modificar a instância de banco de dados, selecioneAplicar imediatamente para ativar a autenticação de banco de dados do IAM. A ativação da autenticação do IAM exige uma breve interrupção. Para obter mais informações sobre quais modificações exigem interrupções, consulte Instâncias de banco de dados do Amazon RDS.

Observação: se você escolher Aplicar imediatamente, todas as modificações pendentes também serão aplicadas imediatamente, em vez de durante a janela de manutenção. Isso pode causar uma interrupção prolongada em sua instância. Para obter mais informações, consulte Usar a configuração Aplicar imediatamente.

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

1.    Conecte-se à instância de banco de dados ou ao endpoint do cluster executando o comando a seguir. Digite a senha principal para fazer login.

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

2.    Crie uma conta de usuário do banco de dados que use um token de autenticação da AWS em vez de uma senha:

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

3.    Por padrão, o usuário do banco de dados é criado sem privilégios. Isso aparece como GRANT USAGE quando você executa SHOW GRANTS FOR {dbusername}. Para exigir que uma conta de usuário se conecte usando SSL, execute este comando:

ALTER USER {dbusername} REQUIRE SSL;

4.    Execute o comando exit para fechar o MySQL. 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

1.    Abra o console do IAM.

2.    Selecione Políticas no painel de navegação.

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 sobre como criar essa política, consulte Criar e usar uma política do IAM para acesso do banco de dados do IAM.

Observação: certifique-se de editar o valor Resource com os detalhes dos recursos do banco de dados, como o identificador da instância de banco de dados e o nome de usuário do banco de dados.

5.    Selecione Próximo: tags.

6.    Selecione Próximo: revisão.

7.    Em Nome, insira um nome de política.

8.    Selecione Criar política.

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

1.    Abra o console do IAM.

2.    Selecione Perfis no painel de navegação.

3.    Selecione Criar perfil.

4.    Selecione Serviço da AWS.

5.    Selecione EC2.

6.    Em Selecionar o caso de uso, selecione EC2 e, em seguida, Próximo: permissões.

7.    Na barra de pesquisa, encontre a política do IAM que você criou anteriormente na seção “Adicionar uma política do IAM que mapeie o usuário do banco de dados”.

8.    Selecione Próximo: tags.

9.    Selecione Próximo: revisão.

10.    Em Nome do perfil, insira um nome para esse perfil do IAM.

11.    Selecione Criar perfil.

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

1.    Abra o console do Amazon EC2.

2.    Selecione a instância do EC2 que você usa para se conectar ao Amazon RDS.

3.    Anexe seu perfil do IAM recém-criado à instância do EC2.

4.    Conecte-se à instância do EC2 usando SSH.

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 da AWS CLI para gerar um token de autenticação.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está utilizando a versão mais recente da AWS CLI.

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

Copie e armazene esse token de autenticação para uso posterior. O token expira em 15 minutos após a criação.

Ou você pode gerar um token usando um AWS SDK.

Baixe o arquivo do certificado raiz SSL ou o arquivo do pacote de certificados

Execute este comando para baixar o certificado raiz que funciona para todas as regiões:

$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

Conecte-se à instância de banco de dados do RDS usando as credenciais de perfil do IAM e o token de autenticação

Depois de baixar o arquivo do certificado, execute um dos comandos a seguir para se conectar à instância de banco de dados com SSL.

Observação: se sua aplicação não aceitar cadeias de certificados, execute o seguinte comando para baixar o pacote de certificados:

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

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})"

Dependendo do certificado que você está usando (RootCA ou Pacote), execute um dos seguintes comandos:

Comando RootCA:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

Comando de pacote:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

Observação: se você estiver usando um cliente MariaDB, a opção --enable-cleartext-plugin não é necessária.

Conecte-se à instância de banco de dados do RDS usando credenciais de perfil do IAM e certificados SSL

Depois de baixar o arquivo do certificado, conecte-se à instância de banco de dados com SSL. Para obter mais informações, consulte Conexão a uma instância de banco de dados executando o mecanismo de banco de dados do MySQL.

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?