Configuración de credenciales de base de datos en AWS Secrets Manager para RDS Proxy - Amazon Aurora

Configuración de credenciales de base de datos en AWS Secrets Manager para RDS Proxy

Proxy de RDS en Amazon RDS utiliza AWS Secrets Manager para almacenar y administrar las credenciales de la base de datos de forma segura. En lugar de incrustar credenciales en la aplicación, se asocia un proxy con un secreto de Secrets Manager que contiene los detalles de autenticación necesarios. Cree un secreto independiente de Secrets Manager para cada cuenta de usuario de base de datos a la que se conecta el proxy en el clúster de bases de datos de Aurora.

Creación de secretos para utilizar con Proxy de RDS

Antes de crear un proxy, debe crear al menos un secreto que almacene las credenciales de la base de datos.

Creación de un secreto
  1. Abra la consola de Secrets Manager enhttps://console.aws.amazon.com/secretsmanager/.

  2. Elija Almacenar un secreto nuevo.

  3. Elija Credenciales para base de datos de Amazon RDS.

  4. Introduzca un nombre de usuario y una contraseña. Las credenciales que introduzca deben coincidir con las credenciales de un usuario de base de datos que exista en la base de datos de RDS asociada. Proxy de RDS utiliza estas credenciales para autenticar y establecer conexiones con la base de datos en nombre de las aplicaciones.

    Si no hay coincidencia, puede actualizar el secreto para que coincida con la contraseña de la base de datos. Hasta que no actualice el secreto, los intentos de conexión a través del proxy mediante ese secreto no se realizarán correctamente, pero las conexiones que utilicen otros secretos válidos seguirán funcionando.

    nota

    En el caso de RDS para SQL Server, Proxy de RDS requiere un secreto que distinga entre mayúsculas y minúsculas en Secrets Manager, independientemente de la configuración de intercalación de la instancia de base de datos. Si la aplicación permite nombres de usuario con distintas mayúsculas, como “Admin” y “admin”, deberá crear secretos distintos para cada uno. Proxy de RDS no admite la autenticación de nombre de usuario sin distinción entre mayúsculas y minúsculas 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.

  5. En Base de datos, seleccione la base de datos de Amazon RDS a la que accederá el secreto.

  6. Rellene otras configuraciones para el secreto y elija Guardar. Para obtener instrucciones completas, consulte Creación de un secreto de AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.

Cuando cree un proxy a través de la AWS CLI, 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 crear un secreto de Secrets Manager para utilizarlo con Proxy de RDS, utilice el 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"}'
  • También puede crear una clave personalizada para cifrar su secreto de Secrets Manager. El siguiente comando crea una clave de ejemplo.

    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 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 \ --name secret_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 \ --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 los secretos que posee la cuenta de AWS, utilice el comando list-secrets:

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 se muestra cómo preparar un informe si solo se tiene el nombre y el ARN de cada secreto que es propiedad de la 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 confirmar que el secreto contiene las credenciales correctas en el formato adecuado, utilice el comando get-secret-value. Reemplace your_secret_name por el nombre corto o ARN del secreto.

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

La salida contiene una línea con un valor codificado en JSON similar al siguiente:

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