Ir al contenido
Shareboxed

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 sin writeFiles.
  • Quien recibe el enlace ve "Connection refused, please ask the sender to check on the permissions": falta la regla CORS, o no permite GET desde https://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.