簡體   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