本文最后更新于 2220 天前,其中的信息可能已经有所发展或是发生改变。
一、 获取临时密钥的请求里,权限列表里需要添加下载权限。php实例代码:
$config = [
'url' => self::URL,
'domain' => self::DOMAIN,
'proxy' => '',
'secretId' => $cos['secret_id'], // 固定密钥
'secretKey' => $cos['secret_key'], // 固定密钥
'bucket' => $bucket, // 换成你的 bucket
'region' => $region, // 换成 bucket 所在园区
'durationSeconds' => self::EXPIRE_TIME, // 密钥有效期
'allowPrefix' => '*', // 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg
// 密钥的权限列表。简单上传和分片需要以下的权限,
'allowActions' => array (
// 简单上传
'name/cos:PutObject',
'name/cos:PostObject',
// 分片上传
'name/cos:InitiateMultipartUpload',
'name/cos:ListMultipartUploads',
'name/cos:ListParts',
'name/cos:UploadPart',
'name/cos:CompleteMultipartUpload',
// 下载
'name/cos:GetObject',
)
];
// 获取临时密钥,计算签名
$tempKeys = $this->sts->getTempKeys($config);
二、确保用于生成临时密钥的账号在所在的桶有相应的权限
https://console.cloud.tencent.com/cos5/bucket
我踩的坑是因为运维给到我的账号是子账号,但是没有权限。使用该子账号的密钥生成的临时密钥能够进行上传操作,但是下载对象返回403。这就很懵逼了。
提了工单给腾讯云,折腾几回合无果后,客服让我在桶所在的权限控制台页面截图看看,说如果是子账号的话,也是需要将子账号及相应权限添加到对应桶的。
让运维将子账号添加到所在桶,并勾选上传、下载数据权限后,成功下载。