@Override
    public PageSet<? extends StorageMetadata> list() {
        PageSet<? extends StorageMetadata> upstream = this.delegate().list();
        var results = new ImmutableList.Builder<StorageMetadata>();
        for (StorageMetadata sm : upstream) {
            if (aliases.containsValue(sm.getName())) {
                MutableStorageMetadata bucketAlias =
                        new MutableStorageMetadataImpl();
                bucketAlias.setName(aliases.inverse().get(sm.getName()));
                bucketAlias.setCreationDate(sm.getCreationDate());
                bucketAlias.setETag(sm.getETag());
                bucketAlias.setId(sm.getProviderId());
                bucketAlias.setLastModified(sm.getLastModified());
                bucketAlias.setLocation(sm.getLocation());
                bucketAlias.setSize(sm.getSize());
                bucketAlias.setTier(sm.getTier());
                bucketAlias.setType(sm.getType());
                // TODO: the URI should be rewritten to use the alias
                bucketAlias.setUri(sm.getUri());
                bucketAlias.setUserMetadata(sm.getUserMetadata());
                results.add(bucketAlias);
            } else {
                results.add(sm);
            }
        }
        return new PageSetImpl<>(results.build(), upstream.getNextMarker());
    }
This class implements a middleware to alias buckets to a different name.
The aliases are configured as:
  s3proxy.alias-blobstore.&lt;alias name&gt; = &lt;backend bucket&gt;

The aliases appear in bucket listings if the configured
backend buckets are present. Requests for all other buckets are unaffected.
src/main/java/org/gaul/s3proxy/AliasBlobStore.java