Tecnologías de la información
DDBB y Wordpress en AWS
Servicios Cloud
El ejercicio conecta aplicación y base de datos. El grupo de seguridad debe representar ese vínculo concreto; abrir un puerto no significa que deba quedar disponible para cualquier origen.
Para este ejercicio crearemos una una base de datos en AWS, a través de su servicio RDS (relational database service), configuraremos el acceso desde EC2 e instalaremos y configuraremos Wordpress en ella.
Índice
RDS
RDS, o Relational Database Service, es el servicio de AWS para bases de datos relacionales.
Para crear una instancia, vamos a la consola de RDS en AWS y seleccionamos Crear base de datos

Elegimos el modo Creación estándar y seleccionamos el motor de base de datos y su versión. En mi caso lo haré con MySQL en su última versión.

Debemos ahora configurar el nombre de la base de datos, el usuario maestro (no equivale al usuario root del SO ni a todos sus privilegios) y una contraseña:

Ahora, en la sección de configuración de red, seleccionamos la VPC que creamos en este ejercicio y negamos el acceso público.
De aquí pudimos conectarnos directo al EC2, pero lo haremos separado por fines educativos.
Configuramos el grupo de seguridad para que permita el puerto 3306 (o el puerto que utilice el motor de base de datos) desde EC2


Otras configuraciones a notar: Templates podemos rápidamente seleccionar el free tier para pruebas pero si elegimos el de producción podemos cambiar:
- cantidad de instancias para disponibilidad
- credentials management, el secrets manager de AWS mantiene nuestras credenciales pero podemos seleccionar self managed para nosotros preocuparnos de eso.
- el tipo de instancia (procesador, memoria, etc)
- en almacenamiento podemos elegir almacenamiento escalable
- autenticación
- En configuraciones adicionales podemos dar el nombre de la base de datos inicial
EC2 + RDS
Creación EC2 para wordpress
Ahora vamos a configurar una nueva instancia para utilizar wordpress.
Configuramos el nombre de la instancia, el AMI (amazon linux), el tipo de instancia, la asignamos a la VPC con la subred pública, el grupo de seguridad que permita acceso SSH, HTTP y lanzamos la instancia.

Acceder RDS desde EC2
Nos conectamos a la instancia a través de SSH.
Como la base corre en RDS, EC2 necesita un cliente compatible para probar la conexión, no otro servidor MySQL. Amazon Linux 2023 requiere repositorios compatibles con su distribución; no asumir que un RPM para EL9 sea intercambiable. Instalar desde repositorios compatibles con la AMI y comprobar su firma/versiones.

Debemos ahora ligar el RDS a nuestro EC2, revisar conectividad privada, grupos de seguridad y costos entre zonas. Estar en la misma AZ no es requisito de conexión y puede reducir resiliencia; el diseño Multi-AZ responde a otro objetivo.

Probamos la conexión RDS:
mysql -h <endpoint RDS> -u admin(o usuario root configurado) -p
Además nos pedirá la contraseña. La dirección endpoint_rds la encontramos en la consola RDS

Dentro del cliente MySQL crearemos un usuario y una base de datos para WordPress:
CREATE DATABASE nombre_DDBB;
CREATE USER 'admin_wordpress'@'%' IDENTIFIED BY 'REEMPLAZAR_POR_SECRETO_UNICO';
GRANT ALL PRIVILEGES ON nombre_DDBB.* TO 'admin_wordpress'@'%';
Con este comando creamos el usuario y puede acceder desde cualquier ip ('%'), le asignamos la contraseña; le damos todos los privilegios de la base de datos (y sus tablas con el wildcard) al usuario y permitimos cualquier dirección IP; CREATE USER/GRANT aplican sus cambios sin FLUSH PRIVILEGES. % no abre el grupo de seguridad: limitar el origen a la aplicación y usar TLS.
Ojo que este comando sólo es necesario si necesitamos crear un usuario adicional con los permisos. En mi caso lo cree al momento de hacer la RDS.
Wordpress
Ahora, debemos instalar las dependencias de WordPress en la instancia:
sudo yum install -y httpd php php-mysqlnd wgetsudo systemctl start httpdsudo systemctl enable httpd
Con estos comandos instalamos los servicios necesarios para el servidor web y las configuraciones pertinentes para integrar mysql con el mismo.

