Подтвердить что ты не робот

API-шлюз, как пройти авторизацию AWS IAM от клиента отдыха

Я пытаюсь проверить конечную точку аутентифицированного API-шлюза от клиента-клиента. Как я могу генерировать/устанавливать заголовки авторизации "AWS_IAM" при выполнении запроса?

4b9b3361

Ответ 1

Вы можете использовать Cognito с идентификатором пула "public", а затем присоединить роль к идентификатору пула Cognito, роль которого связана с вашим API GATEWAY

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'REGION:YOUR_POOL_ID',
});

Используйте AWS STS для получения временных учетных данных с ограниченными привилегиями. После этого вы можете использовать API-шлюз с аутентификацией AWS_IAM

Сгенерированный SDK принимает учетные данные AMI, вы должны инициировать клиент с тем, который вы получили от STS:

var apigClient = apigClientFactory.newClient({
    accessKey: 'ACCESS_KEY',
    secretKey: 'SECRET_KEY',
    sessionToken: 'SESSION_TOKEN', //OPTIONAL: If you are using temporary credentials you must include the session token
    region: 'eu-west-1' // OPTIONAL: The region where the API is deployed, by default this parameter is set to us-east-1
});

Примечание. Строго минимальные роли в вашем пуле, то есть общедоступный идентификатор, каждый орган может использовать его для временного или фиксированного (для отслеживания пользователей через устройства) user_/app_ id.

Обновление апреля 2016 года: Для комментариев Кристины: Документация о том, как использовать STS.

TL; DR: В основном после того, как ваш провайдер Identity перезвонит вам (Google, в моем случае), у вас будет токен (OpenID, в моем случае), просто подайте его на STS:

AWS.config.credentials = new AWS.WebIdentityCredentials({
  RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>',
  ProviderId: 'graph.facebook.com|www.amazon.com', // Omit this for Google
  WebIdentityToken: ACCESS_TOKEN
});

Ответ 2

Вам нужно будет реплицировать логику API Gateway AWS v4 request signature, чтобы это сделать. В идеале вы должны посмотреть на сгенерированный Javascript/Java SDK для вашего API, чтобы получить представление о том, как рассчитываются эти сигнатуры запроса. Я предлагаю вам отключить аутентификацию для ваших запросов на тестирование.