Подписание запроса шлюза API AWS с использованием узла

1

Я искал способы ограничить доступ к API, разработанному для использования функции AWS Lambda, написанной на javascript.

Я нашел документацию о том, как использовать AWS Signature S4, но я до сих пор не понимаю.

Согласно созданию подписи, после применения псевдокода я должен получить подпись, которая будет помещена в заголовок.

Я нашел следующий код, который обращается к этому вопросу:

// Example of signature generator

var crypto = require("crypto-js");

function getSignatureKey(Crypto, key, dateStamp, regionName, serviceName) {
    var kDate = Crypto.HmacSHA256(dateStamp, "AWS4" + key);
    var kRegion = Crypto.HmacSHA256(regionName, kDate);
    var kService = Crypto.HmacSHA256(serviceName, kRegion);
    var kSigning = Crypto.HmacSHA256("aws4_request", kService);
    return kSigning;
}

console.log(getSignatureKey(crypto,'secretkey','date','us-east-2','iam'));

Вот мой первый вопрос, я не знаю, какой должен быть результат getSignatureKey()? Это связано с тем, что в документации это очень длинная строка, в то время как я получил результат: {x: x, x, x, x, x, x, x], sigBytes: 32}, где x - случайные номера.

Более того, после получения подписи и заполнения заголовка запроса с полем "авторизация" и другими, как мне фильтровать непростые запросы? Должен ли я создавать политику для AWS API, чтобы он разрешал только подписанные запросы? Здесь, я думаю, я должен следовать Подписанию запросов.

Спасибо!

  • 0
    Со страницы, которую вы процитировали: «В следующем примере показан производный ключ подписи, полученный в результате этой последовательности операций хеширования HMAC. Здесь показано шестнадцатеричное представление каждого байта в двоичном ключе подписи. « Ваши 32 слова »(байты) эквивалентны до 64 символов гекса. Шестнадцатеричное представление удобно для глаз, но вам не нужен ключ подписи в шестнадцатеричной форме - это только для иллюстрации.
  • 0
    Спасибо! Тем не менее, если мне не нужна подпись в шестнадцатеричном формате, какой формат ввести в заголовке?
Показать ещё 1 комментарий
Теги:
amazon-web-services
signature

2 ответа

-2

API Amazon использует сигнатуры, полученные из ваших ключей доступа, для контроля доступа к ресурсам Amazon. Я думаю, что вы путаете это с контролем доступа к API Gateway, который отличается.

API Gateway поддерживает несколько механизмов контроля доступа, в том числе API учета и отслеживания, используемый клиентами с помощью ключей API. Стандартные роли и политики AWS IAM предлагают гибкие и надежные средства контроля доступа, которые могут применяться ко всему набору API или отдельным методам. Пользовательские авторизаторы и пулы пользователей Amazon Cognito предоставляют настраиваемые разрешения на авторизацию и проверку подлинности.

Контроль доступа в интерфейсе API

-2

Вот простая реализация Signed URL. Пакет aws-cloudfront-sign предлагает более простую реализацию.

var cfsign = require('aws-cloudfront-sign');

var signingParams = {
  keypairId: process.env.PUBLIC_KEY,
  privateKeyString: process.env.PRIVATE_KEY,
  // Optional - this can be used as an alternative to privateKeyString
  privateKeyPath: '/path/to/private/key',
  expireTime: 1426625464599
}

// Generating a signed URL
var signedUrl = cfsign.getSignedUrl(
  'http://example.cloudfront.net/path/to/s3/object', 
  signingParams
);

https://aws.amazon.com/blogs/developer/creating-amazon-cloudfront-signed-urls-in-node-js/

Назначение SignedURL - это личное содержимое.

Более подробная информация на,

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html

Надеюсь, поможет.

  • 0
    Это CloudFront, а не Signature V4.
  • 0
    Я попробую это и позже прокомментирую результаты. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню