Можете ли вы выполнить запрос API S3 с несколькими префиксами? - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь настроить логи c, которые будут нацелены на определенные c префиксы для роли пользователя. Следующее:

Пользователь пакета: имеет доступ ко всему, что есть в пакете, часть 1: имеет доступ только к префиксу части 1, часть 2: имеет доступ только к части 2 ... Часть N: вплоть до N чисел

Обычно, если у человека нет пакета, мне нужно было бы указать каждый префикс, к которому он имеет доступ, чтобы получить все содержимое. Нужно ли мне вызывать несколько запросов, а затем просто добавлять их? Какой общий рабочий процесс для этого? Я новичок в AWS, поэтому, пожалуйста, прости мое невежество. Заранее спасибо!

РЕДАКТИРОВАТЬ ДЛЯ ЯРКОСТИ Примерно так:

$iterator = $client->getIterator('ListObjects', array(
    'Bucket' => 'my-bucket'
), array(
    'limit'     => 999,
    'page_size' => 100,
    'prefix' => (this is where I want multiple prefixes to go)
));

foreach ($iterator as $object) {
    echo $object['Key'] . "\n";
}

1 Ответ

0 голосов
/ 26 февраля 2020

Я не уверен, что полностью понимаю, о чем вы спрашиваете, но звучит так:

Каждая роль связана с набором "пакетов"? Какой бы ни была стая. Некоторые пользователи имеют доступ к нескольким «пакетам». Когда они используют 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/{} ./{}"
...