Aws4 singning: что упоминается в параметре URI в задаче 1: создание канонического запроса - PullRequest
0 голосов
/ 06 марта 2019

В документах aws https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html

Step2: канонический URI - это кодированная по URI версия компонента абсолютного пути URI, который представляет собой все в URI от хоста HTTP до символа вопросительного знака («?»), С которого начинаются параметры строки запроса ( если есть) Что это значит?

Можете ли вы объяснить с помощью этого примера запроса https://customer -service.example.com / dev / customer /? Name = alex & country = us

1 Ответ

1 голос
/ 06 марта 2019

Пожалуйста, обратитесь к пакету aws4 npm. Это хорошо задокументировано на странице github

В своей документации AWS рекомендует использовать aws-sdk, поскольку подписывание URL-адреса может стать утомительным для очень простой задачи (например, получить объект s3). Мы использовали aws4, потому что импорт aws-sdk в наш код привел к ненужным зависимостям.

Ниже приведен пример списка секретов из aws secretmanager.

В приведенном ниже примере,

  • Сервис AWS обозначен сервисом: 'secrettsmanager'
  • действие обозначено «X-Amz-Target»: «secretsmanager.ListSecrets»

Вы можете обратиться к API службы corrospoding aws, чтобы изменить приведенный ниже пример для своих нужд.

Обратите внимание, что в приведенных ниже примерах предполагается, что ec2 назначена правильная роль для выполнения этого запроса. Вот почему вы увидите, что он использует sts в примере ниже.

Если ваш случай отличается, пожалуйста, проверьте документацию , чтобы проверить, как секретный ключ передается через API aws4.

var http  = require('http'),
    https = require('https'),
    aws4  = require('aws4')

request(aws4.sign({service: 'sts', path: '/?Action=GetSessionToken&Version=2011-06-15'}))

function request(o) { https.request(o, function(res) { res.pipe(process.stdout) }).end(o.body || '') }

request(aws4.sign({
    service: 'secretsmanager',
    region: 'us-east-1',
    method: 'POST',
    path: '/',
    headers: {
        "Accept-Encoding": "identity",
        "X-Amz-Target": "secretsmanager.ListSecrets",
        "Content-Type": "application/x-amz-json-1.1"
    },
    body: '{}'
  }))
...