Configurar credenciais de banco de dados no AWS Secrets Manager para RDS Proxy - Amazon Relational Database Service

Configurar credenciais de banco de dados no AWS Secrets Manager para RDS Proxy

O RDS Proxy no Amazon RDS usa o AWS Secrets Manager para armazenar e gerenciar credenciais de banco de dados com segurança. Em vez de incorporar credenciais na aplicação, você associa um proxy a um segredo do Secrets Manager que contenha os detalhes de autenticação necessários. Crie um segredo separado do Secrets Manager para cada conta de usuário de banco de dados ao qual o proxy se conecta na instância de banco de dados do RDS.

Criar segredos para usá-los com o RDS Proxy

Antes de criar um proxy, você deve primeiro criar pelo menos um segredo que armazene suas credenciais de banco de dados.

Como criar um segredo
  1. Abra o console Secrets Manager em https://console.aws.amazon.com/secretsmanager/.

  2. Escolha Armazenar Novo Segredo.

  3. Escolha Credenciais para um banco de dados do Amazon RDS.

  4. Insira um nome de usuário e senha. As credenciais que você inserir devem corresponder às credenciais de um usuário do banco de dados que exista no banco de dados do RDS correlacionado. O RDS Proxy usa essas credenciais para autenticar e estabelecer conexões com o banco de dados em nome das aplicações.

    Se houver alguma incompatibilidade, você poderá atualizar o segredo para que corresponda à senha do banco de dados. Enquanto você não atualizar o segredo, as tentativas de conexão por meio do proxy usando esse segredo falharão, mas as conexões que usam outros segredos válidos ainda funcionarão.

    nota

    No caso do RDS para SQL Server, o RDS Proxy exige um segredo com distinção entre maiúsculas e minúsculas no Secrets Manager, independentemente das configurações de agrupamento da instância de banco de dados. Se a aplicação permitir nomes de usuário com diferentes usos de maiúsculas e minúsculas, como “Admin” e “admin”, você deverá criar segredos separados para cada um. O RDS Proxy não aceita autenticação de nome de usuário sem distinção entre maiúsculas e minúsculas entre o cliente e o proxy.

    Para ter mais informações sobre agrupamento no SQL Server, consulte a documentação do Microsoft SQL Server.

  5. Em Banco de dados, selecione o banco de dados do Amazon RDS que o segredo acessará.

  6. Preencha outras configurações referentes ao segredo e escolha Armazenar. Para obter instruções mais abrangentes, consulte Creating an AWS Secrets Manager secret no Guia do usuário do AWS Secrets Manager.

Ao criar um proxy por meio da AWS CLI, especifique os nomes de recurso da Amazon (ARNs) dos segredos correspondentes. Você faz isso para todas as contas de usuário do banco de dados que o proxy pode acessar. No AWS Management Console, escolha os segredos por seus nomes descritivos.

  • Para criar um segredo do Secrets Manager e utilizá-lo com o RDS Proxy, use o comando create-secret:

    aws secretsmanager create-secret \ --name "secret_name" \ --description "secret_description" \ --region region_name \ --secret-string '{"username":"db_user","password":"db_user_password"}'
  • Também é possível criar uma chave personalizada para criptografar o segredo do Secrets Manager. O comando a seguir cria uma chave de exemplo.

    aws kms create-key --description "test-key" --policy '{ "Id":"kms-policy", "Version":"2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam:account_id::role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] }'

Por exemplo, os seguintes comandos criam segredos do Secrets Manager para dois usuários de banco de dados:

aws secretsmanager create-secret \ --name secret_name_1 --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' aws secretsmanager create-secret \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

Para criar esses segredos criptografados com a chave do AWS KMS personalizada, use os seguintes comandos:

aws secretsmanager create-secret \ --name secret_name_1 --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' \ --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id aws secretsmanager create-secret \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}' \ --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id

Para ver os segredos que pertencem à sua conta da AWS, use o comando list-secrets:

aws secretsmanager list-secrets

Ao criar um proxy utilizando a CLI, você transmite os nomes de recursos da Amazon (ARNs) de um ou mais segredos ao parâmetro --auth. O exemplo a seguir mostra como preparar um relatório com apenas o nome e o ARN de cada segredo pertencente à sua conta da AWS. Este exemplo usa o parâmetro --output table que está disponível na AWS CLI versão 2. Se você estiver usando a AWS CLI versão 1, use --output text em vez disso.

aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table

Para confirmar se o segredo contém as credenciais corretas no formato adequado, use o comando get-secret-value. Substitua your_secret_name pelo nome abreviado ou ARN do segredo.

aws secretsmanager get-secret-value --secret-id your_secret_name

A saída contém uma linha com um valor codificado em JSON semelhante ao seguinte:

... "SecretString": "{\"username\":\"your_username\",\"password\":\"your_password\"}", ...