Ahora debemos descargar y configurar Wordpress:
wget https://wordpress.org/latest.tar.gztar -xvzf latest.tar.gzsudo mv wordpress/* /var/www/html/sudo chown -R apache:apache /var/www/htmlsudo find /var/www/html -type d -exec chmod 755 {} \;sudo find /var/www/html -type f -exec chmod 644 {} \;Con estos comandos:- Descargamos la última instancia de wordpress en formato tar
- lo descomprimimos
- Lo movemos desde
wordpress/*hacia/var/www/html/que es donde se monta para el servidor - Cambiamos el dueño de manera recursiva (
-R), el nuevo dueño y su grupo y el directorio al cual se va a cambiar - Modificamos los permisos (7 5 5 donde 7 es todos, 5 es lectura y ejecución) al mismo directorio.

Lo siguiente es configurar la base de datos en wordpress:
Para ello debemos primero editar el archivo wp-config.php
sudo nano /var/www/html/wp-config.php- Actualizamos las siguientes líneas
define('DB_NAME', 'nombre_DDBB');
define('DB_USER', 'admin_wordpress');
define('DB_PASSWORD', 'contraseña');
define('DB_HOST', '<endpoint_RDS>');
- Finalmente reiniciamos apache con el comando
sudo systemctl restart httpd
Comprobación
Para la comprobación accedemos a la instancia EC2 desde el navegador utilizando su dirección.
Nos encontramos con este error. Investigándolo, nos encontramos con que no tenemos acceso a http, así que nos dirigimos al grupo de seguridad y agregamos una regla para aceptar conexiones HTTP.
Arreglado eso logré conectarme, sin embargo los contenidos de wp-config.php están expuestos lo que es una brecha de seguridad enorme. Esto es debido a un error.
Investigando a profundidad noté que wordpress no estaba correctamente instalado en el servidor, y no estaba parseando correctamente el php debido a que faltaban unos módulos de php, que no se instalaron directamente con la instalación inicial.
Con esto último solucionado, veremos la nueva página de wordpress:

Completamos la configuración inicial de wordpress

Creamos una publicación y revisamos que los datos se almacenan en la base de datos RDS:

Conclusión
Ha sido un desafío largo y complejo. Tuve que aprender varias cosas nuevas (php, wordpress, rds) pero ha sido satisfactorio. La mayor dificultad fue sin duda el poder conectarme a wordpress por la falla en el parseo de php.
Lo que puedo rescatar de esta experiencia:
- Elegir la distro adecuada con antelación:
- En este montaje tuve problemas de instalación y compatibilidad de paquetes; eso no demuestra un defecto general de Amazon Linux 2023.
- Ubuntu habría sido otra opción; no hice una comparación equivalente para afirmar que fuese más sencillo
- El peligro de exponer archivos como wp-config.php a la red, que contiene las credenciales de configuración de la base de datos.
- Explorar el uso de otros servidores como Nginx por sobre Apache2.
- Apache y Nginx son alternativas para WordPress; elegir según integración con PHP, operación y requisitos del sitio.
- La importancia de leer los logs para identificar problemas de configuración.
Contraste: LAMP en AL2023. Crear wp-config.php desde la plantilla si aún no existe; proteger credenciales y no dar escritura del código completo al servidor sin necesidad. Si PHP expone el archivo, cerrar el acceso, corregir el handler y rotar credenciales expuestas antes de reabrir. HTTPS y acceso SSH restringido faltan en el recorrido básico. Las pantallas Free Tier son históricas, no promesa de gratuidad.
+----------------------------------------+
| Floure & |
| Tachibana's guild |
| [Hikari · Nozomi · Rin] |
| SEAL: sha256/12: d629df833b39 |
| STATUS: LITURGY_IN_PROGRESS |
+----------------------------------------+
Conexiones
Desde este apunte · 1
Enlazan aquí · 0
Sin enlaces entrantes.