Introducción al proxy de RDS - Amazon Aurora

Introducción al proxy de RDS

En las siguientes secciones, encontrará cómo configurar y administrar RDS Proxy. También puede encontrar información sobre cómo configurar las opciones de seguridad relacionadas. Estas opciones controlan quién puede acceder a cada proxy y cómo se conecta a instancias de base de datos.

Configuración de requisitos previos de red

El uso de RDS Proxy requiere que tenga una nube privada virtual (VPC) común entre su clúster de base de datos de Aurora y RDS Proxy. Esta VPC debe tener un mínimo de dos subredes que se encuentren en diferentes zonas de disponibilidad. Tu cuenta puede poseer estas subredes o compartirlas con otras cuentas. Para obtener más información acerca del uso compartido de VPC, consulte Trabajar con VPC compartidas.

Los recursos de aplicaciones cliente, como Amazon EC2, Lambda o Amazon ECS, pueden estar en la misma VPC como el proxy. O pueden estar en una VPC independiente del proxy. Si se ha conectado correctamente a clústeres de bases de datos de Aurora, ya dispone de los recursos de red necesarios.

Obtención de información sobre subredes.

Si acaba de empezar a utilizar Aurora, puede obtener información sobre los conceptos básicos de la conexión a una base de datos siguiendo los procedimientos de Configuración del entorno para Amazon Aurora. También puede seguir el tutorial de Introducción a Amazon Aurora.

Para crear un proxy, debe proporcionar las subredes y la VPC en las que opera el proxy. En el siguiente ejemplo de Linux se muestran comandos de la AWS CLI con que se examinan las VPC y las subredes que son propiedad de su Cuenta de AWS. En particular, se pasan los ID de subred como parámetros si crea un proxy utilizando la CLI.

aws ec2 describe-vpcs aws ec2 describe-internet-gateways aws ec2 describe-subnets --query '*[].[VpcId,SubnetId]' --output text | sort

En el siguiente ejemplo de Linux, se muestran comandos de la AWS CLI que sirven para determinar los ID de subred correspondientes a un clúster de base de datos de Aurora.

Para un clúster de Aurora, en primer lugar encuentra el ID de una de las instancias de base de datos asociadas. Puede extraer los ID de subred utilizados por esa instancia de base de datos. Para ello, examine los campos anidados que hay dentro de los atributos DBSubnetGroup y Subnets en la salida la instancia de descripción de la instancia de base de datos. Especifica algunos o todos esos ID de subred cuando establece un proxy para ese servidor de base de datos.

$ # Find the ID of any DB instance in the cluster. $ aws rds describe-db-clusters --db-cluster-identifier my_cluster_id --query '*[].[DBClusterMembers]|[0]|[0][*].DBInstanceIdentifier' --output text
my_instance_id instance_id_2 instance_id_3

Una vez encontrado el identificador de la instancia de base de datos, examine la VPC asociada para encontrar sus subredes. En el siguiente ejemplo de Linux se muestra cómo.

$ #From the DB instance, trace through the DBSubnetGroup and Subnets to find the subnet IDs. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0]|[Subnets]|[0]|[*].SubnetIdentifier' --output text
subnet_id_1 subnet_id_2 subnet_id_3 ...
$ #From the DB instance, find the VPC. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0].VpcId' --output text
my_vpc_id
$ aws ec2 describe-subnets --filters Name=vpc-id,Values=my_vpc_id --query '*[].[SubnetId]' --output text
subnet_id_1 subnet_id_2 subnet_id_3 subnet_id_4 subnet_id_5 subnet_id_6

Planificación de la capacidad de direcciones IP

