2014-07-22 03:25:31 +00:00
S3Proxy
=======
2014-08-18 07:17:48 +00:00
S3Proxy allows applications using the
[S3 API ](https://en.wikipedia.org/wiki/Amazon_S3#S3_API_and_competing_services )
2015-11-11 01:12:16 +00:00
to access other storage backends,
e.g., local file system, Google Cloud Storage, Microsoft Azure, OpenStack Swift.
2014-07-22 03:25:31 +00:00
Installation
------------
2014-08-12 08:30:17 +00:00
Users can [download releases ](https://github.com/andrewgaul/s3proxy/releases )
from GitHub. One can also build the project by running `mvn package` which
produces a binary at `target/s3proxy` . S3Proxy requires Java 7 to run.
2014-07-22 03:25:31 +00:00
Examples
--------
2014-08-15 19:41:28 +00:00
Linux and Mac OS X users can run S3Proxy via the executable jar:
2014-07-22 03:25:31 +00:00
```
2014-08-12 08:30:17 +00:00
chmod +x s3proxy
2014-07-22 03:25:31 +00:00
s3proxy --properties s3proxy.conf
2014-08-12 08:30:17 +00:00
```
Windows users must explicitly invoke java:
```
2014-07-22 03:25:31 +00:00
java -jar s3proxy --properties s3proxy.conf
```
2014-08-12 08:30:17 +00:00
Users can configure S3Proxy via a properties file. An example using Rackspace
CloudFiles (based on OpenStack Swift) as the backing store:
2014-07-22 03:25:31 +00:00
2014-08-12 08:30:17 +00:00
```
s3proxy.endpoint=http://127.0.0.1:8080
s3proxy.authorization=aws-v2
s3proxy.identity=local-identity
s3proxy.credential=local-credential
2014-10-27 20:49:54 +00:00
jclouds.provider=rackspace-cloudfiles-us
2014-08-12 08:30:17 +00:00
jclouds.identity=remote-identity
jclouds.credential=remote-credential
```
Another example using the local file system as the backing store with anonymous
access:
2014-07-22 03:25:31 +00:00
```
2014-08-12 08:30:17 +00:00
s3proxy.authorization=none
s3proxy.endpoint=http://127.0.0.1:8080
jclouds.provider=filesystem
2014-07-22 03:25:31 +00:00
jclouds.identity=identity
jclouds.credential=credential
2014-08-12 08:30:17 +00:00
jclouds.filesystem.basedir=/tmp
2014-07-22 03:25:31 +00:00
```
2015-05-13 22:04:42 +00:00
S3Proxy can listen on HTTPS by setting the `secure-endpoint` and
2014-07-26 20:19:43 +00:00
[configuring a keystore ](http://wiki.eclipse.org/Jetty/Howto/Configure_SSL#Generating_Keys_and_Certificates_with_JDK_keytool ).
An example:
```
2015-05-13 22:04:42 +00:00
s3proxy.secure-endpoint=https://127.0.0.1:8080
2014-07-26 20:19:43 +00:00
s3proxy.keystore-path=keystore.jks
s3proxy.keystore-password=password
```
2015-05-09 01:13:44 +00:00
To setup the keystore, do
```
$ keytool -keystore keystore.jks -alias aws -genkey -keyalg RSA
```
2015-05-09 01:14:47 +00:00
Use `*.s3.amazonaws.com` as the `CN` if you wish to proxy
2015-05-09 01:12:26 +00:00
access to Amazon S3 itself. Applications will reject the self-signed
certificate, unless you import it to the application's trusted
store. If the application is written in Java, you can do:
```
$ keytool -exportcert -keystore keystore.jks -alias aws -rfc > aws.crt
$ keytool -keystore $JAVA_HOME/jre/lib/security/cacerts -import -alias aws -file aws.crt -trustcacerts
```
2014-08-18 06:37:10 +00:00
Users can also set other Java,
[jclouds ](https://github.com/jclouds/jclouds/blob/master/core/src/main/java/org/jclouds/Constants.java ),
and [S3Proxy ](https://github.com/andrewgaul/s3proxy/blob/master/src/main/java/org/gaul/s3proxy/S3ProxyConstants.java )
properties.
2014-07-22 03:25:31 +00:00
2015-11-11 01:12:16 +00:00
Supported storage backends
--------------------------
* atmos
* aws-s3
* azureblob
* filesystem (on-disk storage)
* google-cloud-storage
* hpcloud-objectstorage
* openstack-swift
* rackspace-cloudfiles-uk and rackspace-cloudfiles-us
* s3
* swift and swift-keystone (legacy)
* transient (in-memory storage)
2014-07-22 03:25:31 +00:00
Limitations
-----------
S3Proxy does not support:
2015-08-03 00:11:31 +00:00
* POST uploads, see [#73 ](https://github.com/andrewgaul/s3proxy/issues/73 )
* object metadata with filesystem provider on Mac OS X, see [JDK-8030048 ](https://bugs.openjdk.java.net/browse/JDK-8030048 )
2014-08-28 18:41:56 +00:00
* object server-side encryption
2015-08-03 00:11:31 +00:00
* object versioning, see [#74 ](https://github.com/andrewgaul/s3proxy/issues/74 )
2015-04-24 00:57:51 +00:00
* XML ACLs
2014-07-22 03:25:31 +00:00
2015-11-11 01:12:16 +00:00
S3Proxy emulates the following operations:
* multi-part uploads, see [#2 ](https://github.com/andrewgaul/s3proxy/issues/2 )
* copy objects, see [#46 ](https://github.com/andrewgaul/s3proxy/issues/46 )
2014-07-22 03:25:31 +00:00
References
----------
2015-05-13 18:44:49 +00:00
* Apache [jclouds ](http://jclouds.apache.org/ ) provides object store support for S3Proxy
* Ceph [s3-tests ](https://github.com/ceph/s3-tests ) help maintain and improve compatibility with the S3 API
2015-11-11 00:53:48 +00:00
* [fake-s3 ](https://github.com/jubos/fake-s3 ) and [S3 ninja ](https://github.com/scireum/s3ninja ) provide functionality similar to S3Proxy when using the filesystem provider
2015-05-13 18:44:49 +00:00
* Another project named [s3proxy ](https://github.com/abustany/s3proxy ) provides HTTP access to non-S3-aware applications
2015-05-13 18:46:38 +00:00
* [SwiftProxy ](https://github.com/bouncestorage/swiftproxy ) provides similar functionality for the OpenStack Swift API
2014-07-22 03:25:31 +00:00
License
-------
2015-03-22 06:48:57 +00:00
Copyright (C) 2014-2015 Andrew Gaul
2014-07-22 03:25:31 +00:00
Licensed under the Apache License, Version 2.0