使用Java拒绝AWS S3访问
我试图在Amazon S3上上载文件,但它返回以下错误:使用Java拒绝AWS S3访问,java,amazon-s3,Java,Amazon 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: S0Ds3cvubCSZTAd1ESUG5rMRifGLHRAHBviy
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和bucket,并且使用了AWS提供给我的良好访问/机密。有什么问题吗?谢谢大家!
S3客户端代码:
上载文件代码:
IAM用户:
S3权限:
我也有同样的问题。我成功地禁用了第一个选项 阻止对通过新访问控制列表ACL授予的存储桶和对象的公共访问 如果您想获得有关默认固定ACL的更多信息,下面是一个 如果不想禁用这些策略中的任何一个,可以使用预签名URL
您可以看到示例是否为Bucket分配了Bucket策略?不,我是AWS的新手,是否应该添加一些内容?不,但这是您应该为Bucket权限屏幕截图显示的内容。如果没有bucket策略,则看起来您没有为access key或secret key设置正确的值,或者您没有在代码中设置正确的bucket名称。管理对象访问的最佳做法是使用S3策略,而不是单个对象ACL,因为您可以一次管理对整个对象集的访问,而不是单独为每个对象配置ACL。此外,阻塞公共访问属性可能会阻止对的调用。
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))
}