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?
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:
- Ative a autenticação de banco de dados do IAM na instância de banco de dados do RDS.
- Crie uma conta de usuário do banco de dados que use um token de autenticação da AWS.
- Adicione uma política do IAM que mapeie o usuário do banco de dados para o perfil do IAM.
- Crie um perfil do IAM que permita o acesso ao Amazon RDS.
- Anexe o perfil do IAM à instância do Amazon EC2.
- Gere um token de autenticação da AWS para identificar o perfil do IAM.
- Baixe o arquivo do certificado raiz SSL ou o arquivo do pacote de certificados.
- Conecte-se à instância de banco de dados do RDS usando as credenciais de perfil do IAM e o token de autenticação.
- 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
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 3 anos