~/nube/aws-s3 $ cat 08-practica-integradora.md
- Introducción a la nube pública
- AWS-S3
Práctica integradora: web pública y archivo privado
Resuelve un encargo con dos buckets, CLI, sincronización, versionado y acceso temporal.
El encargo de Aula Abierta Aules
Section titled “El encargo de Aula Abierta Aules”La asociación ficticia Aula Abierta organiza unas jornadas sobre la nube. Necesita una web que cualquier visitante pueda consultar y un archivo interno que permanezca privado. Durante la preparación cambiará el horario y se borrará accidentalmente un documento. Además, una persona colaboradora necesitará consultar unas instrucciones durante unos minutos.
Tu encargo consiste en preparar ambos espacios, mantenerlos actualizados y comprobar que puedes recuperar los datos. Trabaja individualmente con tu cuenta AWS Academy Learner Lab. Puedes consultar los apuntes: aquí encontrarás los requisitos y las comprobaciones, pero tendrás que seleccionar y adaptar las órdenes.
La creación y configuración de los buckets, las políticas, el alojamiento web y la generación del enlace temporal pueden hacerse desde la consola. Las transferencias, la actualización mediante sync y la recuperación del objeto borrado se harán con AWS CLI dentro del Debian de P00.
Material de partida y preparación
Section titled “Material de partida y preparación”Descarga los archivos de la práctica y descomprímelos desde el anfitrión en optativa-nube/aws-s3/integradora/. Crea también recuperados/, inicialmente vacía, junto a web/ y privado/. Ahí guardarás el documento que recuperes de S3. La estructura local debe quedar así:
integradora/├── web/│ ├── index.html│ ├── error.html│ └── imagen.svg├── privado/│ ├── organizacion/│ │ ├── programa-interno.txt│ │ └── contactos-ficticios.txt│ └── colabora/│ └── instrucciones.txt└── recuperados/Los documentos internos contienen datos ficticios: no añadas contactos ni otra información real a esos archivos. En la web solo personalizarás el nombre de coordinación como se indica más adelante. Los originales de los documentos privados del paquete sirven como referencia para comprobar la recuperación.
El index.html es la página de jornadas proporcionada para esta práctica: las publicaciones, los horarios y la tabla final están escritos directamente en HTML, sin JavaScript propio que genere esos contenidos. Hay cinco sesiones. La sección de inscripción es solo informativa y no recoge datos. Los estilos utilizan Tailwind CSS desde CDN y la tipografía Fontshare; el navegador necesita Internet para mostrarlos con su diseño completo. El script externo de Tailwind se conserva únicamente para aplicar el diseño, no para generar o modificar las sesiones. No tienes que editarlo. El logotipo está integrado como SVG; imagen.svg se mantiene como recurso adicional para comprobar su acceso directo.
Arranca Debian y comprueba el acceso a AWS
Section titled “Arranca Debian y comprueba el acceso a AWS”Con Docker en marcha, abre una terminal en el anfitrión (Windows o Linux). La primera orden arranca el contenedor de P00 que ya tienes creado. La segunda abre Bash dentro de ese contenedor como alumno, con /home/alumno como carpeta personal para que AWS CLI encuentre tu configuración.
docker start p00-labdocker exec -it --user alumno --workdir /home/alumno --env HOME=/home/alumno p00-lab bashAhora, dentro de Debian, comprueba el usuario y localiza los archivos de la práctica en la carpeta compartida:
whoamicd /optativa-nube/aws-s3/integradoralsComprueba que aparece alumno, que cd termina sin error y que el listado muestra web, privado y recuperados. Si la ruta no existe o falta alguna carpeta, revisa dónde descomprimiste los archivos en el anfitrión antes de continuar.
Pulsa Start Lab en Learner Lab y revisa el saldo y el tiempo disponible. Dentro de Debian, verifica AWS CLI y el perfil temporal default que preparaste en Sincronización:
aws --versionaws configure get regionaws sts get-caller-identityUsa us-east-1 en los dos buckets y como región predeterminada de CLI. Comprueba la identidad en la terminal y deja su salida fuera del PDF. Si caducó el token, renueva los tres valores tanto en [default] como en [learnerlab], conservando ambos bloques.
Diseña los dos espacios antes de subir archivos
Section titled “Diseña los dos espacios antes de subir archivos”Crea dos buckets nuevos y propios, con un mismo sufijo de ocho letras minúsculas o números que elijas:
| Recurso | Nombre propuesto | Uso y configuración |
|---|---|---|
| Bucket web | aws-s3-final-web-XXXXXXXX |
Propósito general, SSE-S3, sin versionado ni Object Lock. ACL deshabilitadas. La lectura pública quedará limitada a los tres archivos web. |
| Bucket interno | aws-s3-final-docs-XXXXXXXX |
Propósito general, SSE-S3, versionado habilitado, cuatro BPA activas y ACL deshabilitadas. Sin política pública ni Object Lock. |
BPA significa Block Public Access (bloqueo del acceso público). En la consola de S3, abre Permisos → Bloquear acceso público del bucket interno y comprueba que está marcado Bloquear todo el acceso público. Así quedan activadas las cuatro protecciones:
BlockPublicAclsrechaza los intentos de añadir permisos públicos mediante listas de control de acceso (ACL).IgnorePublicAclsignora los permisos públicos de las ACL que ya existan.BlockPublicPolicyimpide guardar una política de bucket que conceda acceso público.RestrictPublicBucketsrestringe el acceso si el bucket ya tiene una política pública. Entre otras restricciones, bloquea las peticiones anónimas.
Mantén las cuatro activadas en el bucket interno durante toda la práctica. Podrás seguir trabajando con tu sesión autorizada y compartir un archivo mediante una URL prefirmada. Bloqueo del acceso público en la teoría.
Mantén inicialmente los dos privados. Activa el versionado del bucket interno al principio y espera al menos quince minutos antes de cargar o borrar objetos en él, según la recomendación de AWS. Mientras tanto, prepara y publica la web: no necesitas esperar para trabajar con el bucket web.
En Sincronización guardaste el nombre del bucket en la variable BUCKET para escribirlo una vez y reutilizarlo en varias órdenes. Ahora tienes dos destinos. Puedes guardar sus nombres por separado en BUCKET_WEB y BUCKET_DOCS y usar la variable que corresponda en cada orden. Por ejemplo, dentro de Debian, sustituye los nombres de muestra por los de tus buckets:
BUCKET_WEB="aws-s3-final-web-a1b2c3d4"BUCKET_DOCS="aws-s3-final-docs-a1b2c3d4"aws s3 ls "s3://$BUCKET_WEB/"Bash sustituye $BUCKET_WEB por el nombre que guardaste, así que la última orden lista el contenido del bucket web. También puedes escribir los nombres completos en cada orden.
A entregar. Explica en el PDF para qué sirve cada bucket y qué archivos debe contener.
Publica la web y comprueba su alcance
Section titled “Publica la web y comprueba su alcance”Carga con AWS CLI solo los tres archivos que hay dentro de web/. En la pestaña Objetos del bucket debes ver directamente index.html, error.html e imagen.svg en la raíz, sin ninguna carpeta que abrir. Si ves una carpeta web/, los has subido con el prefijo web/ y tienes que corregir el destino. Puedes consultar Sincronización.
Antes de aplicar sync, realiza una simulación con --dryrun y --no-follow-symlinks: debe proponer únicamente esos tres archivos. No sincronices la carpeta integradora/ completa. Los documentos privados no deben llegar al bucket web, aunque no estén autorizados por su política pública.
Configura el alojamiento estático y una política de lectura limitada a esas tres claves, aprovechando la política de la web y Publicar una web estática. Modifica solo las opciones BPA necesarias en el bucket web; conserva ACL deshabilitadas y los controles del bucket interno. Si un control superior bloquea una operación, registra el mensaje sin intentar eludirlo.
En el ejercicio de políticas de P02 usaste un comodín en publicado/* para abarcar todos los objetos bajo ese prefijo. En esta política de lectura pública, usar arn:aws:s3:::NOMBRE_DEL_BUCKET/* abarcaría todos los objetos del bucket web, incluidos los que subieras más adelante. Como aquí solo necesitas publicar tres archivos, escribe sus tres claves exactas en Resource. Así, si subes por error un cuarto archivo, esta política no le da permiso de lectura pública.
En la consola de S3, abre el bucket web y ve a Propiedades → Alojamiento de sitios web estáticos. Copia la dirección del sitio que aparece como Bucket website endpoint. Empieza por http://. Pégala en la barra de direcciones del navegador para hacer estas tres pruebas:
- Abre la dirección tal como la copiaste. Debes ver la página de jornadas y su logotipo. Comprueba que la primera sesión, «Inauguración: ¿Qué es la nube?», aparece de 10:00 a 11:30 en su tarjeta y en la tabla de horarios.
- Añade
/imagen.svgal final de la dirección del sitio, con una sola barra antes del nombre. Pulsa Intro y comprueba que se abre la imagen por separado. Así verificas que el navegador puede leer ese archivo en S3. - Cambia
/imagen.svgpor/no-existe.html. Comprueba que aparece tu página de error personalizada y que su enlace vuelve al inicio. Si el navegador muestra su propio mensaje de error, anótalo y prueba también la misma dirección del sitio terminada en/error.html.
A entregar. Incluye en el PDF las órdenes de carga y las capturas de la web inicial, de imagen.svg abierta por separado y de la prueba del error. Indica cualquier limitación del navegador.
Actualiza el horario y personaliza la coordinación
Section titled “Actualiza el horario y personaliza la coordinación”La asociación retrasa una hora la primera sesión, «Inauguración: ¿Qué es la nube?», y te asigna su coordinación. Edita únicamente el index.html local. No tienes que rehacer su diseño ni modificar el resto de sesiones.
Realiza estos cambios:
- Cambia el intervalo
10:00–11:30por11:00–12:30en dos lugares del HTML: la publicación de la primera sesión (id="sesion-1") y su fila en la tabla final (id="horario-sesion-1"). Hay un comentario «SESIÓN 1» antes de cada bloque para ayudarte a localizarlo. En la publicación conserva lahque aparece después del intervalo. Así mantienes la duración y ambas vistas coinciden. No hay actualización automática entre esos dos textos: debes editar los dos. No sustituyas todos los10:00del documento, porque cambiarías otras sesiones. - Sustituye las dos apariciones de
Josep Garciapor tu nombre. Una se muestra en la columna lateral de escritorio y la otra en el pie de la página móvil. Comprueba las dos vistas, reduciendo el ancho de la ventana del navegador para ver la segunda. - En el párrafo de «Última actualización del horario», añade «Horario actualizado por la organización. Revisión de la publicación: 2.». Este texto debe quedar visible en la página y también hace que cambie el tamaño del archivo, para que la actualización resulte observable con
sync.
Simula y aplica una nueva sincronización desde web/, sin --delete. Al no haber modificado los otros archivos, la simulación debe señalar la actualización de index.html. Comprueba mediante una petición nueva al sitio el horario de la primera sesión en sus dos ubicaciones, tu nombre en escritorio y móvil y el texto de actualización. Si ves contenido antiguo, descarta caché antes de dar por fallida la subida.
A entregar. Incluye en el PDF:
- Las líneas modificadas de
index.html. - Las órdenes de simulación y de sincronización, con sus resultados.
- Las capturas del horario actualizado en la tarjeta y en la tabla, de tu nombre en escritorio y móvil, y del texto de revisión 2.
- Una explicación breve de qué cambió en S3 y por qué pudiste seguir utilizando el mismo sitio y los mismos permisos.
Opciones para personalizar un poco más la web
Section titled “Opciones para personalizar un poco más la web”Si quieres añadir un cambio propio, elige una de estas opciones. Es una ampliación opcional; indica en el PDF cuál elegiste y comprueba el resultado después de sincronizar:
- Cambiar el lugar de la segunda sesión a «Aula de informática», editando su celda de lugar dentro de la fila
id="horario-sesion-2"de la tabla final. - Añadir una frase breve a la descripción de la segunda sesión explicando qué se aprenderá sobre S3, editando el párrafo correspondiente dentro de la publicación
id="sesion-2".
Mantén el resto de la estructura y de los identificadores. No añadas formularios que envíen datos, documentos internos ni enlaces prefirmados a la web.
Organiza la documentación interna y verifica que es privada
Section titled “Organiza la documentación interna y verifica que es privada”Antes de subir los documentos, comprueba que el versionado del bucket interno aparece Habilitado y que han pasado al menos quince minutos desde que lo activaste. Esta espera permite que AWS propague la configuración; no tienes que volver a esperar si esos quince minutos ya han transcurrido mientras publicabas la web.
Ahora utiliza AWS CLI para subir los tres archivos locales de la tabla al bucket interno, no al bucket web. La columna «Clave en el bucket interno» indica el nombre completo que debe tener cada objeto en S3, incluido su prefijo. Por ejemplo, privado/organizacion/programa-interno.txt debe quedar como organizacion/programa-interno.txt: la carpeta local privado/ no forma parte de la clave de destino.
| Archivo local | Clave en el bucket interno |
|---|---|
privado/organizacion/programa-interno.txt |
organizacion/programa-interno.txt |
privado/organizacion/contactos-ficticios.txt |
organizacion/contactos-ficticios.txt |
privado/colabora/instrucciones.txt |
colabora/instrucciones.txt |
Lista por separado los prefijos organizacion/ y colabora/. Deben contener dos y un objeto, respectivamente. Comprueba que has utilizado el bucket correcto y que no se han cargado documentos internos en el bucket web.
Copia desde la consola la Object URL de organizacion/contactos-ficticios.txt y solicítala en una ventana privada, sin firma. Debe denegar el acceso. No utilices Open o Download como prueba anónima: pueden emplear autorización. Verifica que las cuatro BPA del bucket interno permanecen activas.
Resuelve el incidente: han borrado el programa interno
Section titled “Resuelve el incidente: han borrado el programa interno”Una vez confirmada su carga, simula la pérdida de programa-interno.txt:
- Elimina solo su copia local de trabajo, no el paquete original ni otros archivos. Comprueba que ya no está en
privado/organizacion/. - Realiza con CLI un borrado normal de
organizacion/programa-interno.txten el bucket interno. Comprueba que desaparece del listado normal. No borres permanentemente la versión que conserva datos. - Consulta las versiones y marcadores mediante CLI. Identifica la entrada de la clave exacta que representa el marcador actual.
- Retira únicamente ese marcador y comprueba que el objeto vuelve a aparecer, sin subirlo de nuevo.
- Descárgalo con CLI a
recuperados/programa-interno.txty verifica las cinco líneas contra el original del paquete. Puedes extraer ese original a otra carpeta local de referencia y utilizardiff, pero la copia recuperada debe proceder de S3.
Consulta el ejercicio de recuperación con CLI si necesitas recordar las operaciones. Si no puedes identificar el marcador con seguridad, detente y registra la incidencia.
A entregar. Explica en el PDF qué conservaba S3 mientras el objeto parecía borrado y qué habrías perdido si hubieras eliminado permanentemente la versión con datos.
Facilita las instrucciones mediante un enlace temporal
Section titled “Facilita las instrucciones mediante un enlace temporal”La persona colaboradora necesita colabora/instrucciones.txt durante cinco minutos, pero el documento debe permanecer privado. Genera una URL prefirmada de lectura para ese objeto, sin modificar sus permisos ni las BPA.
Prueba el enlace en tu propio navegador; no necesitas enviarlo a otra persona. Registra hora de creación y acceso. Conserva el mismo enlace solo en el portapapeles y mantén el objeto intacto. Pasados al menos seis minutos desde su creación, realiza una petición nueva en una ventana privada nueva, cerrando todas las anteriores. Debe dejar de permitir obtener el archivo.
Durante la espera puedes completar tu informe sin copiar otros textos al portapapeles. No generes otro enlace para la prueba final y no confundas una copia descargada o una pestaña antigua con un acceso nuevo. Si las credenciales caducan antes, o no puedes descartar caché, registra el resultado real y repite la prueba completa si procede. Acceso temporal.
Después comprueba, desde tu sesión autorizada, que el objeto sigue existiendo. Mantén la firma y el enlace fuera del HTML y de las capturas.
A entregar. Incluye en el PDF las horas de creación y de las dos peticiones al mismo enlace, las capturas de las pruebas con la dirección oculta y una explicación de por qué la URL prefirmada te permite compartir el archivo mientras el bucket sigue siendo privado.
Retira el servicio y limpia los recursos
Section titled “Retira el servicio y limpia los recursos”Cuando hayas registrado las comprobaciones:
- Retira la política pública del bucket web, reactiva sus cuatro BPA y comprueba con una petición nueva que un archivo anteriormente público ya no permite acceso anónimo. Desactiva el alojamiento estático.
- Vacía y elimina el bucket web. Comprueba que desaparece del inventario.
- En el bucket interno elimina permanentemente todas las versiones y marcadores de tus objetos. Utiliza Mostrar versiones o el vaciado completo de ese bucket exclusivo; un listado normal vacío no acredita limpieza del historial. Elimina el bucket y comprueba su ausencia.
- Registra el saldo final o que su actualización está pendiente. Si queda algo por eliminar, identifica el recurso, motivo y actuación pendiente.
- Aplica el cierre de CLI: retira las credenciales temporales de
[default]y[learnerlab]cuando termines de utilizarlas, conserva otros perfiles, sal de Debian y detén el contenedor desde el anfitrión si termina tu trabajo. Pulsa End Lab. No consideres End Lab un sustituto de la limpieza.
No necesitas cron, aceleración, reglas Lifecycle ni recursos distintos de esos dos buckets para completar el encargo. Las operaciones y el almacenamiento pueden tener coste; utiliza únicamente los archivos pequeños del paquete.
A entregar
Section titled “A entregar”Entrega un único archivo PDF con todos los comandos que hayas utilizado y las capturas necesarias para demostrar los resultados. Organízalo siguiendo los apartados de esta práctica e indica tu nombre y la fecha.
Para cada apartado incluye:
- Las órdenes ejecutadas, como texto legible que se pueda copiar, con los nombres y rutas que utilizaste. Incluye la preparación del entorno, las transferencias, las comprobaciones, la recuperación y la limpieza que hayas realizado por terminal.
- Una explicación breve de qué hace cada orden o grupo de órdenes y del resultado obtenido. Si una orden falló y tuviste que corregirla, explica el fallo y la corrección.
- Las capturas que acrediten las operaciones y configuraciones, especialmente las realizadas desde la consola. No necesitas una captura por cada clic; una misma captura puede demostrar varias comprobaciones si se leen con claridad.
Utiliza esta tabla para comprobar que el PDF está completo. Haz las capturas antes de eliminar los recursos:
| Apartado | Comandos, capturas y resultados que deben aparecer en el PDF |
|---|---|
| Separación de espacios | Configuración de ambos buckets: región, versionado y acceso público; explicación de su finalidad. Captura de los objetos que contiene cada uno una vez cargados. |
| Web inicial y error | Órdenes de carga y captura del sitio publicado con la primera sesión a las 10:00–11:30 y el logotipo visible. Acceso directo a imagen.svg y comprobación de la ruta inexistente y su documento de error, indicando cualquier limitación del navegador. |
| Actualización | Líneas editadas del HTML, órdenes y resultado de la simulación y aplicación de sync. Capturas de la primera sesión a las 11:00–12:30 en tarjeta y tabla, tu nombre en escritorio y móvil y el texto de actualización con revisión 2. Incluye el cambio opcional si lo realizaste. |
| Documentos privados | Órdenes de subida y listado de los dos prefijos con sus resultados. Captura de la denegación al solicitar la Object URL sin firma en una ventana privada. |
| Recuperación | Órdenes de borrado local y remoto, consulta de versiones, retirada del marcador y descarga. Capturas de la versión con datos y el marcador antes de retirarlo, y del contenido recuperado con su comprobación frente al original. |
| Acceso temporal | Duración elegida y horas de creación y de las dos peticiones al mismo enlace. Capturas del acceso válido y de la denegación tras la espera, sin mostrar la URL firmada, y comprobación de que el objeto sigue existiendo. |
| Cierre | Retirada de la publicación, limpieza completa y ausencia final de ambos buckets. Comandos de cierre y captura de su resultado cuando corresponda; saldo final o indicación de actualización pendiente. |
Añade una frase por decisión: por qué son dos buckets, por qué el versionado permitió la recuperación y por qué la URL prefirmada no exige hacer público el documento.
No incluyas secretos en el PDF: ni el contenido de ~/.aws/credentials, ni claves, tokens o URL prefirmadas. Oculta identificadores de cuenta y cabeceras personales de AWS; recorta la barra de direcciones cuando contenga una firma. En los comandos de recuperación puedes sustituir el identificador real por ID_DEL_MARCADOR; en la consulta de versiones muestra solo los datos necesarios, ocultando los identificadores personales. No pegues el historial completo de la terminal sin revisarlo.