2017-10-21 99 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

相關問題