繁体   English   中英

使用节点签署 AWS API 网关请求

[英]Signing AWS API Gateway Request using Node

我一直在寻找方法来限制对使用 JavaScript 编写的 AWS Lambda 函数的 API 的访问。

我找到了有关如何使用 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() 的输出应该是什么? 这是因为在文档中它是一个很长的字符串,而我得到的输出是 {words:[x,x,x,x,x,x,x,x],sigBytes: 32},其中 x 是随机的数字。

此外,在获取签名并使用“授权”字段和其他字段填充请求的标头后,如何过滤不正确的请求? 我是否必须为 AWS API 创建一个策略,以便它只允许签名的请求? 在这里,我想我应该遵循Signing Requests

谢谢!

这是签名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

希望能帮助到你。

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

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

在API网关中控制访问

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM