Я не уверен, что полностью понимаю, о чем вы спрашиваете, но звучит так:
Каждая роль связана с набором "пакетов"? Какой бы ни была стая. Некоторые пользователи имеют доступ к нескольким «пакетам». Когда они используют AWS S3 API, они должны видеть все доступные им «пакеты».
Во-первых, я предлагаю использовать для этого роли / политики IAM или политики корзины.
Роль IAM
В документе политики, прикрепленном к группе / пользователю, укажите необходимые им команды S3 и добавьте каждый сегмент / папку в качестве ресурса. Затем, когда они попытаются использовать API, они увидят только те результаты, которые им разрешено использовать
ПОЛИТИКА ВЕДРО
В каждой корзине / папке используйте политика, которая запрещает использование ресурса всем, кто не принадлежит определенной роли. Таким образом, каждый префикс будет иметь роль, а политика будет разрешать доступ только к этой роли. Присоедините эту роль к группе, затем добавьте пользователей в эту группу.
AWS S3 API
Если вы не можете использовать эти параметры, есть также aws s3 sync
С syn c вы можете использовать комбинацию файлов --include
и --exclude
. Во-первых, исключите все в одном файле. Затем дайте явные сегменты для включения в зависимости от потребностей этого пользователя. Это, пожалуй, наиболее динамичный вариант c, и для него не требуются разрешения в AWS учетной записи
Использование запроса
Вы также можете выполнять запросы на основе некоторых значения ключа, а затем направьте его в нужную вам команду. Документация по синтаксису запроса приведена здесь: http://jmespath.org/specification.html#contains
aws s3api list-objects \
--bucket $BUCKET_NAME \
--query "Contents[?contains(Key, '$PREFIX') || contains(Key, '$PREFIX_2')].[Key]" \
--output=text \
| xargs -i sh -c "aws s3 cp s3://$BUCKET_NAME/{} ./{}"