是否有一种方法可以访问S3,而只依赖于software.amazon.awssdk: S3:2.17.173?<



我使用s3asynclient来访问我的bucket。s3asynclient的创建方法如下:

S3AsyncClient s3Client = S3AsyncClient.builder().region(Region.of(region)).build();

然后我读取S3Object使用async如下:

GetObjectRequest objectRequest = GetObjectRequest.builder().bucket(bucket).key(key).range(range).build();
asyncClient.getObject(objectRequest, AsyncResponseTransformer.toBytes()).whenComplete((res, error) -> {
doResponse(res, error);
});

我的代码部署在EKS中。它所在的POD可以通过aws cli访问S3上的相同桶位置。在此POD上使用aws - get-caller-identity和在代码中使用stsClient的响应只是userId部分不同,帐户和角色是相同的。

奇怪的是,当我删除依赖软件。amazon。从程序的awssdk:sts,它将无法访问POD中的S3。响应码是403,消息是Access Denied

我没有在开发者指南中看到- Java 2的AWS SDK。访问S3必须依赖于sts。有人知道这是什么原因吗?

STS is (Security Token Service),这就是它所使用的,以便允许您从POD访问S3。

一旦您删除了awssdk:sts依赖项,您实质上就删除了与此服务通信以验证S3AsyncClient的所有逻辑。

根据此,https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html最好为您的EKS服务帐户提供一个角色(可以访问S3)。

否则,凭据可以直接提供给S3客户端,但这不是推荐的方法:

AwsCredentialsProvider creds = StaticCredentialsProvider.create(AwsBasicCredentials.create("accessKey","secretKey"));

S3AsyncClient.builder().credentialsProvider(creds)
.region(Region.US_WEST_1)
.build();

最新更新