Я могу попытаться помочь вам с двумя альтернативами, но для этого мне нужно подтвердить ваш вариант использования. Как я понял, вам необходимо предоставить доступ конкретному c пользователю для чтения (в течение определенного промежутка времени) указанного c s3 объекта. Если это так, вот мои предложения:
Первая альтернатива - попытаться заставить ваше решение работать. Но вам нужно протестировать его, потому что у меня нет этого сценария: сначала я бы удалил virtual_agent_native_iam_role
и оставил только task_role
. Мне по-прежнему нужно вызывать AssumeRole, используя task_role
и спецификацию c $bucket/$objectKey
. Но в конфигурации вашей роли чего-то не хватает. Согласно документации по API предположительной роли :
Полученные разрешения сеанса являются пересечением политики, основанной на идентификации роли, и политик сеанса.
Таким образом, чтобы это работало, ваши политики task_role
должны иметь разрешения, обеспечивающие более широкий доступ к s3, и ваш вызов метода только ограничит уже существующие политики. В этом случае я бы прикрепил новую политику к вашему task_role
в вашем шаблоне terraform, чтобы разрешить действие s3:GetObject
для всех объектов в корзине (или, если необходимо, для всех корзин в вашей учетной записи, в зависимости от вашего варианта использования).
Вызов AssumeRole будет использоваться для ограничения доступа временных учетных данных к конкретным c bucket/objectkey
.
Но есть и вторая альтернатива, которая, как мне кажется, будет гораздо более простой. Но вам нужно оценить, применимо ли это к вашему варианту использования:
S3 позволяет вам создать временный URL для указанного объекта c, который позволит пользователю, у которого есть URL, получить объект в течение определенного c интервала времени. Для этого решения вам также необходимо добавить политику с разрешениями на s3:GetObject
для task_role
. Но в этом случае вам не нужно будет вызывать метод AssumeRole в вашем коде. Вы можете просто вызвать метод, чтобы создать предварительно подписанный URL-адрес и отправить его обратно вашему пользователю. Вы можете найти более подробную информацию об этой альтернативной реализации, используя java -sdk здесь .
При таком сценарии пользователь будет иметь доступ только к выбранному объекту. Не все ведро.