Назад | Перейти на главную страницу

Использование Duplicity с политикой AWS S3 и IAM Folder

Я пытаюсь настроить резервное копирование с нескольких хостов в одну корзину. У каждого хоста есть собственный логин и учетные данные 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}/*"
            ]
        }
    ]
}