Мне нужно переместить содержимое из корзины S3, которую я использовал до сих пор (src-bucket), в новую корзину S3 в новой учетной записи AWS (dst-bucket). Насколько я могу судить, прямой подход был бы
aws s3 sync s3://src-bucket s3://dst-bucket --exclude "*" --include="important_prefix*"
Но это работает только немного. Для подмножества объектов я получаю сообщение об ошибке
An error occurred (AccessDenied) when calling the CopyObject operation: Access Denied
и я не могу найти причину.
Пока я могу сказать, что все файлы, которые не могут быть синхронизированы, довольно малы (менее 700 КБ), в то время как успешно скопированные файлы имеют по крайней мере пару МБ каждый.
Существует ли какой-нибудь минимальный размер объекта (с относительно высоким значением по умолчанию), который должен быть достигнут, прежде чем s3 sync
сможет выполнить свою работу?
Дополнительная информация
- Я могу прекрасно
aws s3 cp
и aws s3api get-object
проблемные объекты. Они просто терпят неудачу с aws s3 sync
.
- В обеих учетных записях у меня есть пользователь с
S3FullAccess
разрешениями
Я добавил следующую политику корзины в src-bucket
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::newaccountid:user/myadminuser"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::src-bucket"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::newaccountid:user/myadminuser"
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::src-bucket/*"
}
]
}
- Я запускаю
aws s3 sync
как новый пользователь: user / myadminuser
Я могу просматривать пользователя src-bucket
из новой учетной записи, и я могу загружать и скачивать файлы просто отлично. Запуск первоначально упомянутой команды aws s3 sync
копирует несколько 100 объектов из src-bucket
в dst-bucket
, но завершается неудачей для некоторых других типов объектов.
Я попытался сравнить несинхронизируемые объекты с теми, которые мне удалось синхронизировать успешно. Я сделал aws s3api get-object-acl
на многих объектах в src-bucket
. Их списки ACL выглядят одинаково для успешно скопированных и неудачных копий:
{
"Owner": {
"ID": "reallylongidihadbashcomparethemformetomakesuretheyareidentical"
},
"Grants": [
{
"Grantee": {
"Type": "CanonicalUser",
"ID": "reallylongidihadbashcomparethemformetomakesuretheyareidentical"
},
"Permission": "FULL_CONTROL"
}
]
}
На dst-bucket
действительно длинный идентификатор отличается, но кроме этого ACL выглядят одинаково.