Como me conecto ao Amazon RDS para PostgreSQL ou Amazon Aurora PostgreSQL usando a autenticação do IAM?

6 minuto de leitura
0

Tenho uma instância de banco de dados Amazon Relational Database Service (Amazon RDS) para PostgreSQL ou compatível com Amazon Aurora PostgreSQL. Quero usar a autenticação do AWS Identity and Access Management (IAM) para me conectar à minha instância.

Breve descrição

A autenticação do banco de dados do IAM é mais segura do que os métodos de autenticação nativos pelos seguintes motivos:

  • O IAM usa suas chaves de acesso da AWS para gerar tokens de autenticação do banco de dados. Você não precisa armazenar credenciais de usuário do banco de dados.
  • Os tokens de autenticação têm uma vida útil de 15 minutos, então você não precisa impor redefinições de senha.
  • A autenticação do banco de dados do IAM requer uma conexão SSL. Isso criptografa todos os dados que você transmite de e para sua instância de banco de dados do Amazon RDS.
  • Se seu aplicativo for executado na Amazon Elastic Compute Cloud (Amazon EC2), você poderá usar as credenciais do perfil de instância do Amazon 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 do banco de dados do IAM usando funções do IAM, siga estas etapas:

  1. Ative a autenticação do banco de dados IAM na instância de banco de dados do RDS.
  2. Crie um usuário do IAM e anexe uma política do IAM que mapeia o usuário do banco de dados ao perfil do IAM.
  3. Conecte o perfil do IAM à instância do EC2.
  4. Gere um token de autenticação da AWS para identificar o perfil do IAM.
  5. Baixe o arquivo do certificado raiz SSL ou o arquivo do pacote de certificados.
  6. Para se conectar à instância de banco de dados do RDS, use suas credenciais de perfil do IAM e o token de autenticação ou um certificado SSL.

Se você executa o MySQL, consulte Como permitir que os usuários se autentiquem em uma instância de banco de dados do Amazon RDS para MySQL usando suas credenciais do IAM?

Resolução

Antes de começar, complete os seguintes pré-requisitos:

  • Inicie uma instância de banco de dados do Amazon RDS para PostgreSQL ou um cluster compatível com o Aurora PostgreSQL que ofereça suporte à autenticação de banco de dados do IAM
  • Inicie uma instância do EC2 para se conectar ao banco de dados

Para mais informações, consulte Autenticação de banco de dados do IAM para Aurora e autenticação de banco de dados do IAM para Amazon RDS.

Para se conectar a uma instância de banco de dados do RDS ou a um cluster de banco de dados compatível com o Aurora PostgreSQL, use a autenticação de banco de dados do IAM para PostgreSQL:

  1. Ative a autenticação do IAM em sua instância de banco de dados do RDS ou em seu cluster Aurora.

  2. Crie um usuário do IAM e, em seguida, anexe a seguinte política:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "rds-db:connect"
          ],
          "Resource": [
            "arn:aws:rds-db:REGION:ACCOUNT:dbuser:RESOURCE_ID/iamuser"
          ]
        }
      ]
    }

    **Observação:**substitua iamuser pelas informações do usuário do IAM.

  3. Faça login na sua instância de banco de dados do Amazon RDS for PostgreSQL ou no cluster compatível com o Aurora PostgreSQL como usuário principal:

    psql

    psql -h {database or cluster endpoint} -U {Master username} -d {database name}

    pgAdmin

    Escolha Servidores no painel de navegação pgAdmin. Em seguida, escolha o nome do servidor e insira a senha do usuário principal.

  4. Crie um usuário filho que tenha o mesmo nome do usuário do IAM:

    CREATE USER iamuser WITH LOGIN;
    GRANT rds_iam TO iamuser;
  5. Execute generate-db-auth-token com o nome de usuário que você criou. Isso cria uma senha temporária que você usa em uma etapa posterior:

    [ec2-user@ip-172-31-24-237 ~]$ export RDSHOST="aurorapg-ssl.cluster-XXXXXXXXXXX.us-west-2.rds.amazonaws.com"
    [ec2-user@ip-172-31-24-237 ~]$ export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username iamuser)"
    [ec2-user@ip-172-31-24-237 ~]$ echo $PGPASSWORD
    aurorapg-ssl.cluster-XXXXXXX.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=iamuser&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIA2O5GXNVDTAMABZFE%2F20190909%2Fus-west-2%2Frds-db%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20190909T171907Z&X-Amz-Signature=ead28003477c3082e5a17529ac8316db4f4bdf2fa8f79d3aaea806e9bafa2673
    [ec2-user@ip-172-31-24-237 ~]$
  6. Para criar uma nova conexão de servidor no pgAdmin, escolha a guia Geral e desmarque a caixa Conectar agora. Na guia Conexão, digite o nome do host, a porta e o nome de usuário, mas não digite a senha ainda. Na guia SSL, defina o modo SSL como Exigir e salve a conexão do servidor.

  7. (Opcional) Na guia SSL, você pode alterar o modo SSL para verificação completa. Para o modo SSL selecionado, insira o caminho do certificado. Para baixar o caminho, execute o seguinte comando:

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

    **Observação:**os certificados raiz de 2015 expiraram em 2020. Para migrar para um certificado raiz de 2019, consulte Como alternar seu certificado SSL/TLS.

    Se seu aplicativo não aceitar cadeias de certificados, baixe o pacote de certificados que inclui os certificados raiz antigos e novos:

    $ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  8. Depois de criar o servidor, conecte-se ao servidor. Insira o token temporário que generate-db-auth-token gerou para o usuário iamuser, quando solicitado.

Para psql, execute o comando a seguir para se conectar. Este exemplo usa a variável de ambiente $PGPASSWORD que você definiu ao gerar o token. Essa variável inicia a conexão:

psql -h aurorapg-ssl.cfkx5hi8csxj.us-west-2.rds.amazonaws.com -p 5432 "sslmode=verify-full sslrootcert=rds-ca-2019-root.pem dbname=aurora_pg_ssl user=iamuser"

**Observação:**cada token expira 15 minutos após sua geração. Se você tentar restabelecer a conexão com o mesmo token, a conexão falhará. Você deve gerar um novo token.

Se você ainda receber um erro semelhante a falha na autenticação do PAM para seu usuário, verifique se a conta da AWS faz parte de uma organização do AWS Organizations. Se a conta fizer parte de uma organização, adicione rds-db:* à política de controle de serviços (SCP) da organização à qual a conta pertence. Além disso, verifique se há uma hierarquia de usuário ou perfil do IAM que não tem a permissão rds-db. Para mais informações, consulte Como usar políticas de controle de serviços para definir barreiras de proteção em todas as contas em sua organização da AWS.

Informações relacionadas

Como usar a autenticação do IAM com edição compatível com Aurora PostgreSQL