Можно ли сделать так, чтобы эффект «Разрешить» перекрывал «Запретить»? - PullRequest
1 голос
/ 02 апреля 2019

У меня есть ведро S3, которое имеет такую ​​структуру:

top_level_name
  sub_level_1
  sub_level_2
  sub_level_3

Я хотел бы сделать общий запрет на все действия в top_level_name (чтобы исключить политики IAM, которые в противном случае имели бы доступ к этому сегменту), и выборочно разрешить определенным пользователям доступ к их соответствующим sub_levels. Первоначально я думал, что политика может выглядеть примерно так:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyTopLevel",
            "Action": [
                "s3:*"
            ],
            "Effect": "Deny",
            "Resource": "arn:aws:s3:::test-bucket/top_level_name/*",
            "Principal": "*"
        },
        {
            "Sid": "AllowSubLevel1",
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::test-bucket/top_level_name/sub_level_1/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::12345:user/my_user_account"
                ]
            }
        }
    ]
}

При исполнении похоже, что Разрешить не может заменить Запрет. Есть ли способ, которым я могу переписать свою политику корзины для реализации этого шаблона?

1 Ответ

1 голос
/ 02 апреля 2019

Нет.Deny всегда переопределяет Allow.

Однако ваш вариант использования может быть удовлетворен, если вы просто удалите свой первый Deny раздел .Это потому, что по умолчанию пользователи не имеют разрешения.Таким образом, у них нет разрешения на PutObject на верхнем уровне, если это не разрешено конкретной политикой.

Вторая часть вашей политики предоставляет разрешения для нижних уровней, что вам и нужно.

Если у вас есть другие политики, которые предоставляют доступ к верхнему уровню (например, с помощью политики *), вам нужно будет переосмыслить другие ваши политики (например, исключив этот сегмент из их гранта Allow).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...