Я пытаюсь настроить резервное копирование с нескольких хостов в одну корзину. У каждого хоста есть собственный логин и учетные данные AWS. Самая верхняя папка (префикс) сопоставляется с идентификатором пользователя AWS, и я пытаюсь ограничить доступ только к этой папке.
Во время резервного копирования я получаю «S3ResponseError: 403 Forbidden». Я использую следующую политику:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::mybucketexample"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
""
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::mybucketexample"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"${aws:username}/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::mybucketexample/${aws:username}/*"
]
}
]
}
Когда я прикрепляю политику, разрешающую любой доступ к s3, дублирующие резервные копии работают нормально. Итак, в приведенной выше политике чего-то не хватает или есть ошибка.
Одно интересное наблюдение: в конечном итоге в S3 появляются файлы-дубликаты, поэтому мне интересно, разрешены ли put, а листинги - нет.
Любые идеи?
Я также сталкивался с этой проблемой, и подробное обсуждение этой проблемы можно найти на Форум AWS.
Основная проблема в том, что некоторые клиенты S3 просто не добавляют «префикс» в запрос «ListBucket». Следовательно, в «AllowRootAndHomeListingOfCompanyBucket» нет совпадений, и, следовательно, в доступе отказано. Это должно быть случай двуличия.
Другой способ - использовать вместо этого правило запрета, которое было предложено Даниэль в этой ветке. Политика должна иметь тот же эффект, что и упомянутая вами.
Ниже одна изменена и добавлена пользовательская переменная, и она должна работать для дублирования:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::mybucketexample"
]
},
{
"Sid": "DenyAllListingExceptRootAndUserFolders",
"Effect": "Deny",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::mybucketexample"
],
"Condition": {
"Null": {
"s3:prefix": "false"
},
"StringNotLike": {
"s3:prefix": [
"",
"${aws:username}/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::mybucketexample/${aws:username}/*"
]
}
]
}