跳到主要内容
孤云
语言 简中 繁中 EN

腾讯云 COS

大约 10 分钟,不需要花钱,就能在腾讯云 COS 上给孤云准备好一个桶和一对只授权这个桶的密钥。

本文是孤云的官方引导。有一个云端账号即可,不必先看懂腾讯云的权限体系,跟着走完就行。

要准备什么

  • 一个腾讯云账号(个人也可以);用主账号登录控制台完成下面所有操作。
  • 桶要放在哪个地域,例如 ap-guangzhou(广州);地域后面还要填进孤云,两处必须一致。
  • 一个想好的桶名;它末尾会自动带上你账号的 APPID 后缀。
  • 不需要先开通别的服务、不需要域名、也不需要备案。

费用按实际用量计算:对象存储本身不收开通费,桶空着基本不产生费用,之后按存储量、请求次数和外网流量计费。如果已经有桶和一对密钥,可以跳过前三步,直接看「抄下这四个值」。

分步操作

  1. 第 1 步

    建存储桶

    • 打开腾讯云控制台,进入对象存储 COS,在左侧选「存储桶列表」,点「创建存储桶」。
    • 名称随便起一个(小写字母、数字和短横线),地域选你要用的那个 —— 例如 ap-guangzhou;地域要和后面填进孤云的一致。
    • 访问权限选「私有读写」,其余选项保持默认,点「创建」。
    • 桶名末尾会自动带上你的 APPID,形如 my-photos-1252763116。复制完整桶名(连后缀一起)—— 只复制前缀是孤云连不上桶最常见的原因。
    • APPID 是一串数字(示例里是 1252763116),在腾讯云控制台的「账号信息」里能看到,也可以看任何已有桶的名字末尾。
    • 孤云是唯一需要多填一格的服务商:把 APPID 填进它自己的「APPID」格,桶名那格只填前缀也行 —— 孤云会替你补成 你填的名字-1252763116;如果粘贴进来的桶名已经带了这个后缀,就不会再追加一次。
  2. 第 2 步

    建子用户与密钥

    • 用主账号进入访问管理 CAM →「用户」→「用户列表」,点「新建用户」。
    • 访问方式只勾「编程访问」,不要勾控制台登录:孤云只需要一对密钥。
    • 创建完成后复制这个子用户的 SecretId 与 SecretKey。SecretKey 只显示一次,离开页面就看不到了 —— 现在就把两个值存好。
    • 不要用主账号密钥:它的权限覆盖整个账号,而孤云只需要一个桶。
  3. 第 3 步

    给这个子用户挂权限

    • 先弄清一件事:CAM 里的 GetService、PutBucket 是操作(action),不是策略名称 —— 所以在「策略」列表里搜这两个词是搜不到的。要用它们,只能走自定义策略。
    • 做权限用主账号:CAM →「策略」→「新建自定义策略」→ 选「按策略语法创建」→ 模板选空白模板。
    • 把下面这段 JSON 粘进「策略内容」,替换里面的桶名与 APPID(your-bucket-name-1252763116、1252763116、以及地域 ap-guangzhou 都是虚构的示例值)。
    • 这段策略一次给到两层的权限:第一段是账号级的,允许列出你账号里的桶、并新建桶(桶还不存在时没法把它写进资源路径,所以资源是 *);第二段是桶级的,限定在你那一个桶里,cos:* 表示桶内的事都放给它。
    • 这段策略故意不含删桶权限 —— 孤云不需要删桶,只建桶、往桶里放东西。
    • 只想用已有的桶、不想让应用建桶,就把第一段整个删掉,只留桶级那一段。
    • 保存后回到子用户页面,把这条策略关联给它(CAM →「用户」→ 该用户 →「关联策略」)。
  4. 第 4 步

    在孤云里填好并测试连接

    • 回到孤云,打开「添加存储」,服务商选「腾讯云 COS」,地域选你在控制台选的同一个地域。
    • 按下面的顺序把值填进对应格子:APPID、桶名、地域、端点、密钥(SecretId 与 SecretKey)。
    • 点「测试连接」。它只读取桶的根目录,不上传、不删除任何东西。

子用户要的权限:一段 CAM 自定义策略

把 your-bucket-name、1252763116 和地域换成你自己的桶名、APPID 与地域。这段策略故意不含删桶权限。

json
{
  "version": "2.0",
  "statement": [
    { "effect": "allow", "action": ["cos:GetService", "cos:PutBucket"], "resource": ["*"] },
    { "effect": "allow", "action": ["cos:*"],
      "resource": ["qcs::cos:ap-guangzhou:uid/1252763116:your-bucket-name-1252763116/*"] }
  ]
}

