使用 Backblaze 命令行工具配置 Bucket 信息教程

WebBackblazecliCORS Rules对象存储
浏览数 - 381发布于 - 2025-09-27 - 02:18
鲲

5835

背景

Backblaze 是一个对象储存供应商,它提供 6$ / 1mo 的极为便宜的对象存储价格,和 Cloudflare 的 CDN 结合之后可以达到免流的效果,因为 Backblaze 位于带宽联盟

免流的详细教程: 使用 Cloudflare Workers 实现 B2 私有存储桶文件下载

一旦需要建站,尤其是需要大空间大流量存储的网站,Backblaze 对于这个类型的网站可能非常管用

经过本论坛的 Telegram 开发群组(https://t.me/KUNForum/14353)多次的讨论,我们认定 Backblaze 是我们目前能找到的最便宜的对象存储供应商,可以支持大部分情况下的下载需求

但是便宜的代价是 Backblaze 有一些 GUI 操作很不方便,必须要使用命令行工具来完成配置,例如下面的情况

b2 getSignedUrl 之后的 url 跨域了怎么办,b2 的 bucket 设置 CORS Rules 是无效的,难道真的要用 b2 的 cli 工具手动给 bucket 配 CORS Rules 吗

下面就从 Bucket CORS Rules 的方向来阐述一下如何使用 Backblaze 的命令行工具

以下将 Backblaze 简称为 B2

下载和文档

在这里下载 B2 的命令行工具

https://www.backblaze.com/docs/cloud-storage-command-line-tools

这是个二进制文件,直接在命令行中使用即可

工具的文档也在这里,但是 B2 的文档写的非常不清晰,所以建议问 LLM

通过命令行工具登录

首先要使用这个工具登录,才能通过这个工具来操作 bucket

shell
./b2 account authorize

然后会提示输出

shell
Backblaze application key ID: 输入你的 key id
Backblaze application key: 输入你的 secret key

这里的 key,Application Key 权限可能不够,需要使用 master key

登录成功后会输出类似这样的内容

json
{
    "accountAuthToken": "1_003xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "accountFilePath": "/kun.b2_account_info",
    "accountId": "ssssssssssssssss",
    "allowed": {
        "bucketId": "ssssssssssssssss",
        "bucketName": "kun-love-ren",
        "capabilities": [
            "deleteFiles",
            "listAllBucketNames",
            "listBuckets",
            "listFiles"
        ],
        "namePrefix": null
    },
    "apiUrl": "https://api001.backblazeb2.com",
    "applicationKey": "K001xxxxxxxxxxxxxxxxxxxxxxxxxx",
    "applicationKeyId": "001xxxxxxxxxxxxxxxxxx",
    "downloadUrl": "https://f001.backblazeb2.com",
    "isMasterKey": false,
    "s3endpoint": "https://s3.us-east-001.backblazeb2.com"
}

通过命令行工具更改 Bucket 的属性

在 b2 命令行工具的目录下新建一个 JSON 文件,写入下面的内容

json
[
  {
    "corsRuleName": "allowBrowserUploadAndDownload",
    "allowedOrigins": ["http://127.0.0.1:1007", "http://127.0.0.1:2333", "http://127.0.0.1:9420", "https://kungal.com", "https://www.kungal.com", "https://kungal.org", "https://www.kungal.org", "https://www.moyu.moe"],
    "allowedHeaders": ["*"],
    "allowedOperations": ["s3_get", "s3_post", "s3_put", "b2_download_file_by_name", "b2_upload_file", "b2_upload_part"],
    "exposeHeaders": ["ETag"],
    "maxAgeSeconds": 3600
  }
]

然后使用命令

shell
./b2 bucket update --cors-rules "$(cat ./kun-love-ren.json)" kun-love-ren allPrivate

对于这里的 allPrivate,如果你的 bucket 是 public 的就写 allPublic,否则写 allPrivate

命令如果成功则会输出下面的内容

json
{
    "accountId": "xxxxxxxxxxxx",
    "bucketId": "xxxxxxxxxxxxxxxxxxxxxxx",
    "bucketInfo": {},
    "bucketName": "kun-love-ren",
    "bucketType": "allPrivate",
    "corsRules": [
        {
            "allowedHeaders": [
                "*"
            ],
            "allowedOperations": [
                "b2_upload_part",
                "b2_upload_file",
                "s3_put",
                "b2_download_file_by_name",
                "s3_post",
                "s3_get"
            ],
            "allowedOrigins": [
                "http://127.0.0.1:1007",
                "http://127.0.0.1:2333",
                "http://127.0.0.1:9420",
                "https://kungal.com",
                "https://www.kungal.com",
                "https://kungal.org",
                "https://www.kungal.org",
                "https://www.moyu.moe"
            ],
            "corsRuleName": "allowBrowserUploadAndDownload",
            "exposeHeaders": [],
            "maxAgeSeconds": 3600
        }
    ],
    "defaultRetention": {
        "mode": null
    },
    "defaultServerSideEncryption": {
        "mode": "none"
    },
    "isFileLockEnabled": false,
    "lifecycleRules": [
        {
            "daysFromHidingToDeleting": 1,
            "daysFromUploadingToHiding": null,
            "fileNamePrefix": ""
        }
    ],
    "options": [
        "s3"
    ],
    "replication": {
        "asReplicationDestination": null,
        "asReplicationSource": null
    },
    "revision": 5
}

注意这里 allowedHeaders 写了 *, 因为 B2 的配置文件没有办法写x-amz-*,会报错 ERROR: '*' in allowedHeaders, but it's not the only value. (bad_request)

到这里我们正式把整个流程操作完毕

重新编辑于 - 2025-09-27 - 19:35

1 条回复

ArisuMika
发布于 2025-09-27 - 02:48

Sticker

(。>︿<。) 已经一滴回复都不剩了哦~