Правильно генерировать заголовки аутентификации AWS из временных учетных данных - PullRequest
0 голосов
/ 23 октября 2018

У меня есть API-шлюз с двумя конечными точками:

  1. Тип авторизации - NONE.Делегаты в лямбду с именем fooLambda.
  2. Тип авторизации: AWS_IAM.

Предполагается, что клиент вызывает конечную точку 1 для получения учетных данных из fooLambda, чтобы ониможет успешно вызвать конечную точку 2.

Я использую AWS Node.js SDK и модуль aws4 npm для подписания запросов AWS.Вот некоторый псевдокод для моего fooLambda:

// get the role using this...
STS.assumeRole({
    RoleArn: 'arn of my role that can call endpoint 2',
    RoleSessionName: 'foobar',
})

// parse the sts creds like this....
const stsCredentials = STS.credentialsFrom(assumeRoleResponse)

// get a collection of signed headers like so
const signedHeaders = aws4.sign({
    service: 'execute-api',
    region: process.env.REGION,
}, {
    secretAccessKey: stsCredentials.secretAccessKey,
    accessKeyId: stsCredentials.accessKeyId,
    sessionToken: stsCredentials.sessionToken,
}).headers;

// return the following headers to the client
return {
    authorizationHeader: signedHeaders['Authorization'],
    stsSecurityToken: signedHeaders['X-Amz-Security-Token'],
}

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

ОБНОВЛЕНИЕ: Когда я использую тип авторизации подписи AWS Postman и предоставляю свои параметры accessKey, secretKey, региона aws, имени сервиса и токена сеанса - он создает авторизациюзаголовки и запрос к конечной точке 2 успешен!

После проверки сгенерированных почтальоном заголовков авторизации кажется, что заголовок авторизации имеет другую подпись.Теперь проблема в следующем: «Как почтальон генерирует правильный заголовок авторизации, а aws4 нет?»

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

При использовании функции aws4.sign необходимо указать путь к запросу.В противном случае существует несоответствие между подписанным запросом и фактическим запросом, и AWS прекратит работу.

0 голосов
/ 27 октября 2018

1. Вы должны прикрепить следующую политику AmazonAPIGatewayInvokeFullAccess a к вашим пользователям, возможно, вы также можете создать группу пользователей и присоединить эту политику.

2. Просто для удаления, создайте новый метод (конечную точку) без аутентификации, что-то вроде:

    https://uid.execute-api.regionidentifier.amazonaws.com/test/ping

Итак, мы отбрасываем любую проблему, связанную с apigateway.

После внедрения метода "ping" вы можете использовать почтальон для его проверки.

3. Убедитесь, что AWS_IAM_AUTH работает в вашем методе (конечная точка).

Итак, я нашел это видео , которое может быть очень полезно для проверки вашей конечной точки с заголовком auth.

Удачи, расскажите позже, как все прошло.

...