Я искал способы ограничить доступ к 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, чтобы он разрешал только подписанные запросы? Здесь, я думаю, я должен следовать Подписанию запросов.
Спасибо!
API Amazon использует сигнатуры, полученные из ваших ключей доступа, для контроля доступа к ресурсам Amazon. Я думаю, что вы путаете это с контролем доступа к API Gateway, который отличается.
API Gateway поддерживает несколько механизмов контроля доступа, в том числе API учета и отслеживания, используемый клиентами с помощью ключей API. Стандартные роли и политики AWS IAM предлагают гибкие и надежные средства контроля доступа, которые могут применяться ко всему набору API или отдельным методам. Пользовательские авторизаторы и пулы пользователей Amazon Cognito предоставляют настраиваемые разрешения на авторизацию и проверку подлинности.
Вот простая реализация 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
Надеюсь, поможет.