如何在 aws s3 sdk java 2.0 中启用强制全局存储桶访问?

问题描述 投票:0回答:4

这里是java 3 sdk版本1的文档链接。2.0版本是否有类似的东西或者他们删除了这样的选项?

java amazon-web-services amazon-s3 aws-sdk-java-2.0
4个回答
2
投票

是的!在 AWS SDK v2 中,可以在客户端配置的区域以外的区域执行 S3 操作。

为此,请在客户端上将

useArnRegionEnabled
设置为 true。

使用 Scala 的一个示例是:

  val s3Configuration = S3Configuration.builder.useArnRegionEnabled(true).build

  val client = S3Client
    .builder
    .credentialsProvider({$foo})
    .region(Region.EU_WEST_1)
    .overrideConfiguration({$foo})
    .serviceConfiguration(s3Configuration)
    .build

这里是文档:https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Configuration.Builder.html#useArnRegionEnabled-java.lang.Boolean-


0
投票

不支持此处

在版本 1.x 中,Amazon S3、Amazon SNS 和 Amazon SQS 等服务允许跨区域边界访问资源。在使用相同客户端的 2.x 版本中不再允许这样做。如果您需要访问不同区域的资源,您必须在该区域创建客户端并使用适当的客户端检索资源。


0
投票

当使用 java AWS SDK 2.16.98 时,这对我有用,并且只需要存储桶的名称而不是完整的 arn。

private S3Client defaultClient;
private S3Client bucketSpecificClient;
private String bucketName = "my-bucket-in-some-region";

// this client seems to be able to look up the location of buckets from any region
defaultClient = S3Client.builder().endpointOverride(URI.create("https://s3.us-east-1.amazonaws.com")).region(Region.US_EAST_1).build();

public S3Client getClient() {
    if (bucketSpecificClient == null) {
        String bucketLocation = defaultClient.getBucketLocation(builder -> builder.bucket(this.bucketName)).locationConstraintAsString();

        Region region = bucketLocation.trim().equals("") ? Region.US_EAST_1 : Region.of(bucketLocation);
        bucketSpecificClient = S3Client.builder().region(region).build();
    }

    return bucketSpecificClient;
}

现在您可以使用

bucketSpecificClient
对桶中的对象进行操作
my-bucket-in-some-region


0
投票

从 v2.20.99 开始,您可以在客户端生成器中使用

.crossRegionAccessEnabled(true)

参考 - https://github.com/aws/aws-sdk-java-v2/issues/52#issuecomment-1635080233

© www.soinside.com 2019 - 2024. All rights reserved.