java - 当对象没有公共(public)访问权限时,无法将对象放入 S3 存储桶中

标签 java amazon-web-services amazon-s3 aws-sdk

我试图将对象写入我的 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/

相关文章:

mysql - 在 S3 上托管文件并使用 mysql

java - AWS S3 文件下载的 JAR 文件

javascript - AWS S3 CORS上传-文件大小控制

amazon-web-services - 具有 s3fs 和熔断器的 Amazon S3,传输终端节点未连接

java - 如何在Android上实现持久化队列

java - 如果字符串在 Java 中有一个以上的空格,如何插入一个单词?

python - 在 dynamoDB 查询中使用字符串作为 FilterExpression 的参数

java - 我的 ImmutableList 收集器不工作?

java - 1到30之间不能被3整除的数

amazon-web-services - AWS CDK,如何定义 ElasticSearch 策略?