【发布时间】:2019-10-30 18:19:38
【问题描述】:
我正在尝试将对象写入我的 aws 帐户中的 s3 存储桶,但它失败并出现以下错误。
com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求 ID:34399CEF4B28B50D;S3 扩展请求 ID:
我尝试以完全访问权限公开存储桶,然后我可以对其进行写入。
我编写的将对象写入 S3 存储桶的代码:
......
private final AmazonS3 amazonS3Client;
........
final PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, s3Key, stream,
metadata);
amazonS3Client.putObject(putObjectRequest);
final URL url = amazonS3Client.getUrl(bucketName, s3Key);
我正在构建我的 S3 客户端:
@Configuration
public class AWSConfig {
@Bean
public AmazonS3 amazonS3Client() {
String awsRegion = System.getenv("AWS_REGION");
if (StringUtils.isBlank(awsRegion)) {
awsRegion = Regions.getCurrentRegion().getName();
}
return AmazonS3ClientBuilder.standard()
.withCredentials(new DefaultAWSCredentialsProviderChain())
.withRegion(awsRegion)
.build();
}
}
如果我遗漏了什么,请建议我,我该如何解决上述错误。
【问题讨论】:
-
我已经找到了解决方案。问题是我试图调用 put 对象请求的 java 服务无权访问 s3 存储桶。为了解决这个问题,我为运行我的服务的实例添加了访问解决问题的 s3 存储桶的权限。
标签: java amazon-web-services amazon-s3 aws-sdk