У меня есть простая корзина, которая выглядит как images.mysite.com
на моем S3 и других корзинах, содержащих резервные копии и т. Д.
Я хочу разрешить конкретному пользователю доступ к images.mysite.com
корзине для загрузки изображений. Однако я НЕ хочу, чтобы он видел другие ведра; даже не то, что они существуют.
Я не мог создать такую политику; Каждый раз, когда я пытаюсь сделать что-то ограничивающее, это приводит к блокировке списка любых сегментов.
https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/
. Таким образом, вы не дадите им увидеть весь список и ничего не измените в вашей текущей политике.Ответы:
Я пробовал это некоторое время и наконец нашел рабочее решение. Вы должны использовать разные «Ресурсы» в зависимости от того, какое действие вы выполняете. Также я включил некоторые недостающие действия в предыдущий ответ (например
DeleteObject
) и ограничил еще несколько (напримерPutBucketAcl
).Сейчас у меня работает следующая политика IAM:
Действия с ведром и с объектами должны иметь разные arn.
источник
ListAllMyBuckets
иGetBucketLocation
для всех сегментов S3 ("arn:aws:s3:::*"
будет работать, а не"*"
для ресурса). Как указано в этом сообщении в блоге AWS, «в стороне, в настоящее время вы не можете выборочно отфильтровать определенные сегменты, поэтому у пользователей должно быть разрешение на перечисление всех сегментов для консольного доступа».Наш вариант использования: предоставить клиентам нашего облачного приложения пространство для резервных копий, к которому клиенты могут получить доступ напрямую с помощью стандартных инструментов S3. Конечно, ни один клиент не должен видеть, что есть у других клиентов.
Как объяснил cloudberryman: «Вы можете либо перечислить все сегменты, либо ни одного», поэтому нам нужно найти обходной путь. Задний план:
Предоставление прав ListAllMyBuckets пользователю необходимо, чтобы консоль AWS S3 или S3Fox подключались без сообщения об ошибке. Но ListAllMyBuckets перечисляет все сегменты независимо от назначенных ресурсов (на самом деле работает только arn: ... ::: *). Если вы спросите меня, это серьезная ошибка. Btw. запрет ListBucket для всех сегментов не препятствует их включению в список, поскольку ListBucket предоставляет права на перечисление содержимого корзины.
Есть 3 возможности, которые я рассмотрел как обходные. Я выбрал последний.
(1) используйте загадочные имена корзин, например GUID
Преимущество: простота настройки
Недостаток: сложно управлять, особенно для клиента. (представьте, что вы нашли конкретный GUID среди тысяч других.) Также показывает количество сегментов = количество клиентов, использующих службу резервного копирования.
(2) используйте одну корзину с папками для конкретных клиентов
Вот как Amazon предлагает в своих примерах S3 / IAM предоставлять пространство для доступа только определенным пользователям или группам пользователей. См .: AWS Примеры политик IAM.
Преимущество: довольно проста в настройке, соответствует идеям AWS.
Недостаток: вынуждает сделать существование всех ведер общедоступным, чтобы клиент мог найти свое "домашнее" ведро. Учет AWS предоставляет статистику использования корзины, но не использования папок, что затрудняет расчет стоимости для клиента.
(3) не предоставлять права доступа для ListAllMyBuckets
Преимущество: вы получаете то, что хотите: клиенты не видят корзины других клиентов
Недостаток: клиент не видит своего ведра. S3Browser поставляется с красивым сообщением «не могу сделать» и запрашивает имя сегмента для ввода. S3Fox выдает сообщение об ошибке при подключении к корневому каталогу, но разрешает прямую навигацию к клиентскому сегменту, если имя сегмента известно. Консоль Amazon S3 вообще не работает.
Надеюсь, это помогло справиться с S3 IAM по мере необходимости.
источник
Невозможно предоставить доступ к консоли S3 без
ListAllMyBuckets
разрешения.В моем случае (и, возможно, в вашем, будущем читателе) приемлемой альтернативой является перенаправление пользователей при входе непосредственно в корзину, которую вы хотели бы, чтобы они видели.
Для этого добавьте к URL-адресу входа в IAM следующую строку:
/s3/?bucket=bucket-name
Полный URL-адрес для входа (замените свой псевдоним и имя корзины ):
https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name
Политика IAM (заменить название корзины ):
Для получения дополнительной информации о том, как создавать разрешения для конкретных сегментов для пользователей, прочтите этот блог: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /
источник
Попробуйте эту политику. также примите во внимание, что нет возможности разрешить пользователю отображать только выбранный сегмент. Вы можете перечислить все сегменты или ни одного.
источник
s3:*
чтобы заставить его работать на меня. У меня тоже было"Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"]
, но это могло и не понадобиться.Я интерпретирую этот вопрос как: «Могу ли я разрешить доступ к одному сегменту, если другие сегменты не будут доступны и, следовательно, невидимы». Потому что отображение имени корзины, к которой не был предоставлен доступ, все равно приравнивается к утечке информации.
И правильный ответ - нет. Требуемое разрешение - ListAllMyBuckets, которое позволит пользователю видеть ВСЕ сегменты. Отсутствие этого разрешения сделает консоль непригодной для использования.
источник
Существует отличный способ предоставить пользователям доступ к определенному сегменту без знания других сегментов. Групповая политика, подобная приведенной ниже, позволит пользователям видеть только «сегмент А». Единственная загвоздка в том, что пользователь сможет получить доступ к корзине, только если он подключится к данной конечной точке корзины. В примере ниже это bucket-a.s3.amazonaws.com. Для этого, возможно, в корзине также должны быть разрешены «Прошедшие проверку пользователи».
Этот метод был протестирован с Cyberduck в Mac OS / X и с использованием пакета s3cmd.
источник
Не знаете, почему не было проверено ни одного ответа?
Давайте разберем каждое заявление о политике из приведенных выше решений:
Это заявление политики от применяется к содержимому корзины, но не к самому понятию. Вероятно, не об этом вопрос, потому что вы не можете увидеть, что находится в ведре.
Эта политика с двумя операторами, полученная из, дает доступ только для чтения к корзине at (
arn:aws:s3:::your_bucket_here/
) только для чтения , но по-прежнему позволяет выполнять операции CRUD с содержимым корзины (arn:aws:s3:::your_bucket_here/*
).Однако политика включает в себя приведенный ниже оператор, который позволяет пользователю видеть все сегменты в конечной точке. Это , вероятно , не то , что вопрос просили.
Однако это очень полезно, если вы используете клиент, который просматривает магазин S3. Если ваш клиент обращается к магазину, а не к корзине напрямую, значит, вам нужен доступ к списку корзин в корне.
источник
Наверное, самый простой вариант использования:
источник
This policy contains the following error: The policy must contain a valid version string
(listing included)
как перечислить только ведро, в которое может попасть пользователь? Пока (и согласно всем другим ответам) кажется, что AWS не позволит вам это сделать.Для этого есть простой способ или обходной путь с помощью AWS Organizations. Организация AWS позволяет иметь несколько учетных записей пользователей. В вашей основной учетной записи может быть несколько учетных записей AWS (Sub), и какие бы сервисы (s3 / EC2 / *) ни добавлялись, в какие бы учетные записи AWS были видны только эти ресурсы.
См. Https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/
Организация на странице моей учетной записи
источник
Я нашел это решение:
AWS FLOW:
Политика ведра:
Политика IAM:
aws iam get-user -–user-name ИМЯ-ПОЛЬЗОВАТЕЛЯ --profile = ExampleProfile
aws iam get-role --role-name ИМЯ-РОЛИ --profile = ExampleProfile
Источник: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
PS будьте осторожны с политикой ведра, вы можете остаться без разрешений
источник
Как хорошо обсуждалось выше, перечислить только одну корзину на консоли невозможно. Но если доступ к сегменту S3 привязан к IAM, IAM может напрямую обращаться к сегменту, если доступен URL-адрес сегмента. URL-адрес корзины S3 будет таким:
https://s3.console.aws.amazon.com/s3/buckets/BucketName
Где BucketName - это имя сегмента, к которому IAM имеет доступ
источник
Мне удалось получить следующую работу. Означает, что перечисление других сегментов получило сообщение Доступ запрещен. Но я все еще мог видеть ведро, которое я хотел, если бы я подключился с именем ведра, установленным в качестве пути.
Я использовал Cyberduck, чтобы проверить это соединение.
источник
Хотя невозможно ограничить
s3:ListAllMyBuckets
действие определенными сегментами, в качестве обходного пути вы можете отправить им URL-адрес консоли для определенного сегмента, напримерhttps://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/
Источник: ограничивающий список сегментов S3 из консоли S3.
Для этого вам необходимо указать следующий документ политики для данного пользователя или группы:
Где
my-bucket-1
иmy-bucket-2
находятся ваши ведра, чтобы дать доступ для чтения и записи.Связанный:
источник
Попробуйте эту политику. Пользователь не может перечислить какие-либо сегменты, они должны использовать прямую ссылку на разрешенный сегмент.
Например: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview.
источник
Подобно тому, что описано выше:
Однако вот недостающая часть. Хотя получить доступ к корзине через S3-> Home невозможно, можно получить доступ только к желаемой корзине по прямой ссылке.
Вы можете найти дополнительную информацию в следующем сообщении:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/
источник
Решение, приведенное ниже, сработало для меня. Я хотел, чтобы политика предоставляла доступ определенному пользователю my_iam_user в конкретном сегменте my-s3-bucket .
Эта политика позволяет моему пользователю перечислять, удалять и загружать файлы в определенное ведро s3.
источник
Я просто добавляю аналогичную потребность, решаемую этим:
источник
Я использую следующее, чтобы скрыть содержимое корзины от других пользователей. Это не только помогает скрыть другие корзины (не используйте ListAllMyBuckets), но и папки в том же ведре, когда вы создаете одну корзину, но вы хотите, чтобы в ней были вложенные папки, назначающие соответствующие разрешения пользователю / подпапке IAM.
Следующая политика применяется к группе IAM, и все пользователи входят в эту группу. Вам нужно взять
aws:userid
и сделать в ведре подпапку с таким же названием.UserID можно взять:
aws iam get-user --user-name "user_name_for_folder_access":
источник
Мы придумали хорошее простое решение - заблокировать пользователю вход в корневой каталог. Поэтому они должны войти в систему, указав удаленный путь к желаемой папке.
источник
Нет, в настоящее время невозможно ограничить пользователей просмотром отдельных сегментов под root или где-либо еще. Сейчас у вас есть только эти 3 варианта.
Я решил попросить клиента явно использовать имя корзины.
источник
Это подробно описано Amazon на http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket.
источник
Это сработало идеально для меня. Пользователь может загружать, скачивать и получать список файлов, но не может видеть файлы из другой корзины.
источник
Добавьте
Deny
предложение для сегментов, к которым вы не хотите получать доступ. Помните, что они все еще могут быть перечислены, но вы не сможете получить доступ к содержимому внутри них.источник