Configuração de credenciais de banco de dados no AWS Secrets Manager - Amazon Relational Database Service

Configuração de credenciais de banco de dados no AWS Secrets Manager

Para cada proxy criado, use primeiro o serviço Secrets Manager para armazenar conjuntos de credenciais de nome de usuário e senha. 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.

No console do Secrets Manager, crie esses segredos com valores para os campos username e password. Isso permite que o proxy se conecte aos usuários de banco de dados correspondentes em uma instância de banco de dados do RDS que você associar ao proxy. Para fazer isso, você pode usar a configuração Credentials for other database (Credenciais para outro banco de dados), Credentials for RDS database (Credenciais para o banco de dados do RDS) ou Other type of secrets (Outros tipos de segredos). Preencha os valores apropriados nos campos Nome do usuário e Senha e valores de espaço reservado de outros campos obrigatórios. O proxy ignorará outros campos, como Host e Porta, se eles estiverem presentes no segredo. Esses detalhes são fornecidos automaticamente pelo proxy.

Também é possível escolher Outro tipo de segredos. Nesse caso, crie o segredo com chaves chamadas username e password.

Para se conectar pelo proxy como um usuário de banco de dados específico, verifique se a senha associada a um segredo corresponde à senha do banco de dados desse usuário. Se houver uma incompatibilidade, você poderá atualizar o segredo associado no Secrets Manager. Nesse caso, você ainda pode se conectar a outras contas nas quais as credenciais do segredo e as senhas do banco de dados coincidem.

nota

Para o RDS para SQL Server, o proxy do RDS precisa de um segredo no Secrets Manager que faça distinção entre letras maiúsculas e minúsculas no código da aplicação, independentemente das configurações de agrupamento da instância de banco de dados. Por exemplo, se a aplicação puder usar os nomes de usuário “Admin” ou “admin”, configure o proxy com segredos para “Admin” e “admin”. O proxy do RDS não diferencia letras maiúsculas de minúsculas do nome de usuário no processo de autenticação entre o cliente e o proxy.

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

Ao criar um proxy por meio da AWS CLI ou da API do RDS, você especifica os nomes dos recursos 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 obter instruções sobre como criar segredos no Secrets Manager, consulte a página Creating a secret (Criar um segredo) na documentação do Secrets Manager. Use uma das seguintes técnicas:

  • Use o Secrets Manager no console.

  • Para usar a CLI para criar um segredo do Secrets Manager para uso com o RDS Proxy, use um comando como o seguinte.

    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.

    PREFIX=my_identifier aws kms create-key --description "$PREFIX-test-key" --policy '{ "Id":"$PREFIX-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 de propriedade da sua conta da AWS, use um comando como a seguir.

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 do Linux a seguir mostra como preparar um relatório com apenas o nome e o ARN de cada segredo de propriedade da 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 verificar se você armazenou as credenciais corretas e no formato correto em um segredo, use um comando como o seguinte. Substitua o nome abreviado ou o ARN do segredo por your_secret_name.

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

A saída deve incluir uma linha exibindo um valor codificado por JSON como o seguinte.

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