Configuración de credenciales de base de datos en AWS Secrets Manager
Para cada proxy que cree, primero utilice el servicio de Secrets Manager para almacenar conjuntos de credenciales de nombre de usuario y contraseña. Cree un secreto independiente de Secrets Manager para cada cuenta de usuario de base de datos a la que se conecta el proxy en la instancia de base de datos de RDS.
En la consola de Secrets Manager, cree estos secretos con valores para los campos username
y password
. Esto permite que el proxy se conecte a los usuarios de la base de datos correspondientes en una instancia de base de datos de RDS que asocie con el proxy. Para ello, puede utilizar la configuración Credentials for other database (Credenciales para otra base de datos), Credentials for RDS database (Credenciales para base de datos RDS) u Other type of secrets (Otro tipo de secretos). Rellene los valores adecuados para los campos Nombre de usuario y Contraseña y los valores para cualquier otro campo requerido. El proxy omite otros campos como Host y Puerto si están presentes en el secreto. Estos detalles son proporcionados automáticamente por el proxy.
También puede elegir Otro tipo de secretos. En este caso, crea el secreto con claves denominadas username
y password
.
Para conectarse a través del proxy como un usuario de base de datos específico, asegúrese de que la contraseña asociada con un secreto coincide con la contraseña de la base de datos de ese usuario. Si no hay coincidencia, puede actualizar el secreto asociado en Secrets Manager. En este caso, aún puede conectarse a otras cuentas en las que coincidan las credenciales secretas y las contraseñas de la base de datos.
nota
En el caso de RDS para SQL Server, RDS Proxy necesita un secreto en Secrets Manager que distinga entre mayúsculas y minúsculas en el código de la aplicación, independientemente de la configuración de intercalación de instancia de base de datos. Por ejemplo, si su aplicación puede usar los dos nombres de usuario “Admin” o “admin”, configure el proxy con los secretos tanto para “Admin” como para “admin”. RDS Proxy no permite la indistinción entre mayúsculas y minúsculas en el nombre de usuario al autenticar entre el cliente y el proxy.
Para obtener más información sobre colación en SQL Server, consulte la documentación de Microsoft SQL Server
Cuando crea un proxy a través de la AWS CLI o API de RDS, especifique los nombres de recursos de Amazon (ARN) de los secretos correspondientes. Lo hace para todas las cuentas de usuario de base de datos a las que puede acceder el proxy. En la AWS Management Console, elija los secretos por sus nombres descriptivos.
Para obtener instrucciones sobre cómo crear secretos en Secrets Manager, consulte la página Creación de un secreto en la documentación de Secrets Manager. Utilice una de las siguientes técnicas:
-
Use Secrets Manager
en la consola. -
Para utilizar la CLI con el fin de crear un secreto de Secrets Manager para utilizarlo con RDS Proxy, utilice un comando como el siguiente.
aws secretsmanager create-secret --name "
secret_name
" --description "secret_description
" --regionregion_name
--secret-string '{"username":"db_user","password":"db_user_password"}' -
También puede crear una clave personalizada para cifrar su secreto de Secrets Manager. El siguiente comando crea una clave de ejemplo.
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 ejemplo, los siguientes comandos crean secretos de Secrets Manager para dos usuarios de bases de datos:
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 \ --namesecret_name_2
--description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password
"}'
Para crear estos secretos cifrados con su clave de AWS KMS personalizada, use los siguientes 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 \ --namesecret_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 los secretos que son propiedad de su cuenta de AWS, utilice un comando como el siguiente.
aws secretsmanager list-secrets
Si crea un proxy mediante la CLI, se pasan los nombres de recursos de Amazon (ARN) de uno o más secretos al parámetro --auth
. En el siguiente ejemplo de Linux se muestra cómo preparar un informe si solo se tiene el nombre y el ARN de cada secreto que es propiedad de su cuenta de AWS. En este ejemplo se utiliza el parámetro --output table
, disponible en la versión 2 de la AWS CLI. Si está utilizando la versión 1 de la AWS CLI, use --output text
.
aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table
Para comprobar que ha almacenado las credenciales correctas y en el formato correcto en un secreto, utilice un comando como el siguiente. Sustituya el nombre corto o el ARN del secreto de
. your_secret_name
aws secretsmanager get-secret-value --secret-id
your_secret_name
En la salida se debe incluir una línea en que se muestre un valor codificado en JSON como el siguiente.
"SecretString": "{\"username\":\"
your_username
\",\"password\":\"your_password
\"}",