Un RDS Proxy ajusta automáticamente su capacidad según sea necesario en función del tamaño y la cantidad de instancias de base de datos registradas en él. Algunas operaciones también pueden requerir una capacidad de proxy adicional, como el aumento del tamaño de una base de datos registrada u operaciones de mantenimiento internas de RDS Proxy. Durante estas operaciones, es posible que el proxy necesite más direcciones IP para aprovisionar la capacidad adicional. Estas direcciones adicionales permiten que su proxy escale sin afectar a su carga de trabajo. La falta de direcciones IP gratuitas en las subredes impide que un proxy se amplíe. Esto puede provocar latencias de consulta más altas o errores en la conexión del cliente. RDS le notifica mediante un evento RDS-EVENT-0243 cuando no hay suficientes direcciones IP libres en sus subredes. Para obtener información acerca de este evento, consulte Trabajo con eventos de RDS Proxy.

A continuación se indica el número mínimo recomendado de direcciones IP que se deben dejar libres en las subredes para el proxy en función del tamaño de las clases de las instancias de base de datos.

Clase de instancia de base de datos Direcciones IP gratuitas mínimas

db.*.xlarge o menor

10

db.*.24xlarge

15

db.*.24xlarge

25

db.*.24xlarge

45

db.*.24xlarge

60

db.*.24xlarge

75

db.*.24xlarge

110

Estos números de direcciones IP recomendados son estimaciones para un proxy con solo el punto de conexión predeterminado. Un proxy con puntos de conexión adicionales o réplicas de lectura puede necesitar más direcciones IP gratuitas. Para cada punto de conexión adicional, le recomendamos que reserve tres direcciones IP más. Para cada réplica de lectura, le recomendamos que reserve direcciones IP adicionales tal como se especifica en la tabla en función del tamaño de dicha réplica de lectura.

nota

RDS Proxy no admite más de 215 direcciones IP en una VPC.

Por ejemplo, supongamos que desea estimar las direcciones IP necesarias para un proxy asociado a un clúster de base de datos de Aurora.

En este caso, haga lo siguiente:

  • El clúster de base de datos de Aurora tiene 1 instancia de escritor de tamaño db.r5.8xlarge y 1 instancia de lector de tamaño db.r5.2xlarge.

  • El proxy que está adjunto a este clúster de base de datos tiene el punto final predeterminado y un punto de conexión personalizado con la función de solo lectura.

En este caso, el proxy necesita aproximadamente 63 direcciones IP libres (45 para la instancia de escritor, 15 para la instancia de lector y 3 para el punto de conexión personalizado adicional).

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 el clúster de bases de datos de Aurora.

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 un clúster de base de datos de Aurora 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.

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" --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.

    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 \ --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 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\"}",

Configuración de políticas de AWS Identity and Access Management (IAM)

Después de crear los secretos en Secrets Manager, se crea una política de IAM que puede acceder a esos secretos. Para obtener más información acerca del uso de la IAM, consulte Administración de la identidad y el acceso en Amazon Aurora.

sugerencia

El procedimiento siguiente se aplica si utiliza la consola de IAM. Si utiliza la AWS Management Console para RDS, RDS puede crear automáticamente la política de IAM. En ese caso, puede omitir el siguiente procedimiento.

Para crear una política de IAM que acceda a sus secretos de Secrets Manager para su uso con su proxy
  1. Inicie sesión en la consola de IAM. Siga el proceso de Crear rol, tal como se describe en Creación de roles de IAM, y elija Crear un rol para delegar permisos a un servicio de AWS.

    Elija Servicio de AWS en Tipo de entidad de confianza. En Caso de uso, seleccione RDS en el menú desplegable Casos de uso para otros servicios de AWS. Elija RDS: Añadir rol a la base de datos.

  2. Para el nuevo rol, realice el paso Add inline policy (Añadir política en línea). Utilice los mismos procedimientos generales que en Edición de políticas de IAM. Pegue el siguiente JSON en el cuadro de texto de JSON. Sustituya su propio ID de cuenta. Sustituya su región de AWS por us-east-2. Sustituya los nombres de recurso de Amazon (ARN) por los secretos que ha creado. Consulte Especificación de claves KMS en declaraciones de políticas de IAM. Para la acción kms:Decrypt, sustituya el ARN de la clave de KMS predeterminada AWS KMS key o su propia clave de KMS. El que utilice depende del que haya utilizado para cifrar los secretos de Secrets Manager.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }
  3. Modifique la política de confianza para este rol de IAM. Pegue el siguiente JSON en el cuadro de texto de JSON.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Los comandos siguientes realizan la misma operación a través de la AWS CLI.

