diff --git a/README.md b/README.md index c99e03d4e..129073d9e 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ directories to and from different cloud storage providers. - Internet Archive [:page_facing_up:](https://rclone.org/internetarchive/) - Jottacloud [:page_facing_up:](https://rclone.org/jottacloud/) - IBM COS S3 [:page_facing_up:](https://rclone.org/s3/#ibm-cos-s3) +- Intercolo Object Storage [:page_facing_up:](https://rclone.org/s3/#intercolo) - IONOS Cloud [:page_facing_up:](https://rclone.org/s3/#ionos) - Koofr [:page_facing_up:](https://rclone.org/koofr/) - Leviia Object Storage [:page_facing_up:](https://rclone.org/s3/#leviia) diff --git a/backend/s3/s3.go b/backend/s3/s3.go index 71967f123..9d2b8a1ad 100644 --- a/backend/s3/s3.go +++ b/backend/s3/s3.go @@ -119,6 +119,9 @@ var providerOption = fs.Option{ }, { Value: "IDrive", Help: "IDrive e2", + }, { + Value: "Intercolo", + Help: "Intercolo Object Storage", }, { Value: "IONOS", Help: "IONOS Cloud", @@ -504,6 +507,14 @@ func init() { Value: "us-east-1", Help: "Indore, Madhya Pradesh, India", }}, + }, { + Name: "region", + Help: "Region where your bucket will be created and your data stored.\n", + Provider: "Intercolo", + Examples: []fs.OptionExample{{ + Value: "de-fra", + Help: "Frankfurt, Germany", + }}, }, { Name: "region", Help: "Region where your bucket will be created and your data stored.\n", @@ -643,7 +654,7 @@ func init() { }, { Name: "region", Help: "Region to connect to.\n\nLeave blank if you are using an S3 clone and you don't have a region.", - Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,FlashBlade,IONOS,Petabox,Liara,Linode,Magalu,OVHcloud,Qiniu,RackCorp,Scaleway,Selectel,Storj,Synology,TencentCOS,HuaweiOBS,IDrive,Mega,Zata", + Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,FlashBlade,Intercolo,IONOS,Petabox,Liara,Linode,Magalu,OVHcloud,Qiniu,RackCorp,Scaleway,Selectel,Storj,Synology,TencentCOS,HuaweiOBS,IDrive,Mega,Zata", Examples: []fs.OptionExample{{ Value: "", Help: "Use this if unsure.\nWill use v4 signatures and an empty region.", @@ -954,6 +965,14 @@ func init() { Value: "s3.private.sng01.cloud-object-storage.appdomain.cloud", Help: "Singapore Single Site Private Endpoint", }}, + }, { + Name: "endpoint", + Help: "Endpoint for Intercolo Object Storage.", + Provider: "Intercolo", + Examples: []fs.OptionExample{{ + Value: "de-fra.i3storage.com", + Help: "Frankfurt, Germany", + }}, }, { Name: "endpoint", Help: "Endpoint for IONOS S3 Object Storage.\n\nSpecify the endpoint from the same region.", @@ -1532,7 +1551,7 @@ func init() { }, { Name: "endpoint", Help: "Endpoint for S3 API.\n\nRequired when using an S3 clone.", - Provider: "!AWS,ArvanCloud,IBMCOS,IDrive,IONOS,TencentCOS,HuaweiOBS,Alibaba,ChinaMobile,GCS,Liara,Linode,LyveCloud,Magalu,OVHcloud,Scaleway,Selectel,StackPath,Storj,Synology,RackCorp,Qiniu,Petabox,Zata", + Provider: "!AWS,ArvanCloud,IBMCOS,IDrive,Intercolo,IONOS,TencentCOS,HuaweiOBS,Alibaba,ChinaMobile,GCS,Liara,Linode,LyveCloud,Magalu,OVHcloud,Scaleway,Selectel,StackPath,Storj,Synology,RackCorp,Qiniu,Petabox,Zata", Examples: []fs.OptionExample{{ Value: "objects-us-east-1.dream.io", Help: "Dream Objects endpoint", @@ -2067,7 +2086,7 @@ func init() { }, { Name: "location_constraint", Help: "Location constraint - must be set to match the Region.\n\nLeave blank if not sure. Used when creating buckets only.", - Provider: "!AWS,Alibaba,ArvanCloud,HuaweiOBS,ChinaMobile,Cloudflare,FlashBlade,IBMCOS,IDrive,IONOS,Leviia,Liara,Linode,Magalu,Outscale,OVHcloud,Qiniu,RackCorp,Scaleway,Selectel,StackPath,Storj,TencentCOS,Petabox,Mega", + Provider: "!AWS,Alibaba,ArvanCloud,HuaweiOBS,ChinaMobile,Cloudflare,FlashBlade,IBMCOS,IDrive,Intercolo,IONOS,Leviia,Liara,Linode,Magalu,Outscale,OVHcloud,Qiniu,RackCorp,Scaleway,Selectel,StackPath,Storj,TencentCOS,Petabox,Mega", }, { Name: "acl", Help: `Canned ACL used when creating buckets and storing or copying objects. @@ -3677,6 +3696,9 @@ func setQuirks(opt *Options) { case "IDrive": virtualHostStyle = false useAlreadyExists = false // untested + case "Intercolo": + // no quirks + useUnsignedPayload = false // Intercolo has trailer support case "IONOS": // listObjectsV2 supported - https://api.ionos.com/docs/s3/#Basic-Operations-get-Bucket-list-type-2 virtualHostStyle = false diff --git a/docs/content/_index.md b/docs/content/_index.md index e9ecff530..ab3ea026d 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -142,6 +142,7 @@ WebDAV or S3, that work out of the box.) {{< provider name="Jottacloud" home="https://www.jottacloud.com/en/" config="/jottacloud/" >}} {{< provider name="IBM COS S3" home="http://www.ibm.com/cloud/object-storage" config="/s3/#ibm-cos-s3" >}} {{< provider name="IDrive e2" home="https://www.idrive.com/e2/?refer=rclone" config="/s3/#idrive-e2" >}} +{{< provider name="Intercolo Object Storage" home="https://intercolo.de/object-storage" config="/s3/#intercolo" >}} {{< provider name="IONOS Cloud" home="https://cloud.ionos.com/storage/object-storage" config="/s3/#ionos" >}} {{< provider name="Koofr" home="https://koofr.eu/" config="/koofr/" >}} {{< provider name="Leviia Object Storage" home="https://www.leviia.com/object-storage" config="/s3/#leviia" >}} diff --git a/docs/content/s3.md b/docs/content/s3.md index 8542c2d3c..4dd9b558e 100644 --- a/docs/content/s3.md +++ b/docs/content/s3.md @@ -25,6 +25,7 @@ The S3 backend can be used with a number of different providers: {{< provider name="Huawei OBS" home="https://www.huaweicloud.com/intl/en-us/product/obs.html" config="/s3/#huawei-obs" >}} {{< provider name="IBM COS S3" home="http://www.ibm.com/cloud/object-storage" config="/s3/#ibm-cos-s3" >}} {{< provider name="IDrive e2" home="https://www.idrive.com/e2/?refer=rclone" config="/s3/#idrive-e2" >}} +{{< provider name="Intercolo Object Storage" home="https://intercolo.de/object-storage" config="/s3/#intercolo" >}} {{< provider name="IONOS Cloud" home="https://cloud.ionos.com/storage/object-storage" config="/s3/#ionos" >}} {{< provider name="Leviia Object Storage" home="https://www.leviia.com/object-storage/" config="/s3/#leviia" >}} {{< provider name="Liara Object Storage" home="https://liara.ir/landing/object-storage" config="/s3/#liara-cloud" >}} @@ -3831,6 +3832,133 @@ d) Delete this remote y/e/d> y ``` +### Intercolo Object Storage {#intercolo} +[Intercolo Object Storage](https://intercolo.de/object-storage) offers +GDPR-compliant, transparently priced, S3-compatible +cloud storage hosted in Frankfurt, Germany. + +Here's an example of making a configuration for Intercolo. + +First run: +``` +rclone config +``` +This will guide you through an interactive setup process. +``` +No remotes found, make a new one? +n) New remote +s) Set configuration password +q) Quit config +n/s/q> n + +Enter name for new remote. +name> intercolo + +Option Storage. +Type of storage to configure. +Choose a number from below, or type in your own value. +[snip] + xx / Amazon S3 Compliant Storage Providers including AWS, ... + \ (s3) +[snip] +Storage> s3 + +Option provider. +Choose your S3 provider. +Choose a number from below, or type in your own value. +Press Enter to leave empty. +[snip] +xx / Intercolo Object Storage + \ (Intercolo) +[snip] +provider> Intercolo + +Option env_auth. +Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars). +Only applies if access_key_id and secret_access_key is blank. +Choose a number from below, or type in your own boolean value (true or false). +Press Enter for the default (false). + 1 / Enter AWS credentials in the next step. + \ (false) + 2 / Get AWS credentials from the environment (env vars or IAM). + \ (true) +env_auth> false + +Option access_key_id. +AWS Access Key ID. +Leave blank for anonymous access or runtime credentials. +Enter a value. Press Enter to leave empty. +access_key_id> ACCESS_KEY + +Option secret_access_key. +AWS Secret Access Key (password). +Leave blank for anonymous access or runtime credentials. +Enter a value. Press Enter to leave empty. +secret_access_key> SECRET_KEY + +Option region. +Region where your bucket will be created and your data stored. +Choose a number from below, or type in your own value. +Press Enter to leave empty. + 1 / Frankfurt, Germany + \ (de-fra) +region> 1 + +Option endpoint. +Endpoint for Intercolo Object Storage. +Choose a number from below, or type in your own value. +Press Enter to leave empty. + 1 / Frankfurt, Germany + \ (de-fra.i3storage.com) +endpoint> 1 + +Option acl. +Canned ACL used when creating buckets and storing or copying objects. +This ACL is used for creating objects and if bucket_acl isn't set, for creating buckets too. +For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl +Note that this ACL is applied when server-side copying objects as S3 +doesn't copy the ACL from the source but rather writes a fresh one. +If the acl is an empty string then no X-Amz-Acl: header is added and +the default (private) will be used. +Choose a number from below, or type in your own value. +Press Enter to leave empty. + / Owner gets FULL_CONTROL. + 1 | No one else has access rights (default). + \ (private) + [snip] +acl> + +Edit advanced config? +y) Yes +n) No (default) +y/n> n + +Configuration complete. +Options: +- type: s3 +- provider: Intercolo +- access_key_id: ACCESS_KEY +- secret_access_key: SECRET_KEY +- region: de-fra +- endpoint: de-fra.i3storage.com +Keep this "intercolo" remote? +y) Yes this is OK (default) +e) Edit this remote +d) Delete this remote +y/e/d> y +``` + +This will leave the config file looking like this. +``` +[intercolo] +type = s3 +provider = Intercolo +access_key_id = ACCESS_KEY +secret_access_key = SECRET_KEY +region = de-fra +endpoint = de-fra.i3storage.com +``` + ### IONOS Cloud {#ionos} [IONOS S3 Object Storage](https://cloud.ionos.com/storage/object-storage) is a service offered by IONOS for storing and accessing unstructured data.