粘贴位置:CAM 控制台 →「策略」→「新建自定义策略」→ 按策略语法创建 → 空白模板。第一段允许列出与新建桶;只想用已有的桶,就把这一段删掉。

腾讯云有现成的预设策略

不想自己写策略,也可以直接挂这三条腾讯云已经做好的策略,效果差不多:

  • QcloudCOSGetServiceAccess —— 列出账号里的桶。
  • QcloudCOSBucketConfigRead / QcloudCOSBucketConfigWrite —— 读、写桶的配置,其中 Write 也带建桶。
  • 它们的名字不像动作名,所以在策略列表里按 GetService、PutBucket 搜是搜不到的;直接按上面这三个名字找。

用户实测的结论

把 cos:GetService / cos:PutBucket / cos:DeleteBucket 写进按桶限定的那一段里也能用,不必放在资源为 * 的第一段。

cos:DeleteBucket 只对被限定的那个桶有效:换成账号里别的桶仍然会被拒。就算这样,孤云也不需要删桶权限。

控制台的「访问域名」不是孤云要的端点

建好桶后,「概览」里会显示一个访问域名,形如 https://my-photos-1252763116.cos.ap-guangzhou.myqcloud.com —— 它把桶名写进了主机名,是给浏览器用的地址。

孤云要的是服务端点,形如 https://cos.ap-guangzhou.myqcloud.com,不带桶名;桶名单独填在桶名那一格。

把访问域名整段填进端点,孤云就会去访问一个不存在的地址,测试连接直接失败。

抄下这四个值

这四个值要填进孤云「添加存储」页的对应格子里(腾讯云 COS 比别家多一个 APPID 格):

抄下这个值填进孤云的哪一格
桶名
控制台里的完整桶名,含末尾的 -APPID 后缀,例如 my-photos-1252763116。
桶名称
APPID
桶名末尾那串数字,例如 1252763116。在控制台「账号信息」里,或任何已有桶的名字末尾。
APPID
地域
桶所在的地域代码,例如 ap-guangzhou。
地域
端点
服务端点,形如 https://cos.ap-guangzhou.myqcloud.com(把 ap-guangzhou 换成你的地域);不带桶名。
Endpoint
密钥
刚才那个子用户的 SecretId 与 SecretKey(不是主账号的)。
SecretId 与 SecretKey

怎么知道成了

  • 「测试连接」通过,说明那对密钥能读到这个桶 —— 孤云只读根目录,不会动桶里的东西。
  • 随后这条存储就会出现在孤云的存储列表里,可以打开看桶里的文件。
  • 如果测试报 AccessDenied,多半是桶名没连 APPID 后缀一起复制,或者密钥没有这个桶的权限;报域名相关的错误,多半是把「访问域名」当成了端点。

回到孤云,点「测试连接」。

常见错误

腾讯云 COS 最常见的几种失败,以及先查哪一处。

现象 / 错误码含义怎么办
403 AccessDenied(桶名对不上)桶名不完整:只复制了前缀,没连末尾的 -APPID 后缀一起复制,孤云去找的桶并不存在(或不属于你)。回控制台把完整桶名复制过来,例如 my-photos-1252763116;或者把 APPID 填进孤云的「APPID」格,让孤云替你补后缀。
403 AccessDenied(密钥没权限)桶名是对的,但这对密钥没有被授权这个桶 —— 策略没做、没关联到子用户,或策略里的桶名还是示例值。回 CAM 检查:这条策略关联给那个子用户了吗?策略资源路径里的桶名和 APPID 换成了你自己的吗?
SignatureDoesNotMatch签名对不上:SecretKey 复制错了(混进了空格或少了字符),或者桶名 / 地域 / 端点有一处和实际不一致。重新复制一遍 SecretKey;再逐格核对桶名、地域与端点。
InvalidAccessKeyId这个 SecretId 不存在,通常是复制错了,或者这已经是一把被删除、被禁用、被轮换掉的旧密钥。回到 CAM 给那个子用户重新生成一对密钥,两个值一起换。
SecretKey 只显示了一次,没存下来SecretKey 只在创建时显示一次,关掉页面就再也看不到。不用找回来:在 CAM 里给这个子用户重新生成一对密钥,然后在孤云里把两个值都换掉。
连接失败、报域名或网络错误把控制台给的访问域名当成了端点 —— 那个地址里已经带着桶名(https://my-photos-1252763116.cos.ap-guangzhou.myqcloud.com)。端点改成服务端点 https://cos.ap-guangzhou.myqcloud.com,桶名单独填在桶名那一格。
测试连接通过,上传却失败连接测试只读根目录,读得通不代表写得进。回 CAM 确认策略的桶级那一段动作覆盖写入(上面这段 cos:* 就是全覆盖);再传一个小文件试试。

改完设置记得回到孤云重新点一次「测试连接」,测试通过才会保存下来。