Документация aws по java. предполагается, что клиент sts не работает?

В качестве предварительного требования см. Страницу это.

Таким образом, я могу создать небольшое приложение, которое буквально копирует код, который они предоставляют. Он выполняется для данного пользователя, я изменил глобальные переменные на правильные значения и могу предположить, что роль STS мне нужна, через интерфейс командной строки AWS. Однако этот код по-прежнему не принимает на себя надлежащую роль.

Я экспортирую код в виде исполняемого файла jar, помещаю его в свой экземпляр EC2 (базовый экземпляр AWS linux) и запускаю. У меня он выводит ключи из учетных данных STS, которые являются правильными и правильными, но как только он переходит к клиенту S3, я получаю отказ в доступе (403).

Мои роли следующие:

  • EC2 не имеет роли, но в файле учетных данных есть информация о доступе пользователя (назовем его MyUser)
  • MyUser может принимать на себя роль STS и функциональность IAM (функциональность IAM не требуется, это просто для целей тестирования)
  • Роль STS принимается только MyUser и обеспечивает полный доступ к S3 внутри учетной записи.

Документация AWS иногда бывает неудачной, но я не могу найти кого-либо еще, у кого есть проблемы с этим кодом. Как я уже сказал, если я сделаю тот же процесс принятия роли STS через CLI, я смогу это сделать, и он будет работать правильно, что еще больше запутывает меня.

Заранее спасибо всем, кто может помочь!

Вы запускаете этот код и интерфейс командной строки с одного компьютера, используя одни и те же учетные данные?

John Hanley 11.08.2018 06:35

да. EC2 не имеет разрешений. В нем есть учетные данные MyUser, поэтому он действует как пользователь. Я запускаю cli на этом экземпляре. Я вызываю команду CLI accept role и правильно настраиваю переменные среды. Когда я пробую команды S3, они работают.

LindCloud 12.08.2018 00:45
1
2
1 670
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Страница, на которой вы связаны, имеет неправильный код в соответствии с их документацией. У метода AssumeRole другой пример кода неверен. Есть другая документация, которая решает эту проблему, см. Этот страница. В примере документации API есть

AssumeRoleResult response = client.assumeRole(request);

Если функция AssumeRole возвращает объект AssumeRoleResult, учетные данные которого отличаются от учетных данных, возвращаемых из класса GetSessionTokenRequest. Возвращенные учетные данные имеют разную длину / размер и по какой-то причине недействительны.

ИСПРАВЛЕНИЕ:

Этот код, показанный на их документация, недействителен.

stsClient.assumeRole(roleRequest);
GetSessionTokenRequest getSessionTokenRequest = new GetSessionTokenRequest();
getSessionTokenRequest.setDurationSeconds(900);
GetSessionTokenResult sessionTokenResult = stsClient.getSessionToken(getSessionTokenRequest);
Credentials sessionCredentials = sessionTokenResult.getCredentials();

Приведенный выше код следует заменить следующим найденным здесь.

AssumeRoleResult response = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = response.getCredentials();

Другие вопросы по теме