{"id":22685818,"url":"https://github.com/hellodword/s3-all","last_synced_at":"2026-02-12T12:31:23.255Z","repository":{"id":265801535,"uuid":"815782815","full_name":"hellodword/s3-all","owner":"hellodword","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-17T12:09:06.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-01T06:50:13.694Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hellodword.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-16T06:18:42.000Z","updated_at":"2024-06-17T12:09:09.000Z","dependencies_parsed_at":"2024-12-03T09:15:07.273Z","dependency_job_id":null,"html_url":"https://github.com/hellodword/s3-all","commit_stats":null,"previous_names":["hellodword/s3-all"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hellodword/s3-all","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellodword%2Fs3-all","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellodword%2Fs3-all/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellodword%2Fs3-all/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellodword%2Fs3-all/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hellodword","download_url":"https://codeload.github.com/hellodword/s3-all/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellodword%2Fs3-all/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273553635,"owners_count":25126172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-09T22:17:44.663Z","updated_at":"2026-02-12T12:31:18.234Z","avatar_url":"https://github.com/hellodword.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# s3-all\n\n## Providers\n\n| Provider                | S3-compatible | IAM alike | IPv6 | restic | rclone | Path-Style | Class-A | Class-B |\n| ----------------------- | ------------- | --------- | ---- | ------ | ------ | ---------- | ------- | ------- |\n| minio                   | Y             | Y         |      | Y      | Y      | Y          |         |         |\n| AWS S3                  | Y             | Y         |      | Y      | Y      | Y          |         |         |\n| GCP cloud storage       |               |           |      |        |        |            |         |         |\n| Azure                   |               |           |      |        |        |            |         |         |\n| Backblaze B2            |               | Y         |      | Y      | Y      | Y          |         |         |\n| Cloudflare R2           | Y             | Y         |      | Y      | Y      | Y          |         |         |\n| Scaleway Object Storage | Y             | Y         |      | Y      | Y      | Y          |         |         |\n| IDrive e2               | Y             | Y         |      | Y      | Y      |            |         |         |\n| Telnyx Cloud Storage    | Y             | N         |      | Y      | Y      |            |         |         |\n| Tencent COS             | Y             | Y         |      | Y      | Y      | N          |         |         |\n| Aliyun OSS              | Y             | Y         |      | Y      | Y      | Y          |         |         |\n\n### minio\n\n- https://github.com/minio/minio\n\n```yml\nversion: \"3.8\"\n\n# docker compose exec minio sh -c 'mc config host add minio http://127.0.0.1:9000 admin password \u0026\u0026 mc admin trace minio'\nservices:\n  minio:\n    hostname: minio\n    image: minio/minio:latest\n    restart: \"no\"\n    ports:\n      - \"9000:9000\"\n      - \"127.0.0.1:9001:9001\"\n    volumes:\n      - ./data/minio:/data\n    command: server /data --console-address \":9001\"\n    environment:\n      - MINIO_ROOT_USER=admin\n      - MINIO_ROOT_PASSWORD=password\n    healthcheck:\n      test:\n        [\n          \"CMD\",\n          \"bash\",\n          \"-c\",\n          \"[ -f .health ] || (mc config host add minio http://127.0.0.1:9000 $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD \u0026\u0026 mc ping minio -c 1 \u0026\u0026 touch .health)\",\n        ]\n      interval: 2s\n      timeout: 200s\n      retries: 100\n      start_period: 0s\n\n  trace:\n    depends_on:\n      minio:\n        condition: service_healthy\n    network_mode: \"service:minio\"\n    image: minio/minio:latest\n    restart: \"no\"\n    entrypoint: \"/usr/bin/env\"\n    command: \u003e\n      bash -x -c 'mc config host add minio http://127.0.0.1:9000 $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD \u0026\u0026 mc ping minio -x \u0026\u0026 mc admin trace minio'\n    environment:\n      - MINIO_ROOT_USER=admin\n      - MINIO_ROOT_PASSWORD=password\n```\n\n### AWS S3\n\n- https://aws.amazon.com/s3/\n\n1. [Create bucket](https://s3.console.aws.amazon.com/s3/bucket/create?region=us-east-1) , no ACLs, no Public Access, no Bucket Versioning, no Object Lock\n2. [Create Policy](https://us-east-1.console.aws.amazon.com/iam/home#/policies$new?step=edit) - JSON\n\n\u003e `s3:DeleteObject` is required for `restic forget --prune`\n\n```json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:PutObject\",\n        \"s3:PutObjectAcl\",\n        \"s3:GetObjectAcl\",\n        \"s3:GetObject\"\n      ],\n      \"Resource\": [\"arn:aws:s3:::mybucket\", \"arn:aws:s3:::mybucket/*\"]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": \"s3:DeleteObject\",\n      \"Resource\": \"arn:aws:s3:::mybucket/locks/*\"\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\"s3:CreateBucket\", \"s3:GetBucketLocation\", \"s3:ListBucket\"],\n      \"Resource\": \"arn:aws:s3:::mybucket\"\n    }\n  ]\n}\n```\n\n3. [IAM - Add User](https://console.aws.amazon.com/iam/home#/users$new?step=details) : `Attach policies directly`, `Create access key - Programmaticaccess` - `Use a permissions boundary to control the maximum userpermissions`\n\n```sh\nRESTIC_REPOSITORY=s3:s3.amazonaws.com/mybucket\nAWS_ACCESS_KEY_ID=***\nAWS_SECRET_ACCESS_KEY=***\nAWS_DEFAULT_REGION=***\n```\n\n### GCP cloud storage\n\n### Azure\n\n### Backblaze B2\n\n- https://www.backblaze.com/docs/cloud-storage-integrate-restic-with-backblaze-b2\n- restic: https://github.com/restic/restic/blob/267cd62ae43124c80b3bed0106695eff6f7585dd/doc/030_preparing_a_new_repo.rst#backblaze-b2\n\n1. [Create Bucket](https://secure.backblaze.com/b2_buckets.htm) , Private, no Encryption, no Object Lock\n2. **important** `Lifecycle Settings` - `Keep only the last version of the file`\n3. [Add a New Application Key](https://secure.backblaze.com/app_keys.htm) : `Read and Write`\n\n```sh\nRESTIC_REPOSITORY=b2:mybucket\nB2_ACCOUNT_ID=***\nB2_ACCOUNT_KEY=***\n```\n\n### Cloudflare R2\n\n- https://developers.cloudflare.com/r2/\n- https://github.com/cloudflare/cloudflare-docs/commit/f4386f52f42359b48c531a1fc47cbc6cfbbcfa35\n\n1. [Create Bucket](https://dash.cloudflare.com/?to=/:account/r2/new)\n2. [Create Token](https://dash.cloudflare.com/?to=/:account/r2/api-tokens)\n\n```sh\nRESTIC_REPOSITORY=s3:https://myendpoint.r2.cloudflarestorage.com/mybucket\nAWS_ACCESS_KEY_ID=***\nAWS_SECRET_ACCESS_KEY=***\n```\n\n### Scaleway Object Storage\n\n- https://www.scaleway.com/en/docs/storage/object/\n- https://www.scaleway.com/en/docs/tutorials/restic-s3-backup/\n- https://status.scaleway.com/uptime/6q1d32x121dx\n\n1. Create a Project, don't use the `default`, switch to the new Project\n2. [Create a Bucket](https://console.scaleway.com/object-storage/buckets/create) , Private, no Bucket versioning\n3. [Create a Policy](https://console.scaleway.com/iam/policies/create) , `Scope` - `Access to resources` - select the new Project, `Validate` - `ObjectStorageObjectsDelete ObjectStorageObjectsRead ObjectStorageObjectsWrite ObjectStorageReadOnly`\n4. [Create a Application](https://console.scaleway.com/iam/applications/create) , select the policy, `API keys` - `Generate an API key`\n\n### IDrive e2\n\n- https://github.com/restic/restic/pull/4279/files\n- https://status.idrivecompute.com/\n\n1. [Create Bucket](https://app.idrivee2.com/buckets) , no Versioning, no Object Locking\n2. [Create Access Key](https://app.idrivee2.com/access-key)\n\n```sh\nRESTIC_REPOSITORY=\"s3:https://\u003cthe endpoint\u003e/mybucket\"\nAWS_ACCESS_KEY_ID=***\nAWS_SECRET_ACCESS_KEY=***\n```\n\n### Telnyx Cloud Storage\n\n- https://support.telnyx.com/en/articles/8047928-use-dragondisk-with-telnyx-storage\n  \u003e the secret key is not used by Telnyx Storage, you can type out anything you want here\n\n1. [Create Bucket](https://portal.telnyx.com/#/app/next/storage/buckets/create) , no Bucket Versioning\n2. [Create API Key](https://portal.telnyx.com/#/app/next/api-keys)\n\n```sh\nRESTIC_REPOSITORY=\"s3:https://us-central-1.telnyxstorage.com/mybucket\"\nAWS_ACCESS_KEY_ID=***\nAWS_SECRET_ACCESS_KEY=anything\n```\n\n### Tencent COS\n\n1. [创建子用户](https://console.cloud.tencent.com/cam/user/create?systemType=FastCreateV2) , 访问方式 `编程访问`, 用户权限 `-（无）`\n2. [创建存储桶](https://console.cloud.tencent.com/cos/bucket) , no 版本控制, no 日志存储, no 服务端加密\n3. `权限管理` - `存储桶访问权限` - `添加用户` - `数据读取、数据写入`\n\n```sh\nRESTIC_REPOSITORY=\"s3:https://cos.ap-singapore.myqcloud.com/mybucket\"\nAWS_ACCESS_KEY_ID=***\nAWS_SECRET_ACCESS_KEY=***\nAWS_DEFAULT_REGION=\"ap-singapore\"\nS3_VIRTUAL_HOSTED_STYLE=\"yes\"\n```\n\n### Aliyun OSS\n\n- restic: https://github.com/restic/restic/blob/267cd62ae43124c80b3bed0106695eff6f7585dd/doc/030_preparing_a_new_repo.rst#alibaba-cloud-aliyun-object-storage-system-oss\n\n1. [创建 Bucket](https://oss.console.aliyun.com/bucket) , no 公共访问, no 版本控制, no 服务端加密方式, no 定时备份\n2. [创建权限策略](https://ram.console.aliyun.com/policies/new) - `脚本编辑`\n\n\u003e `oss:DeleteObject` is required for `restic forget --prune`\n\n```json\n{\n  \"Version\": \"1\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"oss:ListObjects\",\n        \"oss:PutObject\",\n        \"oss:PutObjectAcl\",\n        \"oss:GetObjectAcl\",\n        \"oss:GetObject\"\n      ],\n      \"Resource\": [\"acs:oss:*:*:mybucket\", \"acs:oss:*:*:mybucket/*\"]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": \"oss:DeleteObject\",\n      \"Resource\": \"acs:oss:*:*:mybucket/locks/*\"\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\"oss:CreateBucket\", \"oss:GetBucketLocation\", \"oss:ListBucket\"],\n      \"Resource\": \"acs:oss:*:*:mybucket\"\n    }\n  ]\n}\n```\n\n3. [RAM 创建用户](https://ram.console.aliyun.com/users/new) , `OpenAPI 调用访问`, `权限管理` - `新增授权`\n\n```sh\nRESTIC_REPOSITORY=\"s3:https://oss-cn-hongkong.aliyuncs.com/mybucket\"\nAWS_ACCESS_KEY_ID=***\nAWS_SECRET_ACCESS_KEY=***\nAWS_DEFAULT_REGION=\"oss-cn-hongkong\"\nS3_VIRTUAL_HOSTED_STYLE=\"yes\"\n```\n\n### Wasabi\n\n- https://status.wasabi.com/uptime/5w7g77w19r8z?page=1\n\n1. [create policy](https://console.wasabisys.com/policies)\n\n   \u003e Same with AWS\n\n2. [create user](https://console.wasabisys.com/users) , `Programmatic`, create group and select policy\n\n---\n\n## ref\n\n- https://forum.restic.net/t/append-only-mode-with-s3-wasabi/845/4\n- https://web.archive.org/web/20240616113817/https://forum.restic.net/t/minimal-rights-in-s3-amazon/4009/2\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellodword%2Fs3-all","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhellodword%2Fs3-all","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellodword%2Fs3-all/lists"}