Introducción
La filtración anónima está cerrada en este entorno nuevo, pero el portal aún usa credenciales del administrador de almacenamiento. Puede hacer mucho más que leer su extracto asignado. Crearás una identidad dedicada, le darás solo las lecturas necesarias y cambiarás la aplicación para usarla.
Usa la pestaña Storage Admin para cuentas y políticas, Portal App para el archivo privado de credenciales y Document Portal para solicitudes reales de la aplicación. Los datos sintéticos se ejecutan en VersityGW 1.10.0 local con usuarios internos como principales, no en AWS IAM completo. El entorno comienza de forma independiente del laboratorio anterior.
Crear una identidad dedicada para el portal
Selecciona la pestaña Document Portal en la interfaz del laboratorio para comenzar este paso.
En este paso, sustituirás la dependencia de un administrador por una identidad de aplicación independiente.
Cambia a la pestaña Document Portal, pulsa Open assigned document y observa Identity: storage-admin. El extracto funciona, pero no requiere privilegios administrativos. Una identidad nombra al solicitante; su clave secreta permite al cliente firmar solicitudes que prueban esa identidad. La autenticación prueba quién llama; la autorización decide qué puede hacer.
En la pestaña Storage Admin, carga las credenciales administrativas de esta VM:
Cambia a la pestaña Storage Admin antes de ejecutar el siguiente comando.
source admin.env
VersityGW incluye un cliente administrativo. -a selecciona el nombre de la clave de acceso, -s su secreto y -er el endpoint. Antes de create-user, identifican al administrador; después, definen la nueva cuenta. El rol user no evita las restricciones como un administrador. Crea la cuenta sintética:
/opt/c14/versitygw admin -a storage-admin -s storage-admin-secret -er http://127.0.0.1:7070 create-user -a portal-reader -s portal-reader-secret -r user
El éxito no muestra errores. Si la cuenta ya existe tras repetir el comando, continúa con ella. Nunca le des admin ni la conviertas en propietaria del bucket: esos permisos eluden la política limitada prevista.
Prueba su autenticación con la ayuda pública. Las asignaciones al principio seleccionan credenciales solo para este comando:
AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key public/help.txt help.txt
Los metadatos confirman una solicitud autenticada. La ayuda es pública para todos; esto todavía no autoriza lecturas de extractos internos. InvalidAccessKeyId indica un usuario ausente y SignatureDoesNotMatch un secreto incorrecto; ninguno es un resultado de autorización.
Conceder solo las lecturas del prefijo necesario
Selecciona la pestaña Storage Admin en la interfaz del laboratorio para comenzar este paso.
En este paso, autorizarás la identidad dedicada sin conceder escritura ni lecturas ajenas.
El portal necesita portal/statement.txt; su área permitida es portal/. Un prefijo coincide con el inicio de una clave de objeto. portal/* no incluye finance/budget.txt. La lectura usa s3:GetObject; subir y borrar usan s3:PutObject y s3:DeleteObject. Evita s3:*, que incluye todas las operaciones.
Lee la política efectiva en la pestaña Storage Admin:
Cambia a la pestaña Storage Admin antes de ejecutar el siguiente comando.
aws --endpoint-url http://127.0.0.1:7070 s3api get-bucket-policy --bucket documents --query Policy --output text
Solo existe el permiso de ayuda pública. Abre la copia local:
nano policy.json
Sustitúyela por este JSON completo. Conserva la declaración pública y añade otra para el lector con nombre. Los principales internos de VersityGW son nombres de usuario; los formatos de AWS son diferentes.
{
"Version": "2012-10-17",
"Statement": [
{"Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/public/*"},
{"Effect": "Allow", "Principal": "portal-reader", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/portal/*"}
]
}
En nano, guarda con Ctrl+O, Enter y sal con Ctrl+X. Aplica el archivo mediante file://:
aws --endpoint-url http://127.0.0.1:7070 s3api put-bucket-policy --bucket documents --policy file://policy.json
Sin salida significa éxito; los errores de sintaxis dejan vigente la política anterior. Corrige y reaplica si hace falta. Prueba la lectura permitida:
AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key portal/statement.txt statement.txt
Ahora prueba una lectura ajena. El AccessDenied esperado es intencional; continúa después:
AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key finance/budget.txt budget.txt
El punto de control también prueba escrituras y borrados reales en almacenamiento equivalente desechable, conservando los documentos activos. Una identidad inválida fallaría en el control positivo de lectura; un inicio de sesión roto no puede hacerse pasar por privilegio mínimo.
Cambiar las credenciales de la aplicación
Selecciona la pestaña Portal App en la interfaz del laboratorio para comenzar este paso.
En este paso, harás que el portal real use la identidad dedicada.
Cambia a la pestaña Portal App. Esta cuenta local separada posee la configuración privada de la aplicación, sin las credenciales del shell de Storage Admin. Lee su archivo actual:
Cambia a la pestaña Portal App antes de ejecutar el siguiente comando.
cat credentials.json
Los campos access_key y secret_key identifican actualmente a storage-admin. Edita el archivo:
nano credentials.json
Usa las credenciales sintéticas dedicadas:
{
"access_key": "portal-reader",
"secret_key": "portal-reader-secret"
}
Guarda con Ctrl+O, Enter y sal con Ctrl+X. El portal lee el archivo en cada solicitud; no requiere reinicio. Vuelve a la pestaña Document Portal, pulsa Open assigned document o recarga. Espera Identity: portal-reader y el extracto original. Si el portal no puede leer, corrige JSON o credenciales y revisa la política en la pestaña Storage Admin.

Finalmente, en la pestaña Storage Admin, prueba una solicitud interna anónima y la ayuda pública. -sS muestra errores sin el medidor; -w añade el código de respuesta:
Cambia a la pestaña Storage Admin antes de ejecutar el siguiente comando.
curl -sS -w '\nHTTP %{http_code}\n' http://127.0.0.1:7070/documents/portal/statement.txt
Espera AccessDenied y HTTP 403.
curl -sS http://127.0.0.1:7070/documents/public/help.txt
Espera la ayuda original. La identidad de aplicación y el acceso anónimo son límites separados; proteger uno no protege automáticamente el otro.
Resumen
Has creado una identidad de aplicación ordinaria, permitido solo las lecturas del prefijo necesario y retirado las credenciales administrativas del portal funcional. Has comprobado por separado autenticación, autorización, acceso público y disponibilidad de la aplicación.



