get_acl()
возвращает строковое представление XML, показывающее текущий ACL. Это работает, как и ожидалось.
Согласно ?put_acl
и AWS docs , я должен иметь возможность редактировать ACL и put_acl()
, чтобы установить новый.
Пример
Предположим, мы вставляем новый grant
в существующий ACL, чтобы предоставить открытый доступ для чтения к объекту в сегменте
library(aws.s3)
original_acl <- get_acl("object_name", "bucket_name")
public_access_grant <- '<Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee><Permission>READ</Permission></Grant>'
# Split existing ACL into two
original_acl_part_1 <- substr(original, 1, nchar(original) - 42)
original_acl_part_2 <- substr(original, nchar(original) - 42 + 1, nchar(original))
# Paste the chunks back together with the new grant included
new_acl_in_xml_as_a_string <- paste0(original_part_1, public_access_grant, original_part_2)
На этом этапе ядолжна быть в состоянии установить новый ACL, например:
put_acl(object=object_name, bucket=bucket_name, body=new_acl_in_xml_as_a_string)
Неожиданный результат
Быстрый тест с использованием get_acl()
показывает, что ACL не изменился по сравнению с исходным
Вопрос
Что происходит и почему ACL не был обновлен, как ожидалось?