您遇到的
1 | Access Denied |
错误表明腾讯云对象存储(OSS)服务拒绝了上传请求,这通常是由于权限配置问题导致的。以下是详细的排查和解决方法:
查看日志提示ERROR 上传失败: Access Denied.总结下来配置完全正常的情况 一种是SecretKey是新建生效问题,如果新建过老KEY使用原来的就正常,或者删除现有的SecretKey再新建
1. 检查SecretKey和SecretId
验证密钥是否正确
- 确保使用的
1SecretId
和
1SecretKey是最新有效的
- 在腾讯云控制台重新获取密钥:
- 登录腾讯云控制台
- 进入「访问管理」→「API密钥管理」
- 确认或重新生成SecretKey
代码中正确配置
1
2
3
4
5 <span class="hljs-comment">// 示例配置</span>
<span class="hljs-keyword">const</span> cos = <span class="hljs-keyword">new</span> <span class="hljs-title function_">COS</span>({
<span class="hljs-title class_">SecretId</span>: <span class="hljs-string">'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'</span>,
<span class="hljs-title class_">SecretKey</span>: <span class="hljs-string">'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'</span>,
});
2. 检查存储桶(Bucket)权限
存储桶访问权限设置
- 进入COS控制台
- 找到目标存储桶 → 点击「权限管理」
- 检查:
- 公有权限:至少设置为"私有读写"或根据需求调整
- 用户权限:确保当前账号有写入权限
跨域设置(CORS)
- 在存储桶的「安全设置」→「跨域访问CORS设置」
添加或修改规则,确保包含:
1
2
3
4
5
6 <span class="hljs-attr">"AllowedOrigins"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">"*"</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"AllowedMethods"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">"PUT"</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"POST"</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"GET"</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"DELETE"</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"HEAD"</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"AllowedHeaders"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">"*"</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"ExposeHeaders"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">"ETag"</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"MaxAgeSeconds"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">3600</span>
<span class="hljs-punctuation">}</span>
3. 检查IAM权限策略
确认账号有足够权限
- 进入「访问管理」→「策略管理」
- 检查关联的策略是否包含COS写入权限,如:
-
1QcloudCOSFullAccess
(完全访问)
-
1QcloudCOSDataWriteOnly
(仅写入)
-
或创建自定义策略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <span class="hljs-punctuation">{</span>
<span class="hljs-attr">"version"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2.0"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"statement"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
<span class="hljs-punctuation">{</span>
<span class="hljs-attr">"effect"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"allow"</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"action"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
<span class="hljs-string">"cos:PutObject"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"cos:PostObject"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"cos:InitiateMultipartUpload"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"cos:ListMultipartUploads"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"cos:ListParts"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"cos:UploadPart"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"cos:CompleteMultipartUpload"</span>
<span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">"resource"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
<span class="hljs-string">"qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"</span>
<span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">}</span>
4. 检查请求参数
验证上传代码
确保上传请求包含所有必要参数:
1
2
3
4
5
6
7
8 cos.<span class="hljs-title function_">putObject</span>({
<span class="hljs-title class_">Bucket</span>: <span class="hljs-string">'examplebucket-1250000000'</span>,
<span class="hljs-title class_">Region</span>: <span class="hljs-string">'ap-guangzhou'</span>,
<span class="hljs-title class_">Key</span>: <span class="hljs-string">'exampleobject'</span>,
<span class="hljs-title class_">Body</span>: file,
}, <span class="hljs-keyword">function</span>(<span class="hljs-params">err, data</span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(err || data);
});
常见参数问题
- Bucket名称格式:
1examplebucket-1250000000
(必须包含APPID)
- Region匹配:确保与存储桶创建时选择的区域一致
- Key命名规范:不能以斜杠开头
5. 临时访问凭证(推荐生产环境使用)
使用临时密钥更安全
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <span class="hljs-comment">// 从服务器获取临时密钥</span>
<span class="hljs-keyword">const</span> credentials = <span class="hljs-keyword">await</span> <span class="hljs-title function_">getTempCredential</span>();
<span class="hljs-keyword">const</span> cos = <span class="hljs-keyword">new</span> <span class="hljs-title function_">COS</span>({
<span class="hljs-attr">getAuthorization</span>: <span class="hljs-keyword">function</span>(<span class="hljs-params">options, callback</span>) {
<span class="hljs-title function_">callback</span>({
<span class="hljs-title class_">TmpSecretId</span>: credentials.<span class="hljs-property">tmpSecretId</span>,
<span class="hljs-title class_">TmpSecretKey</span>: credentials.<span class="hljs-property">tmpSecretKey</span>,
<span class="hljs-title class_">SecurityToken</span>: credentials.<span class="hljs-property">sessionToken</span>,
<span class="hljs-title class_">StartTime</span>: credentials.<span class="hljs-property">startTime</span>,
<span class="hljs-title class_">ExpiredTime</span>: credentials.<span class="hljs-property">expiredTime</span>,
});
}
});
6. 调试和日志
开启SDK调试日志
1
2
3
4 <span class="hljs-keyword">const</span> cos = <span class="hljs-keyword">new</span> <span class="hljs-title function_">COS</span>({
<span class="hljs-comment">// ...其他配置</span>
<span class="hljs-title class_">Logger</span>: <span class="hljs-variable language_">console</span>, <span class="hljs-comment">// 打印调试日志</span>
});
检查腾讯云返回的完整错误
1
2
3
4
5 cos.<span class="hljs-title function_">putObject</span>({<span class="hljs-comment">/*...*/</span>}, <span class="hljs-keyword">function</span>(<span class="hljs-params">err, data</span>) {
<span class="hljs-keyword">if</span> (err) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">'完整错误信息:'</span>, err);
}
});
7. 其他可能原因
- 存储桶不存在:确认Bucket名称拼写正确
- 网络策略限制:检查安全组/ACL是否阻止请求
- 欠费停服:确认账户余额充足
- 请求超时:调整SDK超时设置
通过以上步骤系统排查,应该能解决您的"Access Denied"问题。如果仍无法解决,建议提供完整错误日志联系腾讯云技术支持
服务声明: 本网站除正版商用版块可商用外,其他所有发布的源码、软件和资料均为作者提供或网友推荐收集各大资源网站整理而来,仅供功能验证和学习研究使用,您必须在下载后24小时内删除。不得使用于非法商业用途,不得违反国家法律,否则后果自负!一切关于该资源商业行为与本站无关。如果您喜欢该程序,请支持购买正版源码,得到更好的正版服务。如有侵犯你的版权合法权益,请邮件或QQ:3089659733与我们联系处理删除(邮箱:ynzsy@qq.com),本站将立即更正。
评论(0)