You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端AWS S3上传纯文本文件遇Access Denied错误求助

问题描述

已持有AWS访问密钥,可成功获取Amazon S3存储桶的文件夹结构,但无法上传txt文件到任何文件夹或根路径,报错:

AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XR5YENBX1E3SQH20)

成功执行的文件夹结构获取代码

val result: ListObjectsV2Result =
s3Client.listObjectsV2(AWSCredentials.BUCKET_NAME)
val objects = result.objectSummaries

for (os in objects) {
println(os.key)
}

执行结果:

I/System.out: 2101/
I/System.out: 2101/Entrada/
I/System.out: 2101/Salida/
I/System.out: 2301/
I/System.out: 2301/Entrada/
I/System.out: 2301/Salida/

触发错误的文件上传代码

val request = PutObjectRequest( AWSCredentials.BUCKET_NAME, "2301/Entrada/maestro.txt", exampleFile )   
s3Client.putObject(request)
解决思路
  • 检查存储桶策略的写入权限
    确认存储桶策略中是否包含s3:PutObject权限:你能执行listObjectsV2说明已拥有s3:ListBucket权限,但上传需要额外的写入权限。需确保策略针对目标资源(如arn:aws:s3:::你的存储桶名/*)添加允许s3:PutObject的规则,同时排查是否存在优先级更高的Deny语句阻止写入。

  • 验证IAM用户/角色权限
    访问密钥对应的IAM用户或角色,可能未被授予s3:PutObject权限。即使存储桶策略允许,IAM权限不足也会触发403错误。需在IAM控制台检查该用户的权限策略,确认包含对目标存储桶执行s3:PutObject的允许规则。

  • 检查存储桶公共访问设置
    确认存储桶未开启会阻止写入的公共访问限制项,比如“阻止存储桶策略授予的公共访问”等选项。这类设置可能会覆盖允许写入的策略规则,导致权限被拒绝。

  • 核对桶名和对象路径
    确认上传代码中的存储桶名称、对象键(2301/Entrada/maestro.txt)拼写完全正确,S3的桶名和对象键区分大小写,任何拼写错误都可能导致权限验证失败。

  • 检查本地文件权限
    确保本地的exampleFile拥有可读权限,若SDK无法读取文件内容,也可能触发类似的权限报错。

内容的提问来源于stack exchange,提问作者Heinkel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:25:28