通过Java应用程序将对象放入S3会提示缺少AWS签名

0

【以下的问题经过翻译处理】 你好,

我正在尝试从我的Java应用程序向S3存储桶写入数据。我的应用程序运行在EKS上。我已经使用系统属性aws.accessKeyIdaws.secretAccessKey提供了AWS凭证。

当发送put请求时,我收到这个错误 - com.amazonaws.services.s3.model.AmazonS3Exception: Put Object requests with Object Lock parameters require AWS Signature Version 4 (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument

Java SDK应该自动使用凭证进行身份验证,不需要计算签名。我是否漏掉了什么?

profile picture
ESPERTO
posta 6 mesi fa15 visualizzazioni
1 Risposta
0

【以下的回答经过翻译处理】 该错误消息表明,您需要使用AWS Signature Version 4来验证带Object Lock参数的请求到Amazon S3。这是因为Object Lock是一项提供WORM(一次写入,多次读取)功能的特性,因此需要更高级别的安全性。

您可以通过从代码中删除.withClientConfiguration(new ClientConfiguration().withSignerOverride("AWSS3V4SignerType"))行来启用Signature Version 4。如果所调用的API需要它,AWS SDK for Java将自动使用Signature Version 4。

以下是更新后的代码:

final AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration(
            s3Endpoint,
            s3Region
    );

final AmazonS3 s3client = AmazonS3ClientBuilder
            .standard()
            .withEndpointConfiguration(endpoint)
            .enablePathStyleAccess()
            .build();

请注意,建议使用IAM role或Instance Profile为在EC2或EKS上运行的应用程序提供AWS凭证,而不是使用显式访问密钥。这种方法可以帮助提高安全性和简化凭证管理。

profile picture
ESPERTO
con risposta 6 mesi fa

Accesso non effettuato. Accedi per postare una risposta.

Una buona risposta soddisfa chiaramente la domanda, fornisce un feedback costruttivo e incoraggia la crescita professionale del richiedente.

Linee guida per rispondere alle domande