🚚

異なるCloudflareアカウントでR2のバケットをコピーする

に公開

2025年7月現在、Cloudflareのコンソール上では直接異なるアカウント間でのR2のコピーは行えないようです。(同じアカウント内であれば、バケット名を変更するなどの目的で移行が可能です)

代替手段として、rcloneを使ったコマンドラインでの移行が可能です。
Cloudflare R2は、AWS S3互換のオブジェクトストレージサービスなので、rcloneを使用すれば特に難しいことをすることなく移行が可能です。

Cloudflareから必要な情報を取得

移行元、移行先の2つのアカウントから以下の情報を確認します。

  • アクセスキーID
  • シークレットアクセスキー
  • アカウントID
    • URLで確認できます https://dash.cloudflare.com/<id>

アクセスキーID と シークレットアクセスキーは、以下の手順で取得できます。

  1. メニュー > R2オブジェクトストレージ > 概要
    {}API から「APIトークンの管理」を選択します。

  2. User APIトークンを作成する

  3. APIトークンの設定を行って作成

  • バケット名:任意の名前で良いです。
  • 権限:オブジェクト読み取りと書き込み
  • その他:そのままでOK

入力したら、「User APIトークンを作成する」から完了します。

  1. アクセスキーIDとシークレットアクセスキーを控える
    作成が完了したら、これらが発行されます。値は後ほど使用します。

rcloneのインストール

インストール済みであれば、スキップで大丈夫です。

rclone --version
rclone v1.70.2
- os/version: darwin 15.5 (64 bit)
- os/kernel: 24.5.0 (arm64)
- os/type: darwin
- os/arch: arm64 (ARMv8 compatible)
- go/version: go1.24.4
- go/linking: dynamic
- go/tags: none

インストールされてなければ、適当にインストールします。

# macOS
brew install rclone

# Ubuntu / Debian
sudo apt install rclone

# Windows(PowerShell)
choco install rclone

設定ファイルを作成

以下のように作成します。

vim ~/.config/rclone/rclone.conf
[r2src]
type = s3
provider = Cloudflare
access_key_id = <移行元のアクセスキーID>
secret_access_key = <移行元のシークレットアクセスキー>
endpoint = https://<移行元のアカウントID>.r2.cloudflarestorage.com

[r2dst]
type = s3
provider = Cloudflare
access_key_id = <移行先のアクセスキーID>
secret_access_key = <移行先のシークレットアクセスキー>
endpoint = https://<移行先のアカウントID>.r2.cloudflarestorage.com

rcloneを実行

コピーコマンドを実行すると移行が完了します。

rclone copy r2src:<移行元のバケット名> r2dst:<移行先のバケット名>

Discussion