Naar de inhoud
Shareboxed

Een Amazon S3-bucket instellen voor Shareboxed

Shareboxed uploadt rechtstreeks naar een bucket die van jou is. Bestanden houden hun eigen naam en blijven zichtbaar in je console. Deze handleiding zet er een op met de AWS CLI, en laat hetzelfde zien voor Cloudflare R2, Backblaze B2 en MinIO.

AWS S3

1. Maak de bucket

aws s3api create-bucket --bucket my-uploads --region eu-west-1 \
  --create-bucket-configuration LocationConstraint=eu-west-1

Laat Block Public Access aan staan (de standaard).

2. Maak een IAM-user

Sla dit op als 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. Maak de access key

aws iam create-access-key --user-name shareboxed

De uitvoer toont AccessKeyId en SecretAccessKey één keer. Plak ze in de Credentials-velden van de connectie in Shareboxed:

Veld Waarde
Endpoint https://s3.eu-west-1.amazonaws.com
Region eu-west-1
Credentials de AccessKeyId en SecretAccessKey

4. Optioneel: onvolledige uploads afbreken

Shareboxed breekt een mislukte multipart-upload zelf af, maar bij een crash of een stroomuitval kan dat niet:

aws s3api put-bucket-lifecycle-configuration --bucket my-uploads \
  --lifecycle-configuration '{"Rules":[{"ID":"abort-incomplete","Status":"Enabled","Filter":{},"AbortIncompleteMultipartUpload":{"DaysAfterInitiation":7}}]}'

5. Optioneel: uploads na 7 dagen verwijderen

aws s3api put-bucket-lifecycle-configuration --bucket my-uploads \
  --lifecycle-configuration '{"Rules":[{"ID":"expire","Status":"Enabled","Filter":{"Prefix":""},"Expiration":{"Days":7}}]}'

Cloudflare R2

R2 heeft een eigen connectietype in Shareboxed dat om een account id vraagt in plaats van om een endpoint; zie de Cloudflare R2-handleiding. Wil je het toch als gewone S3-connectie gebruiken:

npx wrangler r2 bucket create my-uploads

Maak een token onder R2 → Manage R2 API Tokens met Object Read & Write op die bucket.

Veld Waarde
Endpoint https://<account-id>.r2.cloudflarestorage.com
Region auto
Credentials de Access Key ID en Secret Access Key van het token

Backblaze B2

b2 bucket create my-uploads allPrivate
b2 key create --bucket my-uploads shareboxed \
  listBuckets,listFiles,readFiles,writeFiles,deleteFiles

Het tweede commando toont de keyID en applicationKey één keer.

Veld Waarde
Endpoint https://s3.us-west-004.backblazeb2.com (de region die bij je bucket staat)
Region de bijbehorende region, bijv. us-west-004
Credentials de keyID en applicationKey

MinIO, op je eigen machine of 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"
Veld Waarde
Endpoint http://127.0.0.1:9000
Region us-east-1
Credentials de root user en het wachtwoord, of een key uit de console op :9001

Over gewoon http is het verkeer onversleuteld. Op een LAN kan dat prima zijn; over het internet zet je het achter TLS.

Shareboxed-downloadlinks aanzetten

Standaard uit. Met de schakelaar aan (connectie-instellingen → Sharing) kopieert een voltooide upload ook een shareboxed.app-link waar iedereen vanaf kan downloaden. Een link leeft zeven dagen, net als elke share van Shareboxed; de instelling uitzetten verwijdert de opgeslagen sleutel en beëindigt in één keer elke levende link van deze connectie.

De bucket heeft twee dingen nodig om die links te laten werken.

1. Laat de key teruglezen wat hij geschreven heeft. Voeg s3:GetObject toe aan het tweede statement in shareboxed-policy.json en zet de policy opnieuw door:

"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. Geef de downloadpagina toegang tot de 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 en MinIO hebben een gelijkwaardige CORS-instelling; de regel is dezelfde.

Als iets niet werkt

Druk eerst op Test Connection. Wat het kan zeggen:

Test Connection zegt Oplossing
Missing credentials De Credentials-velden zijn leeg of zijn niet opgeslagen. Vul de key en het secret opnieuw in.
Invalid endpoint De Endpoint is geen adres. Gebruik de volledige https://-URL.
Not reachable Er antwoordde niets op het endpoint. Controleer het adres en de poort.
Incorrect region Het Region-veld komt niet overeen met de region van de bucket.
Invalid credentials De access key of het secret is verkeerd.
Insufficient permissions De key werkt, maar de policy staat s3:ListBucket op deze bucket niet toe.
Bucket not found Typefout in de bucketnaam, of het endpoint wijst naar de verkeerde region.
Missing CORS rule Downloadlinks staan aan, maar de bucket heeft geen CORS-regel voor https://shareboxed.app.
Server errored De opslagdienst zelf ging fout. Probeer het opnieuw en bekijk de statuspagina van de provider.

Nog twee die pas later opduiken:

  • Test slaagt, uploads mislukken met Check the access key, the secret and its permissions: Test Connection leest alleen, dus het kan een key die wel mag listen maar niet mag schrijven niet zien. Controleer of het tweede statement in de policy arn:aws:s3:::my-uploads/* noemt, met de /* en dezelfde bucketnaam als het eerste. Op R2 is de gebruikelijke oorzaak een token dat als Object Read only is aangemaakt, op B2 een key zonder writeFiles.
  • Een ontvanger ziet "Connection refused, please ask the sender to check on the permissions": de CORS-regel ontbreekt of staat GET vanaf https://shareboxed.app niet toe. Een ontvanger die "Unable to access these files" ziet, klikte op een bestand dat de opruimregel uit stap 5 al verwijderd heeft; de link zelf is in orde.