我试图将对象写入我的 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();
}
}
如果我遗漏了什么,请建议我以及如何修复上述错误。
最佳答案
您缺少Access Keys (Access Key ID and Secret Access Key)
目前,仅当您将存储桶设置为公共(public)时,它才有效,因为您没有提供任何访问 key 。
访问 key 最适合与 API key 进行比较,API key 提供了一种访问 AWS 中的私有(private)数据的安全方式。
您将需要:
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(ACCESSKEY, SECRETKEY)));
请参阅官方文档,了解如何 generate/obtain他们。
关于java - 当对象没有公共(public)访问权限时,无法将对象放入 S3 存储桶中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56626504/