Configurar un bucket de Amazon S3 para Shareboxed
Shareboxed sube los archivos directamente a un bucket que es tuyo. Los archivos conservan su propio nombre y siguen visibles en tu consola. Esta guía configura uno con la AWS CLI, y muestra lo mismo para Cloudflare R2, Backblaze B2 y MinIO.
AWS S3
1. Crea el bucket
aws s3api create-bucket --bucket my-uploads --region eu-west-1 \
--create-bucket-configuration LocationConstraint=eu-west-1
Deja Block Public Access activado (es lo predeterminado).
2. Crea un usuario IAM
Guarda esto como shareboxed-policy.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListForTheConnectionTest",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my-uploads"
},
{
"Sid": "WriteAndTakeBack",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": "arn:aws:s3:::my-uploads/*"
}
]
}
aws iam create-user --user-name shareboxed
aws iam put-user-policy --user-name shareboxed \
--policy-name shareboxed-uploads \
--policy-document file://shareboxed-policy.json
3. Crea la access key
aws iam create-access-key --user-name shareboxed
La salida muestra AccessKeyId y SecretAccessKey una sola vez. Pégalos en
los campos Credentials de la conexión en Shareboxed:
| Campo | Valor |
|---|---|
| Endpoint | https://s3.eu-west-1.amazonaws.com |
| Region | eu-west-1 |
| Credentials | el AccessKeyId y el SecretAccessKey |
4. Opcional: aborta las subidas incompletas
Shareboxed aborta por sí mismo una subida multipart fallida, pero un cierre inesperado o un corte de corriente no pueden:
aws s3api put-bucket-lifecycle-configuration --bucket my-uploads \
--lifecycle-configuration '{"Rules":[{"ID":"abort-incomplete","Status":"Enabled","Filter":{},"AbortIncompleteMultipartUpload":{"DaysAfterInitiation":7}}]}'
5. Opcional: borra las subidas al cabo de 7 días
aws s3api put-bucket-lifecycle-configuration --bucket my-uploads \
--lifecycle-configuration '{"Rules":[{"ID":"expire","Status":"Enabled","Filter":{"Prefix":""},"Expiration":{"Days":7}}]}'
Cloudflare R2
R2 tiene su propio tipo de conexión en Shareboxed, que pide un account id en lugar de un endpoint; consulta la guía de Cloudflare R2. Si aun así quieres usarlo como una conexión S3 normal:
npx wrangler r2 bucket create my-uploads
Crea un token en R2 → Manage R2 API Tokens con Object Read & Write sobre ese bucket.
| Campo | Valor |
|---|---|
| Endpoint | https://<account-id>.r2.cloudflarestorage.com |
| Region | auto |
| Credentials | el Access Key ID y el Secret Access Key del token |
Backblaze B2
b2 bucket create my-uploads allPrivate
b2 key create --bucket my-uploads shareboxed \
listBuckets,listFiles,readFiles,writeFiles,deleteFiles
El segundo comando muestra el keyID y el applicationKey una sola vez.
| Campo | Valor |
|---|---|
| Endpoint | https://s3.us-west-004.backblazeb2.com (la región que aparece en tu bucket) |
| Region | la región correspondiente, por ejemplo us-west-004 |
| Credentials | el keyID y el applicationKey |
MinIO, en tu propia máquina o en un NAS
docker run -d --name minio -p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=change-me-please \
-v ~/minio-data:/data quay.io/minio/minio:latest server /data --console-address ":9001"
| Campo | Valor |
|---|---|
| Endpoint | http://127.0.0.1:9000 |
| Region | us-east-1 |
| Credentials | el usuario root y su contraseña, o una key creada en la consola en :9001 |
Con http a secas el tráfico no va cifrado. En una red local puede estar
bien; por internet, ponlo detrás de TLS.
Activar los enlaces de descarga de Shareboxed
Desactivados por defecto. Con el interruptor activado (ajustes de la conexión
→ Sharing), al terminar una subida también se copia un enlace de
shareboxed.app desde el que cualquiera puede descargar. Un enlace vive siete
días, como todo lo que se comparte con Shareboxed; al desactivar el ajuste se
borra la clave guardada y todos los enlaces activos de esta conexión dejan de
funcionar a la vez.
El bucket necesita dos cosas para que esos enlaces funcionen.
1. Deja que la key pueda volver a leer lo que ha escrito. Añade
s3:GetObject a la segunda statement de shareboxed-policy.json y vuelve a
aplicar la policy:
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
]
aws iam put-user-policy --user-name shareboxed \
--policy-name shareboxed-uploads \
--policy-document file://shareboxed-policy.json
2. Permite que la página de descarga lea los bytes (CORS):
aws s3api put-bucket-cors --bucket my-uploads \
--cors-configuration '{"CORSRules":[{"AllowedOrigins":["https://shareboxed.app"],"AllowedMethods":["GET","HEAD"],"AllowedHeaders":["*"],"MaxAgeSeconds":3600}]}'
R2, B2 y MinIO tienen un ajuste de CORS equivalente; la regla es la misma.
Cuando algo no funciona
Pulsa Test Connection primero. Esto es lo que puede decir:
| Test Connection dice | Solución |
|---|---|
| Missing credentials | Los campos Credentials están vacíos o no se guardaron. Vuelve a introducir la key y el secret. |
| Invalid endpoint | El Endpoint no es una dirección. Usa la URL https:// completa. |
| Not reachable | Nada respondió en el endpoint. Revisa la dirección y el puerto. |
| Incorrect region | El campo Region no coincide con la región del bucket. |
| Invalid credentials | La access key o el secret son incorrectos. |
| Insufficient permissions | La key funciona, pero la policy no permite s3:ListBucket en este bucket. |
| Bucket not found | Hay una errata en el nombre del bucket, o el endpoint apunta a la región equivocada. |
| Missing CORS rule | Los enlaces de descarga están activados, pero el bucket no tiene una regla CORS para https://shareboxed.app. |
| Server errored | Falló el propio servicio de almacenamiento. Inténtalo de nuevo y mira la página de estado del proveedor. |
Dos más que solo aparecen después:
- El test pasa, pero las subidas fallan con Check the access key, the
secret and its permissions: Test Connection solo lee, así que no puede ver
una key que pueda listar pero no escribir. Comprueba que la segunda
statement de la policy nombra
arn:aws:s3:::my-uploads/*, con el/*y el mismo nombre de bucket que la primera. En R2 la causa habitual es un token creado como Object Read only; en B2, una key sinwriteFiles. - Quien recibe el enlace ve "Connection refused, please ask the sender to
check on the permissions": falta la regla CORS, o no permite
GETdesdehttps://shareboxed.app. Si en cambio ve "Unable to access these files", ha pulsado un archivo que la regla de limpieza del paso 5 ya borró; el enlace en sí está bien.