首页 > 解决方案 > 使用 Java 拒绝 AWS S3 访问

问题描述

我正在尝试在 Amazon S3 上上传文件,但它返回此错误:

com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 26B9B4844CEA580C), S3 Extended Request ID: S0Ds3cvubCSZTAd1ESUG5rMRifGLHRAHBviyUHzDVI5W8FQxtRDMBNSrhVme6K86UryWxqORv30=

我已经在 AWS 上配置了 IAM 和存储桶,并且我使用了良好的访问权限/秘密(aws 给了我的那个)。有什么问题?谢谢!

S3客户端代码:

s3client = AmazonS3ClientBuilder
    .standard()
    .withRegion(Regions.CA_CENTRAL_1) // The first region to try your request against
    .withForceGlobalBucketAccessEnabled(true) // If a bucket is in a different region, try again in the correct region
    .withCredentials(AWSStaticCredentialsProvider(BasicAWSCredentials(accessKey, secretKey)))
    .build()

上传文件代码:

private fun uploadFileTos3bucket(fileName: String, file: File) {
    s3client.putObject(PutObjectRequest(bucketName, fileName, file)
        .withCannedAcl(CannedAccessControlList.PublicRead))
  }

IAM 用户:

在此处输入图像描述

S3 权限: 在此处输入图像描述

标签: javaamazon-s3

解决方案


我有同样的问题。我让它禁用了第一个选项

阻止对通过新访问控制列表 (ACL) 授予的存储桶和对象的公共访问

如果您想获取有关默认 Canned ACL 的更多信息,这里是一个链接

如果您不想禁用任何这些策略,您可以使用预签名的 url

您可以在此处查看示例


推荐阅读