Aktuell ist es nicht möglich, einem Bucket einen eigenen Domainnamen zuzuweisen. Wenn Sie für Ihren Bucket dennoch eine eigene Domain verwenden möchten, können Sie 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, finden Sie 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 Sie Ihre eigene Domain aufrufen, verwendet der S3-Proxy Ihre S3-Zugangsdaten, um auf die Daten in Ihrem Bucket zuzugreifen. Dadurch werden alle Bucket-Daten über Ihre eigene Domain öffentlich zugänglich, selbst wenn die Sichtbarkeit des Buckets selbst auf "privat" gesetzt ist. Um die Sicherheit zu erhöhen, erklärt dieses How-To zusätzlich, wie man eine einfache Authentifizierung einrichtet. Damit fragt der S3-Proxy immer erst nach einem Benutzernamen und Passwort, bevor er die angeforderten Daten anzeigt.
Am Ende dieses How-Tos sollte der Server alle Anfragen an Ihre Domain direkt an den Bucket weiterleiten.
-
DNS-Eintrag erstellen
Erstellen Sie einen neuen DNS Record. Die Domain muss auf die IP-Adresse des Servers verweisen, auf dem S3-Proxy eingerichtet wird.
Beachten Sie, dass es mehrere Stunden dauern kann, bis die Änderung vollständig übernommen wurde.
-
Docker installieren
Verbinden Sie sich nun mit dem Server und prüfen Sie, ob Docker bereits installiert ist. Wenn nicht, installieren Sie es jetzt.
Die Installationsschritte finden Sie in der offiziellen Docker Dokumentation: Install Docker Engine
-
S3-Proxy einrichten
Erstellen Sie einen neuen Ordner für die S3-Proxy-Dateien:
mkdir s3-proxy
Erstellen Sie in dem neuen Ordner folgende Dateien:
s3-proxy/ ├── .env └── conf/ ├── server.yaml ├── target.yaml └── auth.yaml
Fügen Sie nun folgende Inhalte ein:
-
.env
Ersetzen Sie
<your_access_key>
und<your_secret_key>
mit Ihren S3-Zugangsdaten und<password_for_authentication>
mit einem Passwort Ihrer 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 Sie ein TLS/SSL-Zertifikat besitzen, ersetzen Sie "false" mit "true" und entfernen Sie 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
Ersetzen Sie
<bucket_name>
und<region>
mit dem Namen und der Region Ihres Buckets und<user_name>
mit einem Benutzernamen für die Authentifizierung mit S3-Proxy.targets: <bucket_name>: mount: path: # Wenn sie / festlegen, können Sie auf die Dateien in Ihrem Bucket über example.com/<file_name> zugreifen. # Wenn sie einen Pfad, wie z.B. /<bucket_name>/ festlegen, können Sie auf die Dateien in Ihrem Bucket über example.com/<bucket_name>/<file_name> zugreifen. - / # In dem "resources"-Abschnitt können Sie eine einfache Authentifizierung einrichten. # Wenn sie den Pfad /* festlegen, 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, können Sie z.B. auch Oauth2-proxy einrichten.
authProviders: basic: provider1: realm: My Basic Auth Realm
-
-
Docker-Container starten
Bevor Sie den Docker-Befehl ausführen, navigieren Sie in den Ordner, der die
.env
-Datei und denconf
-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:
Ersetzen Sie
/etc/letsencrypt/live/example.com
mit dem lokalen Pfad zu Ihren 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 Sie nun über Ihre Domain auf eine Datei zugreifen, sollte die Verbindung vom Server automatisch auf den Bucket weitergeleitet werden.