Как войти в консоль AWS, используя ключ доступа, секретный ключ и токен сеанса?

У меня есть пул пользователей cognito и пул удостоверений, а также приложение, в котором я интегрировал все эти вещи, выполняю регистрацию и вход и получаю временные учетные данные, такие как ключ доступа, секретный ключ и токен сеанса. Я хочу создать кнопку в своем приложении, чтобы после успешного входа появилась одна кнопка для открытия консоли AWS, и этот пользователь мог получить доступ к сервисам AWS, таким как S3.

Я получил эту ссылку, которая может использоваться для создания URL-адреса, который я могу поместить за своей кнопкой, но как это реализовать, я пытаюсь использовать Java, но он не работает

 GetFederationTokenRequest getFederationTokenRequest = 
  new GetFederationTokenRequest();
getFederationTokenRequest.setDurationSeconds(1800);
getFederationTokenRequestet.getName("UserName");

// A sample policy for accessing Amazon Simple Notification Service (Amazon SNS) in the console.

String policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sns:*\"," +
  "\"Effect\":\"Allow\",\"Resource\":\"*\"}]}";

getFederationTokenRequest.setPolicy(policy);

В этой строке написано несколько маркеров. SetDurationSeconds, SetName, SetPolicy имеют эту ошибку


person Manish Goyal    schedule 28.01.2020    source источник
comment
Пожалуйста, предоставьте точные ошибки, которые вы получаете. Желательно использовать копирование + вставка, чтобы избежать ошибок транскрипции.   -  person Guillermo Garcia    schedule 29.01.2020


Ответы (2)


Вы можете сгенерировать URL-адрес консоли AWS из временных учетных данных, получив SigninToken из https://signin.aws.amazon.com/federation конечная точка.

Во-первых, вам нужно создать объект JSON с временными учетными данными AWS:

{
  "sessionId": "<aws access key id>",
  "sessionKey": "<aws secret access key>",
  "sessionToken": "<aws session token>"
}

Используйте этот JSON в качестве значения параметра «Сеанс» в следующем URL-адресе.

https://signin.aws.amazon.com/federation?Action=getSigninToken&Session=<the JSON object>

Ответ JSON будет выглядеть так:

{
  "SigninToken":"VsPfcblaC....."
}

Используйте значение SigninToken в следующем URL-адресе. Он откроет консоль:

https://signin.aws.amazon.com/federation?Action=login&Destination=https://console.aws.amazon.com/&SigninToken=<SigninToken>

Значение «Назначение» может быть URL-адресом конкретной службы, например EC2 или S3.

Я создал пример реализации здесь: https://gist.github.com/janaz/80b1f6054a044ce78cbf5abae7288b50

person Tomasz    schedule 29.01.2020
comment
спасибо за ваши усилия, я пытаюсь интегрировать ваш код Node JS в свой HTML-код, но где-то он не работает. Если вы знаете, как интегрировать оба кода, я попытался конвертировать в Browserfiy, но не получилось, вот мой код, github. com/sparshgoyal024/TestAWS/blob/master/index.html - person Manish Goyal; 29.01.2020

Во-первых, убедитесь, что у вас есть правильные роли IAM с разрешениями на доступ к вашим ресурсам AWS (S3, консоль и т. д.). Подробнее читайте в Руководство разработчика Cognito — роли IAM.

Что касается вашего Java-кода, похоже, что пример в предоставленной ссылке не готов к использованию в качестве «копировать и вставить». Кроме того, это зависит от AWS SDK для Java, который необходимо импортировать в проект.

Обязательно вставьте код под импортом в правильный блок кода. Ошибки Несколько маркеров появляются, когда вы пытаетесь вставить операторы непосредственно в класс, а не в конструктор, метод, инициализатор и т. д.

person Guillermo Garcia    schedule 28.01.2020