Una gran característica de RDS proxy es que está completamente administrada. A diferencia de los servidores proxy tradicionales, no necesita mantener el dolor de cabeza de implementación, administrarlos y parchearlos con las nuevas actualizaciones. Es una aplicación sin servidor y escala automáticamente ajustarse a sus necesidades.
El proxy de Amazon RDS se puede utilizar para aplicaciones basadas en la arquitectura sin servidor y aquellos que se ejecutan en contenedores en ECS o EC2.
¿Cómo funciona RDS Proxy??
Con esta función, las aplicaciones pueden agrupar y compartir sus conexiones de base de datos. En lugar de conectar su aplicación directamente a la base de datos RDS, la conectamos al proxy RDS. Amazon RDS Proxy actúa como un mediador de conexión entre su código de aplicación y la instancia de RDS DB. Se reserva un grupo de conexiones establecidas a la base de datos, que se puede reutilizar y compartir con otros clientes. De esta manera, solo se establecen unas pocas conexiones a la base de datos, reduciendo así la nueva carga de conexión en la base de datos.
En el caso de una conmutación por conmutación por base de datos, el proxy RDS vuelve a enrutar las solicitudes directamente a la nueva instancia de DB. Otro beneficio importante es que podemos configurar la autenticación IAM para la seguridad de la base de datos sin la necesidad de colocar las credenciales de la base de datos directamente en el código de aplicación. También tiene la disposición de utilizar AWS Secrets Manager para administrar centralmente las credenciales de la base de datos.
Configuración experimental
Para demostrar cómo funciona AWS RDS Proxy, estableceremos un entorno de trabajo con los siguientes recursos de redes:
Para hacer que esta guía sea compacta, no describiremos cómo configurar una instancia EC2 y RDS, ya que son relativamente simples. También hemos configurado un usuario de IAM en la política de AdministratorCcess. Los pasos significativos de esta guía se describen aquí:
Comenzando con RDS Proxy
Creo que el escenario general ahora debería ser autorizado para el lector. La imagen de abajo muestra la descripción general de esta guía:
Crear grupos de seguridad y verificar la conectividad de la base de datos.
Paso 1. Navegue a la sección AWS VPC, y debajo de la columna 'Seguridad', seleccione Grupos de seguridad del panel de navegación en el lado izquierdo:
Paso 2. Ahora haga clic en el botón 'Crear grupo de seguridad' y agregue un grupo de seguridad (aquí 'EC2_SECGRP') para la instancia de EC2. Ingrese los detalles básicos según su elección:
Agregue una regla entrante para permitir una conexión SSH entrante (entrante) a EC2. Agregue una regla de salida para permitir cualquier tráfico saliente (saliente) desde la instancia de EC2.
Agregue otro grupo de seguridad (aquí 'RDS_SECGRP') para la instancia RDS e ingrese los detalles básicos:
Agregue una regla de entrada para permitir solo una conexión TCP en la instancia RDS DB (en el puerto 3306) de la instancia EC2 (especifique EC2_SECGRP en la fuente). Agregue otra regla de entrada para permitir solo una conexión TCP en la instancia de RDS DB (en el puerto 3306) desde el proxy (especifique proxy_secgrp en la fuente). Agregue la regla de salida para permitir cualquier tráfico saliente (saliente) desde la instancia de RDS.
Del mismo modo, agregue un grupo de seguridad más para proxy (proxy_secgrp) e ingrese los detalles básicos:
Los tres grupos de seguridad que creamos ahora están disponibles:
Al seleccionar cualquier grupo de seguridad, puede ver sus detalles:
1) EC2_SECGRP: adjunto con la instancia de EC2.
2) RDS_SECGRP: adjunto con la instancia RDS.
3) proxy_secgrp: adjunto con el proxy.
Paso 3. Ahora diríjase al tablero RDS y seleccione su instancia de DB DB de Target (aquí 'DB-Linuxhint'). En la pestaña 'Connectividad y seguridad', busque el punto final para la instancia de DB y copie en algún lugar, ya que lo usaremos conectando desde la instancia de EC2 en los próximos pasos.
Etapa 4. Vaya al tablero de EC2 y seleccione la instancia de EC2 desde la que desea conectarse a la instancia de RDS DB. Seleccione la opción 'Conectar':
Paso 5. En el asistente 'Conectar a la instancia', elija la opción 'EC2 Instance Connect', que es una conexión SSH basada en el navegador:
Se abrirá una nueva ventana del navegador cuando seleccione el botón 'Conectar', como se muestra aquí:
Paso 6. Desde esta ventana CLI, use el formato de comando a continuación para probar la conectividad EC2 con la instancia RDS DB:
$ mysql -h-P 3306 -U -pag
Use el punto final de instancia de DB RDS en lugar del punto final 'RDS DB' y el nombre del usuario de DB en lugar de 'Nombre de usuario' ('Admin' en nuestro caso). Ingrese la contraseña de DB cuando se le solicite. Cuando la autenticación sea exitosa, verá el mensaje MySQL en la CLI:
Uso de AWS Secret Manager para manejar las credenciales de la base de datos.
Para que el proxy RDS pueda conectarse al usuario de DB, el usuario de DB necesita un secreto en AWS Secrets Manager. El proxy RDS utiliza estos secretos para manejar un grupo de conexión de base de datos.
Paso 1. Dirígete a la sección 'Secrets Manager' desde la consola AWS y seleccione 'Almacene un nuevo secreto':
Paso 2. De la ventana 'Elija Secret Type', seleccione la opción 'Credenciales para la base de datos RDS.'En la subsección a continuación, ingrese el nombre de usuario y la contraseña para el usuario de su base de datos:
Paso 3. A continuación, en el menú desplegable 'Seleccione la tecla de cifrado', elija 'DefaultRryptionKey' y luego seleccione el DB DB DB de destino para el que está configurando el secreto para acceder. Haga clic en Siguiente.
Etapa 4. Ahora da un nombre adecuado a tu secreto y una breve descripción (opcional).
Paso 5. Estamos omitiendo las etiquetas y las opciones de rotación secreta automática; Por ahora, haga clic en Siguiente:
Paso 6. Puede ver algunas configuraciones de configuración relacionadas con el secreto y algunos código de muestra. Simplemente omita y continúe guardando su secreto presionando el botón 'Almacén':
Cuando se realizan los pasos anteriores, su nombre secreto aparecerá en la página de Secrets Manager. De los detalles secretos, copie el ARN de su secreto, que necesitaremos más tarde.
Crear un rol de IAM y definir una política para permitir que el proxy de RDS acceda a secretos creados con AWS Secret Manager.
Paso 1. Dirígete al tablero IAM, y en el panel izquierdo, elige 'roles' y luego seleccione 'Crear rol':
Paso 3. De las múltiples opciones bajo el 'RDS' encabezado, seleccione 'RDS - Agregar rol a la base de datos':
Etapa 4. Ahora elija 'Siguiente' e ingrese el botón 'Crear política'. Un nuevo navegador abrirá aquí; Seleccione la pestaña JSON y reemplace las declaraciones de políticas ya con la siguiente:
"Versión": "2012-10-17",
"Declaración": [
"Sid": "VisualEditor0",
"Efecto": "Permitir",
"Acción": [
"SecretsManager: GetRandompassword",
"SecretsManager: CreateSecret",
"SecretsManager: Listsecrets"
],
"Recurso": "*"
,
"Sid": "VisualEditor1",
"Efecto": "Permitir",
"Acción": "SecretsManager:*",
"Recurso": [
"Put_your_secret_arn_here"
]
]
Simplemente reemplace la etiqueta 'put_your_secret_arn_here' con el valor Secret ARN en su caso. Agregue las etiquetas (opcionales) y continúe seleccionando 'Política de revisión' y le dé un nombre ('RDS-Proxy-Policy' en nuestro caso) a su política y presione el botón 'Crear política'.
Paso 5. Después de configurar su política, vuelva a la ventana 'Roles' en el navegador y elija el botón 'Actualizar' y busque y seleccione la política que acaba de crear:
Paso 6. Ahora da un nombre a tu rol y una breve descripción, y opcionalmente puede agregar las etiquetas aquí. Continúe seleccionando 'Siguiente: Revisión' y finalmente seleccione 'Crear rol.'Ahora se crea su papel:
Creación y configuración de RDS proxy.
Ahora es el momento de crear y configurar el proxy RDS, que finalmente utilizará nuestro grupo de seguridad RDS_SECGRP, el secreto y el papel que creamos anteriormente.
Paso 1. Vaya al tablero RDS y seleccione 'proxies' y luego seleccione 'Crear proxy':
Paso 2. Dentro del asistente 'Crear proxy', primero debemos dar un nombre o identificador al proxy, que es 'proxy-lh' en nuestro caso.
Paso 3. Desmarque la caja correspondiente a 'requiere seguridad de la capa de transporte.'
Etapa 4. Mantenga el valor de 'Tiempo de tiempo de conexión del cliente inactivo' en el valor predeterminado de 30 minutos.
Paso 5. En 'Configuración del grupo de destino', seleccione su instancia de destino DB DB en el menú desplegable de la base de datos.
Paso 6. Mantenga el valor de 'Conexiones máximas del grupo de conexión' al valor predeterminado de '100':
Paso 7. En la sección de conectividad, hay varios campos:
Paso 8. En 'Configuración avanzada', verifique el 'Habilitar el registro mejorado' y finalmente seleccione 'Crear proxy.'
Ahora, espere a que el proxy esté disponible, y cuando esté listo, copie el punto final del proxy para probar la conectividad de EC2.
Conectarse a la instancia de RDS DB a través de RDS proxy.
Ahora verificaremos la conectividad de nuestra instancia de RDS DB desde el EC2.
Paso 1. Vaya al tablero de administración de EC2, seleccione instancias y seleccione su instancia de EC2 de destino desde donde nos conectaremos a la instancia de RDS DB. Elija 'Connect.'
Paso 2. En el asistente 'Conectar a la instancia', elija la opción 'EC2 Instance Connect', que es una conexión SSH basada en el navegador:
Se abrirá una nueva ventana del navegador cuando seleccione el botón 'Conectar' como anteriormente en este tutorial.
Paso 3. Desde esta ventana CLI, use el formato de comando a continuación para probar la conectividad EC2 con la instancia RDS DB a través del punto final del proxy RDS:
$ mysql -h-P 3306 -U -pag
Use su punto final de proxy RDS en lugar de 'punto final proxy' y el nombre del usuario de DB en lugar de 'nombre de usuario.'Ingrese la contraseña de DB cuando se le solicite. Cuando la autenticación sea exitosa, verá el mensaje MySQL en la CLI:
Conclusión
En esta guía, hemos aprendido sobre la configuración de un proxy RDS en AWS. Es muy beneficioso para aplicaciones grandes, incluidas las sin servidor, que tienen muchas conexiones abiertas. Reduce significativamente el tiempo de conmutación por error para las bases de datos Aurora y RDS. Se puede usar fácilmente para muchas aplicaciones sin la necesidad de cambiar el código.