conf.set("fs.s3a.acl.default", "bucket-owner-full-control");
- это правильное свойство, которое вы устанавливаете.
Как это свойство в core-site. xml, чтобы предоставить полный контроль владельцу корзины.
<property>
<name>fs.s3a.acl.default</name>
<description>Set a canned ACL for newly created and copied objects. Value may be private,
public-read, public-read-write, authenticated-read, log-delivery-write,
bucket-owner-read, or bucket-owner-full-control.</description>
</property>
BucketOwnerFullControl
Specifies that the owner of the bucket is granted Permission.FullControl. The owner of the bucket is not necessarily the same as the owner of the object.
Я рекомендую установить fs.s3.canned.acl
также в значение BucketOwnerFullControl
Для отладки вы можете использовать приведенный ниже фрагмент, чтобы понять какие параметры фактически передаются ..
for (Entry<String, String> entry: conf) {
System.out.printf("%s=%s\n", entry.getKey(), entry.getValue());
}
Для целей тестирования выполните эту команду с командной строкой
aws s3 cp s3://bucket/source/dummyfile.txt s3://bucket/target/dummyfile.txt --sse --acl bucket-owner-full-control
Если это работает, то через API также будет.
Бонус с Spark, полезный для пользователей spark scala:
Чтобы Spark получил доступ к файловой системе s3 и установил правильные конфигурации, как показано в примере ниже ...
val hadoopConf = spark.sparkContext.hadoopConfiguration
hadoopConf.set("fs.s3a.fast.upload","true")
hadoopConf.set("mapreduce.fileoutputcommitter.algorithm.version","2")
hadoopConf.set("fs.s3a.server-side-encryption-algorithm", "AES256")
hadoopConf.set("fs.s3a.canned.acl","BucketOwnerFullControl")
hadoopConf.set("fs.s3a.acl.default","BucketOwnerFullControl")