2017-10-21 117 views
1

我一直在寻找方法来限制对使用JavaScript上编写的AWS Lambda函数进行API制作的访问。使用节点为AWS API网关请求签名

我发现了关于如何使用AWS Signature S4的文档,但我仍然不明白。

根据creating a signature,在应用伪代码后,我应该将签名放在标题上。

我发现下面的代码,解决了这一点:

// 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的输出()?这是因为在文档中它是一个很长的字符串,而我得到的输出是{words:[x,x,x,x,x,x,x,x],sigBytes:32},其中x是随机的数字。

此外,在获得签名并填写请求的标题以及“授权”字段和其他人之后,如何过滤不合适的请求?我是否必须为AWS API创建策略,以便它只允许签名的请求?在这里,我想我应该按照Signing Requests

谢谢!

+0

从你所引用的页面:“下面的例子显示,从HMAC哈希操作顺序产生的派生签名密钥**这显示在二进制签名密钥每个字节的十六进制表示* *“你的32个字”(字节)等于64个十六进制字符。十六进制表示是眼球友好的,但你不需要十六进制形式的签名密钥 - 这只是为了说明。 –

+0

谢谢!不过,如果我不需要十六进制签名,那么头文件中引入的格式是什么? –

+0

'getSignatureKey'返回您将用于签署规范请求的密钥,而不是签名本身。 –

回答

-1

以下是签名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

我会尝试一下,然后评论结果。谢谢! –

-2

Amazon API使用派生自您的访问密钥的签名来控制对Amazon资源的访问。我认为你将这与控制对API网关的访问混淆是不同的。

API网关支持多种访问控制机制,包括客户端使用API​​密钥的计量或跟踪API使用。标准的AWS IAM角色和策略提供灵活而强大的访问控制,可以应用于整个API集或单个方法。自定义授权人和Amazon Cognito用户池提供可定制的授权和身份验证解决方案。

Control Access in API Gateway