PREFIX=my_identifier USER_ARN=$(aws sts get-caller-identity --query "Arn" --output text) aws iam create-role --role-name my_role_name \ --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}' ROLE_ARN=arn:aws:iam::account_id:role/my_role_name aws iam put-role-policy --role-name my_role_name \ --policy-name $PREFIX-secret-reader-policy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }

Creación de un RDS Proxy

Para administrar conexiones para un clúster de base de datos, cree un proxy. Puede asociar un proxy con un clúster de base de datos de Aurora MySQL o Aurora PostgreSQL.

Para crear un proxy
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, seleccione Proxies.

  3. Elija Create proxy (Crear proxy).

  4. Elija todos los ajustes para su proxy.

    Para Configuración del proxy, proporcione información sobre lo siguiente:

    • Engine family (Familia de motores). Este valor determina qué protocolo de red de base de datos reconoce el proxy cuando interpreta el tráfico de red hacia y desde la base de datos. Para Aurora MySQL, elija MariaDB and MySQL (MariaDB y MySQL). Para Aurora PostgreSQL, elija PostgreSQL.

    • Proxy identifier (Identificador de proxy. Especifique un nombre que sea único dentro de su ID de cuenta de AWS y de la región de AWS actual.

    • Idle client connection timeout (Tiempo de espera de inactividad de conexión de cliente. Elija un período de tiempo en el que una conexión de cliente puede estar inactiva antes de que el proxy la cierre. El valor predeterminado es 1800 segundos (30 minutos). Una conexión de cliente se considera inactiva cuando la aplicación no envía una nueva solicitud dentro del plazo especificado después de completar la solicitud anterior. La conexión de base de datos subyacente permanece abierta y se devuelve al grupo de conexiones. Por lo tanto, está disponible para reutilizarla para nuevas conexiones de cliente.

      Para que el proxy elimine de forma proactiva las conexiones obsoletas, reduzca el tiempo de espera de conexión de cliente inactivo. Si la carga de trabajo está aumentando, aumente el tiempo de espera de la conexión del cliente inactivo para ahorrar el costo del establecimiento de conexiones.

    Para Configuración del grupo de destino, proporcione información sobre lo siguiente:

    • Database (Base de datos. Elija un clúster de base de datos de Aurora para acceder a través de este proxy. La lista solo incluye instancias de base de datos y clústeres con motores de base de datos compatibles, versiones de motor y otras configuraciones. Si la lista está vacía, cree una nueva instancia de base de datos o clúster que sea compatible con RDS Proxy. Para ello, siga el procedimiento en Creación de un clúster de base de datos de Amazon Aurora. A continuación, intente volver a crear el proxy.

    • Connection pool maximum connections (Conexiones máximas de grupo de conexión. Especifique un valor comprendido entre 1 y 100. Esta configuración representa el porcentaje del valor max_connections que RDS Proxy se puede utilizar para sus conexiones. Si solo tiene la intención de utilizar un proxy con esta instancia de base de datos o clúster, puede establecer este valor en 100. Para obtener información detallada sobre cómo utiliza RDS Proxy esta configuración, consulte MaxConnectionsPercent.

    • Session pinning filters (Filtros de fijación de sesión. (Opcional) Esta opción le permite forzar RDS Proxy a no fijar determinados tipos de estados de sesión detectados. De este modo se eluden las medidas de seguridad predeterminadas para multiplexar las conexiones de bases de datos en las conexiones del cliente. Actualmente, la configuración no es compatible con PostgreSQL. La única opción es EXCLUDE_VARIABLE_SETS.

      Si se habilita esta configuración, es posible que las variables de sesión de una conexión afecten a otras conexiones. Esto puede provocar errores o problemas de corrección si las consultas dependen de valores de variables de sesión establecidos fuera de la transacción actual. Considere la posibilidad de utilizar esta opción después de comprobar que sea seguro que sus aplicaciones compartan conexiones de bases de datos en las conexiones del cliente.

      Los siguientes patrones pueden considerarse seguros:

      • Instrucciones SET en las que no hay ningún cambio en el valor de la variable de sesión efectiva, es decir, no hay ningún cambio en la variable de sesión.

      • Cambia el valor de la variable de sesión y ejecuta una instrucción en la misma transacción.

      Para obtener más información, consulte Evitar la fijación.

    • Connection borrow timeout (Tiempo de espera de préstamo de conexión. En algunos casos, es posible que espere que el proxy use a veces todas las conexiones de base de datos disponibles. En esos casos, puede especificar cuánto tiempo espera el proxy a que una conexión a la base de datos esté disponible antes de devolver un error de tiempo de espera. Puede especificar un periodo de hasta cinco minutos como máximo. Esta configuración solo se aplica cuando el proxy tiene el número máximo de conexiones abiertas y todas las conexiones ya están en uso.

    • Consutla de inicialización. (Opcional) Puede especificar una o más instrucciones de SQL para que el proxy se ejecute al abrir cada nueva conexión de base de datos. Normalmente, el ajuste se utiliza con instrucciones SET para asegurarse de que cada conexión tiene una configuración idéntica, como zona horaria y conjunto de caracteres. Para varias instrucciones, utilice punto y coma como separador. Puede incluir también varias variables en una sola instrucción SET, como SET x=1, y=2.

    Para Authentication (Autenticación), proporcione información sobre lo siguiente:

    • IAM role (Rol de IAM. Elija un rol de IAM que tenga permiso para acceder a los secretos de Secrets Manager que eligió anteriormente. También puede crear un rol de IAM desde la AWS Management Console.

    • Secretos de Secrets Manager. Elija al menos un secreto de Secrets Manager que contenga credenciales de usuario de base de datos que permita al proxy acceder al clúster de bases de datos de Aurora.

    • Client authentication type (Tipo de autenticación de cliente). Elija el tipo de autenticación que utiliza el proxy para las conexiones desde los clientes. Su elección se aplica a todos los secretos de Secrets Manager que asocie a este proxy. Si tiene que especificar un tipo de autenticación de cliente diferente para cada secreto, cree su proxy mediante la AWS CLI o la API.

    • IAM Authentication (Autenticación de IAM). Elija si desea requerir, o no permitir la autenticación de IAM para las conexiones a su proxy. Su elección se aplica a todos los secretos de Secrets Manager que asocie a este proxy. Si tiene que especificar un tipo de autenticación de IAM diferente para cada secreto, cree su proxy mediante la AWS CLI o la API.

    Para Conectivity (Conectividad), proporcione información sobre lo siguiente:

    • Require Transport Layer Security (Requerir seguridad de capa de transporte. Elija esta configuración si desea que el proxy aplique TLS/SSL para todas las conexiones de cliente. Para una conexión cifrada o no cifrada con un proxy, el proxy utiliza la misma configuración de cifrado cuando realiza una conexión con la base de datos subyacente.

    • Subnets (Subredes. Este campo se rellena previamente con todas las subredes asociadas a la VPC. Puede eliminar las subredes que no necesite para este proxy. Debe dejar al menos dos subredes.

    Proporcionar configuración de conectividad adicional:

    • VPC security group (Grupo de seguridad de VPC. Elija un grupo de seguridad de VPC existente. También puede crear un nuevo grupo de seguridad desde la AWS Management Console. Debe configurar Reglas de entrada para permitir que las aplicaciones accedan al proxy. También debe configurar Reglas de salida para permitir el tráfico desde sus destinos de base de datos.

      nota

      Este grupo de seguridad debe permitir conexiones desde el proxy a la base de datos. El mismo grupo de seguridad se utiliza para la entrada de las aplicaciones al proxy y para la salida del proxy a la base de datos. Por ejemplo, supongamos que utiliza el mismo grupo de seguridad para la base de datos y el proxy. En este caso, asegúrese de especificar que los recursos de ese grupo de seguridad pueden comunicarse con otros recursos del mismo grupo de seguridad.

      Cuando se utiliza una VPC compartida, no se puede utilizar el grupo de seguridad predeterminado para la VPC o uno que pertenezca a otra cuenta. Elija un grupo de seguridad que pertenezca a su cuenta. Si no existe uno, créelo. Para obtener más información acerca de esta limitación, consulte Trabajar con VPC compartidas.

      RDS despliega un proxy en varias zonas de disponibilidad para garantizar una alta disponibilidad. Para habilitar la comunicación entre zonas de disponibilidad para un proxy de este tipo, la lista de control de acceso (ACL) a la red de su subred proxy debe permitir la salida específica del puerto del motor y la entrada de todos los puertos. Para obtener más información acerca de las ACL de red de, consulte Controlar el tráfico hacia las subredes utilizando las ACL de red. Si la ACL de red del proxy y la de destino son idénticas, debe añadir una regla de entrada del protocolo TCP en la que el Origen esté configurado en el CIDR de la VPC. También debe añadir una regla de salida del protocolo TCP específica del puerto del motor en la que el Destino esté configurado en el CIDR de la VPC.

    (Opcional) Proporcionar configuración avanzada:

    • Enable enhanced logging (Habilitación de registro optimizado. Puede habilitar esta configuración para solucionar problemas de compatibilidad de proxy o rendimiento.

      Cuando esta configuración está habilitada, RDS Proxy incluye información detallada sobre rendimiento del proxy en sus registros. Esta información le ayuda a depurar problemas relacionados con el comportamiento SQL o el rendimiento y la escalabilidad de las conexiones proxy. Por lo tanto, solo habilite esta configuración para la depuración y solo cuando disponga de medidas de seguridad para proteger cualquier información confidencial que aparezca en los registros.

      Para minimizar la sobrecarga asociada con el proxy, RDS Proxy desactiva automáticamente esta opción 24 horas después de habilitarla. Habilítela temporalmente para solucionar un problema específico.

  5. Elija Create Proxy (Crear proxy).

Para crear un proxy utilizando el comando AWS CLI, llame al comando create-db-proxy con los siguientes parámetros requeridos:

  • --db-proxy-name

  • --engine-family

  • --role-arn

  • --auth

  • --vpc-subnet-ids

El valor --engine-family distingue entre mayúsculas y minúsculas.

ejemplo

Para Linux, macOS o Unix:

aws rds create-db-proxy \ --db-proxy-name proxy_name \ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \ --auth ProxyAuthenticationConfig_JSON_string \ --role-arn iam_role \ --vpc-subnet-ids space_separated_list \ [--vpc-security-group-ids space_separated_list] \ [--require-tls | --no-require-tls] \ [--idle-client-timeout value] \ [--debug-logging | --no-debug-logging] \ [--tags comma_separated_list]

En Windows:

aws rds create-db-proxy ^ --db-proxy-name proxy_name ^ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } ^ --auth ProxyAuthenticationConfig_JSON_string ^ --role-arn iam_role ^ --vpc-subnet-ids space_separated_list ^ [--vpc-security-group-ids space_separated_list] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeout value] ^ [--debug-logging | --no-debug-logging] ^ [--tags comma_separated_list]

A continuación se muestra un ejemplo del valor JSON para la opción --auth. Este ejemplo aplica un tipo de autenticación de cliente diferente a cada secreto.

[ { "Description": "proxy description 1", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789123:secret/1234abcd-12ab-34cd-56ef-1234567890ab", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_SCRAM_SHA_256" }, { "Description": "proxy description 2", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122223333:seret/1234abcd-12ab-34cd-56ef-1234567890cd", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_MD5" }, { "Description": "proxy description 3", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122221111:secret/1234abcd-12ab-34cd-56ef-1234567890ef", "IAMAuth": "REQUIRED" } ]
sugerencia

Si aún no conoce los ID de subred que utilizar para el parámetro --vpc-subnet-ids, consulte Configuración de requisitos previos de red para ver ejemplos de cómo encontrarlos.

nota

Este grupo de seguridad debe permitir el acceso a la base de datos a la que se conecta el proxy. El mismo grupo de seguridad se utiliza para la entrada de las aplicaciones al proxy y para la salida del proxy a la base de datos. Por ejemplo, supongamos que utiliza el mismo grupo de seguridad para la base de datos y el proxy. En este caso, asegúrese de especificar que los recursos de ese grupo de seguridad pueden comunicarse con otros recursos del mismo grupo de seguridad.

Cuando se utiliza una VPC compartida, no se puede utilizar el grupo de seguridad predeterminado para la VPC o uno que pertenezca a otra cuenta. Elija un grupo de seguridad que pertenezca a su cuenta. Si no existe uno, créelo. Para obtener más información acerca de esta limitación, consulte Trabajar con VPC compartidas.

Para crear las asociaciones adecuadas para el proxy, utilice también el comando register-db-proxy-targets. Especifique el nombre de grupo de destino de default. El proxy de RDS crea automáticamente un grupo de destino con este nombre cuando crea cada proxy.

aws rds register-db-proxy-targets --db-proxy-name value [--target-group-name target_group_name] [--db-instance-identifiers space_separated_list] # rds db instances, or [--db-cluster-identifiers cluster_id] # rds db cluster (all instances)

Para crear un proxy de RDS, llame a la operación de la API de Amazon RDS CreateDBProxy. Transfiera un parámetro con la estructura de datos AuthConfig .

El proxy de RDS crea automáticamente un grupo de destino denominado default cuando crea cada proxy. Se asocia un clúster de bases de datos de Aurora con el grupo de destino llamando a la función RegisterDBProxyTargets.

Ver un RDS Proxy

Después de crear uno o varios proxies de RDS, puede verlos todos. De esta forma, es posible examinar sus detalles de configuración y elegir cuáles modificar, eliminar, etc.

Para que las aplicaciones de base de datos usen un proxy, debe proporcionar el punto de conexión del proxy en la cadena de conexión.

Para consultar su proxy
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En la esquina superior derecha de la AWS Management Console, elija la región de AWS en la que creó los clústeres de base de datos del proxy de RDS.

  3. En el panel de navegación, seleccione Proxies.

  4. Elija el nombre de un proxy de RDS para mostrar sus detalles.

  5. En la página de detalles, la sección Grupos de destino muestra cómo se asocia el proxy a un clúster de bases de datos de Aurora específico. Puede seguir el enlace a la página de grupo de destino default (predeterminada) para ver más detalles sobre la asociación entre el proxy y la base de datos. Esta página es donde puede ver la configuración que especificó al crear el proxy. Estos incluyen el porcentaje máximo de conexión, el tiempo de espera de conexión, la familia de motores y los filtros de fijación de sesión.

Para consultar el proxy mediante la CLI, utilice el comando describe-db-proxies. De forma predeterminada, muestra todos los proxies propiedad de su cuenta de AWS. Para ver los detalles de un solo proxy, especifique su nombre con el parámetro --db-proxy-name.

aws rds describe-db-proxies [--db-proxy-name proxy_name]

Para consultar la otra información asociada con el proxy, utilice los comandos que se muestran a continuación.

aws rds describe-db-proxy-target-groups --db-proxy-name proxy_name aws rds describe-db-proxy-targets --db-proxy-name proxy_name

Utilice la siguiente secuencia de comandos para ver más detalles acerca de las cosas que están asociadas con el proxy:

  1. Para obtener una lista de proxies, ejecute describe-db-proxies.

  2. Para mostrar parámetros de conexión como el porcentaje máximo de conexiones que puede utilizar el proxy, ejecute describe-db-proxy-target-groups --db-proxy-name. Utilice el nombre del proxy como el valor del parámetro.

  3. Para consultar los detalles del clúster de bases de datos de Aurora con asociación con el grupo de destino devuelto, ejecute describe-db-proxy-targets.

Para ver los proxies mediante la API de RDS, utilice la operación DescribeDBProxies . Devuelve valores del tipo de datos DBProxy.

Para consultar los detalles de la configuración de conexión del proxy, utilice los identificadores de proxy de este valor devuelto con la operación DescribeDBProxyTargetGroups. Devuelve valores del tipo de datos DBProxyTargetGroup.

Para consultar la instancia de RDS o el clúster de bases de datos de Aurora asociado con el proxy, utilice la operación DescribeDBProxyTargets. Devuelve valores del tipo de datos DBProxyTarget.

Conexión a una base de datos mediante RDS Proxy

Se conecta a un clúster de base de datos de Aurora o a un clúster que usa Aurora Serverless v2 a través de un proxy, generalmente de la misma manera que se conecta directamente a la base de datos. La principal diferencia es que se especifica el punto de conexión del proxy en lugar del punto de conexión del clúster. De forma predeterminada, todas las conexiones del proxy tienen capacidad de lectura o escritura y utilizan la instancia de escritor. Si normalmente utiliza el punto de conexión del lector para conexiones de solo lectura, puede crear un punto de conexión de solo lectura adicional para el proxy. Puede usar ese punto de conexión de la misma manera. Para obtener más información, consulte Información general de los puntos de enlace de proxy.

Conexión a un proxy mediante autenticación nativa

Utilice los siguientes pasos para conectarse a un proxy mediante autenticación nativa:

  1. Buscar el punto de enlace del proxy. En la AWS Management Console, puede encontrar el punto de enlace en la página de detalles del proxy correspondiente. Con la AWS CLI, puede usar el comando describe-db-proxies. El siguiente ejemplo muestra cómo.

    # Add --output text to get output as a simple tab-separated list. $ aws rds describe-db-proxies --query '*[*].{DBProxyName:DBProxyName,Endpoint:Endpoint}' [ [ { "Endpoint": "the-proxy.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy" }, { "Endpoint": "the-proxy-other-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-other-secret" }, { "Endpoint": "the-proxy-rds-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-rds-secret" }, { "Endpoint": "the-proxy-t3.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-t3" } ] ]
  2. Especifique el punto de conexión como parámetro del host en la cadena de conexión de la aplicación cliente. Por ejemplo, especifique el punto de enlace del proxy como el valor para la opción mysql -h o la opción psql -h.

  3. Proporcione el mismo nombre de usuario y contraseña de la base de datos como suele hacer.

Conexión a un proxy mediante autenticación de IAM

Cuando utilice la autenticación de IAM con RDS Proxy, configure los usuarios de base de datos para que se autentiquen con nombres de usuario y contraseñas normales. La autenticación de IAM se aplica a RDS Proxy mediante la recuperación del nombre de usuario y las credenciales de contraseña de Secrets Manager. La conexión desde RDS Proxy a la base de datos subyacente no pasa a través de IAM.

Para conectarse a RDS Proxy utilizando la autenticación de IAM, utilice el mismo procedimiento general de conexión que para la autenticación de IAM con un clúster de bases de datos de Aurora. Para obtener más información acerca del uso de la IAM, consulte Seguridad en Amazon Aurora.

Las principales diferencias en el uso de IAM para RDS Proxy incluyen las siguientes:

  • No se configura cada usuario de base de datos individual con un complemento de autorización. Los usuarios de la base de datos todavía tienen nombres de usuario y contraseñas regulares dentro de la base de datos. Se configuran los secretos de Secrets Manager que contienen estos nombres de usuario y contraseñas y se autoriza al RDS Proxy para recuperar las credenciales de Secrets Manager.

    La autenticación IAM se aplica a la conexión entre el programa cliente y el proxy. A continuación, el proxy se autentica en la base de datos utilizando las credenciales de nombre de usuario y contraseña recuperadas de Secrets Manager.

  • En lugar del punto de enlace de instancia, clúster o lector, se especifica el punto de enlace del proxy. Para obtener detalles sobre el punto de enlace del proxy, consulte Conexión a al clúster de bases de datos con la autenticación de IAM.

  • En el caso de autenticación de IAM de la base de datos directa, se eligen de forma selectiva los usuarios de la base de datos y se configuran para que se identifiquen con un complemento de autenticación especial. Puede conectarse a esos usuarios mediante la autenticación de IAM.

    En el caso de uso del proxy, proporciona al proxy secretos que contengan el nombre de usuario y la contraseña de algún usuario (autenticación nativa). A continuación, se conecta al proxy mediante la autenticación de IAM. Aquí, puede hacerlo al generar un token de autenticación con el punto de conexión del proxy, no el punto de conexión de la base de datos. También utiliza un nombre de usuario que coincida con uno de los nombres de usuario de los secretos que proporcionó.

  • Asegúrese de que usa Transport Layer Security (TLS)/Capa de sockets seguros (SSL) cuando se conecte a un proxy mediante la autenticación de IAM.

Puede conceder acceso al proxy a un usuario específico modificando la política de IAM. Ejemplo:

"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"

Consideraciones para conectarse a un proxy con PostgreSQL

Para PostgreSQL, cuando un cliente comienza una conexión a una base de datos de PostgreSQL, envía un mensaje de inicio. Este mensaje incluye pares de cadenas de nombres y valores de parámetros. Para obtener detalles, consulte StartupMessage en Formatos de mensaje de PostgreSQL en la documentación de PostgreSQL.

Al conectarse a través de un proxy de RDS, el mensaje de inicio puede incluir los siguientes parámetros reconocidos actualmente:

  • user

  • database

El mensaje de inicio también puede incluir los siguientes parámetros de tiempo de ejecución adicionales:

Para obtener más información acerca de la mensajería de PostgreSQL, consulte el Protocolo Frontend/Backend en la documentación de PostgreSQL.

Para PostgreSQL, si usa JDBC, recomendamos lo siguiente para evitar la fijación:

  • Establezca el parámetro de conexión JDBC assumeMinServerVersion en al menos 9.0 para evitar la fijación. Esto evita que el controlador JDBC realice un viaje de ida y vuelta adicional durante el inicio de la conexión cuando se ejecuta SET extra_float_digits = 3.

  • Establezca el parámetro de conexión JDBC ApplicationName en any/your-application-name para evitar la fijación. Al hacerlo, se evita que el JDBC driver realice un viaje de ida y vuelta adicional durante el inicio de la conexión cuando se ejecuta SET application_name = "PostgreSQL JDBC Driver". Tenga en cuenta que el parámetro JDBC es ApplicationName pero el parámetro StartupMessage de PostgreSQL es application_name.

Para obtener más información, consulte Evitar la fijación. Para obtener más información acerca de la conexión mediante JDBC, consulte Conexión a la base de datos en la documentación de PostgreSQL.