Zum Inhalt
Shareboxed

Einen Amazon-S3-Bucket für Shareboxed einrichten

Shareboxed lädt direkt in einen Bucket hoch, der dir gehört. Dateien behalten ihre eigenen Namen und bleiben in deiner Console sichtbar. Diese Anleitung richtet einen Bucket mit der AWS CLI ein und zeigt dasselbe für Cloudflare R2, Backblaze B2 und MinIO.

AWS S3

1. Den Bucket anlegen

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

Lass Block Public Access an (der Standard).

2. Einen IAM-User anlegen

Speichere das 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. Den Access Key erstellen

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

Die Ausgabe zeigt AccessKeyId und SecretAccessKey ein einziges Mal. Füge sie in die Credentials-Felder der Verbindung in Shareboxed ein:

Feld Wert
Endpoint https://s3.eu-west-1.amazonaws.com
Region eu-west-1
Credentials die AccessKeyId und der SecretAccessKey

4. Optional: unvollständige Uploads abbrechen

Shareboxed bricht einen fehlgeschlagenen Multipart-Upload selbst ab, ein Absturz oder ein Stromausfall kann das nicht:

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

5. Optional: Uploads nach 7 Tagen löschen

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

Cloudflare R2

R2 hat in Shareboxed einen eigenen Verbindungstyp, der nach einer Account-ID statt nach einem Endpoint fragt, siehe die Anleitung zu Cloudflare R2. Wenn du es trotzdem als normale S3-Verbindung nutzen willst:

npx wrangler r2 bucket create my-uploads

Erstelle unter R2 → Manage R2 API Tokens ein Token mit Object Read & Write für diesen Bucket.

Feld Wert
Endpoint https://<account-id>.r2.cloudflarestorage.com
Region auto
Credentials Access Key ID und Secret Access Key des Tokens

Backblaze B2

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

Der zweite Befehl gibt keyID und applicationKey ein einziges Mal aus.

Feld Wert
Endpoint https://s3.us-west-004.backblazeb2.com (die Region, die bei deinem Bucket steht)
Region die passende Region, z. B. us-west-004
Credentials die keyID und der applicationKey

MinIO, auf deinem eigenen Rechner oder 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"
Feld Wert
Endpoint http://127.0.0.1:9000
Region us-east-1
Credentials der Root-User samt Passwort, oder ein Key aus der Console auf :9001

Über einfaches http ist der Verkehr unverschlüsselt. Im eigenen Netz kann das in Ordnung sein, über das Internet gehört TLS davor.

Shareboxed-Download-Links einschalten

Standardmäßig aus. Ist der Schalter an (Verbindungseinstellungen → Sharing), kopiert ein fertiger Upload zusätzlich einen shareboxed.app-Link, von dem jeder herunterladen kann. Ein Link lebt sieben Tage, wie jeder Shareboxed-Share. Schaltest du die Einstellung aus, wird der gespeicherte Key gelöscht und jeder aktive Link dieser Verbindung endet auf einen Schlag.

Damit diese Links funktionieren, braucht der Bucket zwei Dinge.

1. Lass den Key zurücklesen, was er geschrieben hat. Ergänze s3:GetObject im zweiten Statement in shareboxed-policy.json und schiebe die Policy erneut hoch:

"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. Erlaube der Download-Seite, die Bytes zu lesen (CORS):

aws s3api put-bucket-cors --bucket my-uploads \
  --cors-configuration '{"CORSRules":[{"AllowedOrigins":["https://shareboxed.app"],"AllowedMethods":["GET","HEAD"],"AllowedHeaders":["*"],"MaxAgeSeconds":3600}]}'

R2, B2 und MinIO haben eine gleichwertige CORS-Einstellung, die Regel ist dieselbe.

Wenn etwas nicht funktioniert

Drücke zuerst Test Connection. Was dort stehen kann:

Test Connection meldet Lösung
Missing credentials Die Credentials-Felder sind leer oder wurden nicht gespeichert. Gib Key und Secret erneut ein.
Invalid endpoint Der Endpoint ist keine Adresse. Nimm die vollständige https://-URL.
Not reachable Am Endpoint hat nichts geantwortet. Prüfe die Adresse und den Port.
Incorrect region Das Feld Region passt nicht zur Region des Buckets.
Invalid credentials Der Access Key oder das Secret ist falsch.
Insufficient permissions Der Key funktioniert, aber die Policy erlaubt s3:ListBucket auf diesem Bucket nicht.
Bucket not found Tippfehler im Bucket-Namen, oder der Endpoint zeigt auf die falsche Region.
Missing CORS rule Download-Links sind an, aber der Bucket hat keine CORS-Regel für https://shareboxed.app.
Server errored Der Storage-Dienst selbst hat versagt. Versuch es noch einmal und sieh auf der Statusseite des Anbieters nach.

Zwei weitere, die erst später auftauchen:

  • Der Test läuft durch, Uploads scheitern mit Check the access key, the secret and its permissions: Test Connection liest immer nur, es kann einen Key also nicht erkennen, der zwar auflisten, aber nicht schreiben darf. Prüfe, ob das zweite Statement in der Policy arn:aws:s3:::my-uploads/* nennt, mit dem /* und demselben Bucket-Namen wie das erste. Bei R2 ist die übliche Ursache ein Token, das als Object Read only erstellt wurde, bei B2 ein Key ohne writeFiles.
  • Ein Empfänger sieht "Connection refused, please ask the sender to check on the permissions": Die CORS-Regel fehlt oder erlaubt kein GET von https://shareboxed.app. Wer "Unable to access these files" sieht, hat eine Datei angeklickt, die die Aufräumregel aus Schritt 5 schon gelöscht hat. Der Link selbst ist in Ordnung.