# Acceso a Bucket S3 para Clientes

# Acceso a Bucket S3 para Clientes

# Manual: Acceso a Bucket S3 para Clientes

Guía paso a paso para crear un bucket S3 exclusivo para un cliente, con acceso
restringido mediante una política IAM y un usuario dedicado (Access Key), para
que el cliente pueda subir/descargar sus archivos de forma segura.

> Reemplaza los nombres de ejemplo (`nxs-s3-cliente`, `nxs-user-cliente-app`,
> etc.) por la convención de nombres real del cliente que estás configurando.

---

## Índice

1. [Crear el bucket S3](#1-crear-el-bucket-s3)
2. [Verificar el bucket creado](#2-verificar-el-bucket-creado)
3. [Revisar la pestaña de permisos del bucket](#3-revisar-la-pestaña-de-permisos-del-bucket)
4. [Crear la política IAM](#4-crear-la-política-iam)
5. [Nombrar y crear la política](#5-nombrar-y-crear-la-política)
6. [Crear el usuario IAM](#6-crear-el-usuario-iam)
7. [Asignar la política al usuario](#7-asignar-la-política-al-usuario)
8. [Generar el Access Key](#8-generar-el-access-key)
9. [Configuración del lado del cliente (AWS CLI)](#9-configuración-del-lado-del-cliente-aws-cli)
10. [Buenas prácticas de seguridad](#10-buenas-prácticas-de-seguridad)

---

## 1. Crear el bucket S3

1. Ir a **Amazon S3 → Buckets** y hacer clic en **Create bucket**.
2. **Bucket type:** `General purpose`.
3. **Bucket name:** usar convención `nxs-s3-<cliente>` (debe ser único a nivel global).
4. **AWS Region:** dejar la región estándar de la cuenta (ej. `US East (Ohio) us-east-2`).
5. **Object Ownership:** dejar `ACLs disabled` (recomendado).
6. **Block Public Access:** mantener **todo bloqueado** (bucket privado, sin acceso público).
7. **Bucket Versioning:** según necesidad del cliente (`Disable` u `Enable`).
8. **Default encryption:** `SSE-S3` (por defecto), `Bucket Key: Enable`.
9. Clic en **Create bucket**.

![Crear bucket - datos generales](imagenes/01-crear-bucket-datos-generales.png)
![Crear bucket - versionado y cifrado](imagenes/02-crear-bucket-versionado-cifrado.png)

---

## 2. Verificar el bucket creado

El bucket queda vacío y listo para recibir archivos (vía consola, CLI o API).

![Bucket creado vacío](imagenes/03-bucket-creado-vacio.png)

---

## 3. Revisar la pestaña de permisos del bucket

Entrar a la pestaña **Permissions** del bucket. En este flujo **no** se usa una
Bucket Policy pública: el acceso se controla con una política IAM asociada a
un usuario dedicado (pasos siguientes).

![Bucket - tab de permisos](imagenes/04-bucket-tab-permisos.png)

---

## 4. Crear la política IAM

1. Ir a **IAM → Policies → Create policy**.
2. Cambiar al editor **JSON** (arriba a la derecha).
3. Pegar el JSON de permisos (ver bloque abajo), reemplazando el nombre del bucket.

![Crear política - acceso al servicio](imagenes/05-iam-crear-politica-servicio.png)
![Crear política - editor JSON](imagenes/06-iam-politica-acciones-visual.png)

### JSON de permisos (copiar y pegar)

Da permisos de **subir, leer, listar y eliminar** objetos, limitado a un bucket específico:

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "NxsS3AccessCliente",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::nxs-s3-cliente/*"
        },
        {
            "Sid": "NxsS3ListBucketCliente",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::nxs-s3-cliente"
        }
    ]
}
```

> ⚠️ **Importante:** reemplazar `nxs-s3-cliente` por el nombre real del bucket
> creado en el paso 1, en **ambas** líneas (`Resource` con `/*` para objetos,
> y sin `/*` para el `ListBucket`).

![JSON de la política](imagenes/07-iam-politica-json.png)

---

## 5. Nombrar y crear la política

1. En **Review and create**, asignar un nombre descriptivo, ej: `nxs-s3-cliente-policy`.
2. Verificar el resumen de permisos (S3: List, Read, Write).
3. Clic en **Create policy**.

![Nombrar y revisar política](imagenes/08-iam-politica-nombre-revision.png)

---

## 6. Crear el usuario IAM

1. Ir a **IAM → Users → Create user**.
2. **User name:** convención `nxs-user-<cliente>-app`.
3. **No** marcar "Provide user access to the AWS Management Console" (el cliente
   no necesita acceso a la consola, solo Access Key para API/CLI/SDK).
4. Clic en **Next**.

![Crear usuario IAM](imagenes/09-iam-crear-usuario.png)

---

## 7. Asignar la política al usuario

1. En **Set permissions**, elegir **Attach policies directly**.
2. Buscar la política creada en el paso 5 (filtrar por el prefijo, ej: `nxs`).
3. Marcar el checkbox de la política correspondiente.
4. Clic en **Next** y luego **Create user**.

![Asignar política al usuario](imagenes/10-iam-asignar-politica-usuario.png)

---

## 8. Generar el Access Key

1. Entrar al usuario creado → pestaña **Security credentials**.
2. En **Access keys**, clic en **Create access key**.

![Crear access key](imagenes/11-iam-usuario-crear-access-key.png)

3. **Use case:** seleccionar `Application running outside AWS` (o `Command Line
   Interface (CLI)` si el cliente usará la CLI directamente). Clic en **Next**.

![Caso de uso del access key](imagenes/12-access-key-caso-de-uso.png)

4. **Description tag (opcional):** se puede indicar el propósito de la key.
   Clic en **Create access key**.

![Confirmación de creación](imagenes/13-access-key-confirmacion.png)

5. Se muestran el **Access key** y el **Secret access key**. Copiar ambos o
   descargar el archivo `.csv`. **El Secret access key solo se muestra una vez.**

![Access key y secret key generados](imagenes/14-access-key-resultado.png)

> 🔒 Entregar estas credenciales al cliente por un canal seguro (gestor de
> contraseñas, no por correo o chat en texto plano).

---

## 9. Configuración del lado del cliente (AWS CLI)

En la máquina del cliente, con la AWS CLI instalada:

```bash
aws configure
```

```text
AWS Access Key ID [None]: <ACCESS_KEY_ID>
AWS Secret Access Key [None]: <SECRET_ACCESS_KEY>
Default region name [None]: us-east-2
Default output format [None]: json
```

Prueba rápida de conexión (debe listar el contenido del bucket, vacío al inicio):

```bash
aws s3 ls s3://nxs-s3-cliente
```

Subir un archivo de prueba:

```bash
aws s3 cp archivo-prueba.txt s3://nxs-s3-cliente/
```

![Configuración AWS CLI en el cliente](imagenes/15-cliente-aws-configure.png)

---

## 10. Buenas prácticas de seguridad

- Mantener **Block Public Access** activado en el bucket (privado, sin excepciones).
- Un **usuario IAM + una política dedicada por cliente** — nunca compartir credenciales entre clientes.
- No usar Bucket Policy pública salvo un requerimiento explícito y justificado.
- Rotar el Access Key periódicamente y desactivar/eliminar keys que ya no se usen.
- Habilitar **MFA** para usuarios humanos con acceso a la consola (no aplica a este flujo de solo Access Key).
- Documentar en un registro interno qué bucket, política y usuario corresponden a cada cliente.

---

### Referencia rápida — plantilla JSON para copiar

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "NxsS3AccessCliente",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::NOMBRE_BUCKET/*"
        },
        {
            "Sid": "NxsS3ListBucketCliente",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::NOMBRE_BUCKET"
        }
    ]
}
```