如何在AWS S3 SDK Java 2.0中启用全局桶强制访问?

5

这里是java 3 sdk版本1的文档链接。2.0版本是否有类似的选项或它们已经移除了这样的选项呢?


你能找到这个问题的答案吗? - Sachin Kariyattin
3个回答

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-。该页面介绍了如何在AWS Java SDK中使用useArnRegionEnabled方法来启用或禁用Amazon S3中的ARN区域。

这个不起作用。尝试了.multiRegionEnabled(true),但也没有帮助。 - Beethoven

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中的对象执行操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接