Eigene Domain mit S3-Proxy

Last change on 2025-04-25 • Created on 2025-04-25 • ID: ST-BB82D

Aktuell ist es nicht möglich, einem Bucket einen eigenen Domainnamen zuzuweisen. Wenn du für deinen Bucket dennoch eine eigene Domain verwenden möchtest, kannst du manuell eine Weiterleitung einrichten.

In diesem How-To wird erklärt, wie man eine Weiterleitung über das Docker Image oxynozeta/s3-proxy einrichten kann. Genauere Informationen über S3-Proxy findest du im dazugehörigen GitHub-Repository.

Voraussetzungen:

  • Eine eigene Domain
  • Ein TLS/SSL-Zertifikat für die eigene Domain (optional)
  • Einen Server mit öffentlicher IP-Adresse
  • Einen Bucket mit Daten (kann private Zugriffsrechte besitzen)

Wichtig: Wenn du deine eigene Domain aufrufst, verwendet der S3-Proxy deine S3-Zugangsdaten, um auf die Daten in deinem Bucket zuzugreifen. Dadurch werden alle Bucket-Daten über deine eigene Domain öffentlich zugänglich, auch wenn die Sichtbarkeit des Buckets selbst auf "privat" gesetzt ist. Um die Sicherheit zu erhöhen, erklärt dieses How-To zusätzlich, wie du eine einfache Authentifizierung einrichten kannst. Wenn du das tust, fragt der S3-Proxy immer erst nach einem Benutzernamen und Passwort, bevor er dir die angeforderten Daten anzeigt.

Wenn du am Ende deine Domain aufrufst, sollte der Server alle Anfragen direkt an deinen Bucket weiterleiten.


  1. DNS-Eintrag erstellen

    Erstelle einen neuen DNS Record. Die Domain muss auf die IP-Adresse des Servers verweisen, auf dem S3-Proxy eingerichtet wird.

    Beachte, dass es mehrere Stunden dauern kann, bis die Änderung vollständig übernommen wurde.


  1. Docker installieren

    Verbinde dich nun mit dem Server und prüfe, ob Docker bereits installiert ist. Wenn nicht, installiere es jetzt.

    Die Installationsschritte findest du in der offiziellen Docker Dokumentation: Install Docker Engine


  1. S3-Proxy einrichten

    Erstelle einen neuen Ordner für die S3-Proxy-Dateien:

    mkdir s3-proxy

    Erstelle in dem neuen Ordner folgende Dateien:

    s3-proxy/
    ├── .env
    └── conf/
        ├── server.yaml
        ├── target.yaml
        └── auth.yaml

    Füge nun folgende Inhalte ein:

    • .env

      Ersetze <your_access_key> und <your_secret_key> mit deinen S3-Zugangsdaten und <password_for_authentication> mit einem Passwort deiner Wahl, um über den S3-Proxy auf die Dateien zugreifen zu können.

      ACCESS_KEY=<your_access_key>
      SECRET_KEY=<your_secret_key>
      PASSWORD=<password_for_authentication>

    • conf/server.yaml

      server:
        listenAddr: "0.0.0.0"
        port: 8080
        ssl:
           # Wenn du ein TLS/SSL-Zertifikat besitzt, ersetze "false" mit "true" und entferne das # Symbol an Anfang der Zertifikat-Zeilen
          enabled: false
          #certificates:
          # '/domain/certs' wird der Pfad innerhalb des Docker Containers.
          #  - certificateUrl: file:///domain/certs/fullchain.pem
          #    privateKeyUrl: file:///domain/certs/privkey.pem

    • conf/target.yaml

      Ersetze <bucket_name> und <region> mit dem Namen und der Region deines Buckets und <user_name> mit einem Benutzernamen für die Authentifizierung mit S3-Proxy.

      targets:
        <bucket_name>:
          mount:
            path:
               # Wenn du / festlegst, kannst du auf die Dateien in deinem Bucket über example.com/<file_name> zugreifen.
               # Wenn du einen Pfad, wie z.B. /<bucket_name>/ festlegst, kannst du auf die Dateien in deinem Bucket über example.com/<bucket_name>/<file_name> zugreifen.
              - /
           # In dem "resources"-Abschnitt kannst du eine einfache Authentifizierung einrichten.
           # Wenn du den Pfad /* festlegst, müssen für ALLE Pfade die Zugangsdaten angegeben werden.
          resources:
            - path: /*
              provider: provider1
              basic:
                credentials:
                  - user: <user_name>
                    password:
                      env: PASSWORD
          bucket:
            name: <bucket_name>
            region: <region>
            s3Endpoint: https://<region>.your-objectstorage.com
            disableSSL: false
            # Dieses Beispiel verwendet "env". Mehr erfahren: https://oxyno-zeta.github.io/s3-proxy/configuration/structure/#credentialconfiguration
            credentials:
              accessKey:
                env: ACCESS_KEY
              secretKey:
                env: SECRET_KEY

    • conf/auth.yaml

      Das folgende Beispiel verwendet eine einfache Authentifizierung. Für mehr Sicherheit kannst du z.B. auch Oauth2-proxy einrichten.

      authProviders:
        basic:
          provider1:
            realm: My Basic Auth Realm

  1. Docker-Container starten

    Bevor du den Docker-Befehl ausführst, navigiere in den Ordner, der die .env-Datei und den conf-Ordner enthält. Die Variable $PWD wird automatisch mit dem aktuellen Arbeitsverzeichnis ersetzt.

    • Ohne SSL-Zertifikat:

      docker run -d --name s3-proxy \
                 -p 80:8080 \
                 -p 9090:9090 \
                 -v $PWD/conf:/proxy/conf \
                 --env-file $PWD/.env \
                 oxynozeta/s3-proxy

    • Mit SSL-Zertifikat:

      Ersetze /etc/letsencrypt/live/example.com mit dem lokalen Pfad zu deinen Zertifikatdateien.

      docker run -d --name s3-proxy \
                 -p 443:8080 \
                 -p 9090:9090 \
                 -v $PWD/conf:/proxy/conf \
                 -v /etc/letsencrypt/live/example.com:/domain/certs \
                 --env-file $PWD/.env \
                 oxynozeta/s3-proxy

Wenn du nun über deine Domain auf eine Datei zugreifst, sollte die Verbindung vom Server automatisch auf den Bucket weitergeleitet werden.