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.
-
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.
-
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
-
S3-Proxy einrichten
Erstelle einen neuen Ordner für die S3-Proxy-Dateien:
mkdir s3-proxyErstelle in dem neuen Ordner folgende Dateien:
s3-proxy/ ├── .env └── conf/ ├── server.yaml ├── target.yaml └── auth.yamlFüge nun folgende Inhalte ein:
-
.envErsetze
<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.yamlserver: 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.yamlErsetze
<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.yamlDas 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
-
-
Docker-Container starten
Bevor du den Docker-Befehl ausführst, navigiere in den Ordner, der die
.env-Datei und denconf-Ordner enthält. Die Variable$PWDwird 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.commit 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.