2016-12-29 5 views
2

У меня есть вопрос о написании IAM политики на AWS S3, который частично ответили здесь, в этом славном посту Джим Шарф:Предотвратить пользователь, даже зная о других пользователях (папки) на AWS S3

https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

Принимая сообщение от Jim в качестве отправной точки, я пытаюсь добиться того, чтобы пользователь не получал , зная о существовании других пользователей, имеющих доступ к одному и тому же ведру при использовании консоли S3. Решение Джима, а также другие, которые я нашел, ограничивают доступ данного пользователя к содержимому внутри папки. Но ни одно из решений не позволяет пользователю «u» выполнять то, что я называю «частичным листингом», т. Е. Даже не отображать папки, содержимое которых не разрешено «u».

Следующая запись также очень похожа на мой вопрос:

How to set up S3 Policies for multiple IAM users such that each individual only has access to their personal bucket folder?

Но в отличие от установки в таком посте, мне нужно напоминать структуру файловой системы, которая имеет «промежуточную» домашнюю папку между имя ведра и папки для конкретного пользователя (как в пост Джима):

mybucket/дома/user1

mybucket/дома/user2

Что я сделал до сих пор выглядят следующим образом:

  • Создан единое ведро, а также ряд «папки» внутри него
  • Создан число пользователей, которые я сгруппированный вместе группа. Каждый пользователь имеет соответствующую папку внутри ведра с тем же именем
  • Setup СИА политики, которые я прилагаю к группе следующим образом:

    { 
        "Version": "2012-10-17", 
        "Statement": [ 
        { 
         "Sid": "AllowUsersToSeeBucketListInTheConsole", 
         "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], 
         "Effect": "Allow", 
         "Resource": ["arn:aws:s3:::*"] 
        }, 
        { 
         "Sid": "AllowRootAndHomeListingOfMyBucket", 
         "Action": ["s3:ListBucket"], 
         "Effect": "Allow", 
         "Resource": ["arn:aws:s3:::mybucket"], 
         "Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}} 
        }, 
        { 
         "Sid": "AllowListingOfUserFolder", 
         "Action": ["s3:ListBucket"], 
         "Effect": "Allow", 
         "Resource": ["arn:aws:s3:::mybucket"], 
         "Condition":{"StringLike":{"s3:prefix":["home/${aws:username/*"]}} 
        } 
        ] 
    } 
    

Я понимаю, что Sid «AllowRootAndHomeListingOfMyBucket» выше разрешает «ListBucket», когда префикс «home /». Это фактически позволяет любому пользователю «u» в группе перечислить весь набор папок «f» внутри «домашней» папки, независимо от того, будет ли «u» иметь доступ к данному элементу «f» или нет. То, что я не знаю, есть ли какое-либо разумно разработанное правило «Запретить», которое ограничило бы даже перечисление тех папок, содержимое «u» не разрешено видеть.

По словам Боба Кинни это было невозможно еще в 2013 году:

IAM Policy to list specific folders inside a S3 bucket for an user

Однако я не уверен, что если что-то эволюционировали в то же время. Любое предложение очень ценится.

спасибо.

ответ

1

Нет, это невозможно, потому что политика позволяет не то, что вы можете увидеть , а то, что вы можете попросить, чтобы увидеть. И запрос S3 на просмотр списков объектов выполняется с помощью префикса и делиметра.

При навигации ведра, за кулисами, консоль запрашивает эти вещи:

  • Нажмите на ведре: Список корень ведра (префикс пустой строка с разделителем /) - - возвращает все распространенные префиксы («папки») и все объекты в корне до одного /. (Это не показано, но имена папок фактически заканчиваются /, когда вы создаете папки с помощью консоли - это единственная причина, по которой консоль показывает их как папки - скрытые / в конце того, что на самом деле является обычным пустым объектом) ,

  • Нажмите на home: Список все на приставке home/ с разделителем / - возвращает все общие префиксы и объекты под home/ до более один / - так, это возвращает home/david/, home/emily, home/genevieve/, home/james/ и т.д.

  • нажмите на david: Список всех на приставкой home/david/ с разделителем / ... вы, возможно, получить язь а.

Обратите внимания, как эти три клика соответствует разрешенным действиям в блоге - список корень, лист домой, список определенного каталога пользователя под домом.

Отсутствие разрешений, чтобы перечислить домашние каталоги других пользователей, вы можете видеть, что они существуют, но вы не можете просверлить им dowm.

... подтверждая политику контролировать то, что вы можете попросить, не то, что вы можете увидеть . Чтобы перейти в собственный домашний каталог, вы должны иметь возможность перечислять домашние каталоги, или вы не можете перейти к своей. Это основная причина, по которой это невозможно сделать с консолью - нет никакой политики, которую вы можете написать, которая запрещает пользователям видеть другие записи в пределах одного уровня иерархии / -delimited, которую они : разрешено видеть, потому что разрешение применяется к запросу, а не к ответу.