2017-06-11 69 views
1

有什麼方法可以檢查是否從預期的lambda函數調用了某個調用,或者您可以將其視爲另一個服務器。確認API調用是從AWS Lambda(或其他服務器)進行的

用例是:我想發出一個websocket事件來通知我的web應用程序,當我的EC2狀態改變時。 (建議更好的方法,如果有的話)我的網絡套接字服務器將是一個EC2實例。所以我想知道,是否有某種方法可以允許對此特定API的調用僅來自有效的AWS Lambda函數?

目前我在想也許我可以只使用一個共享的祕密......但是因爲這永遠不會過期,不知道它是否存在安全風險?

UPDATE

一個念頭浮現在腦海,ISIT確定使用非對稱加密RSA喜歡這個?

哦等,是RSA不適合這樣的數據加密嗎?我讀了它的簽名密鑰?

+1

你指的是什麼樣的ec2狀態改變?您是否期待EC2狀態更改 - > Cloudwatch警報 - > Lambda路徑 – Ashan

+0

@Ashan yes Lambda調用我的服務器以通過websockets向客戶端發送更改通知(Web應用程序)。還是有更好的方式直接從Lambda更新我的應用程序? –

回答

1

我假設您已經爲您創建的SNS主題設置了EC2狀態更改觸發器。

您可以按照AWS SNS documentation中的說明通過處理JSON正文來驗證SNS通知的獨立性。它也有一個Java example但如果你想使用Python,這裏是使用M2Crypto模塊X509驗證部分的example

from M2Crypto import X509 
from base64 import b64decode 

cert = X509.load_cert_string(str(r.text)) 
pubkey = cert.get_pubkey() 
pubkey.reset_context(md='sha1') 
pubkey.verify_init() 
pubkey.verify_update(str_to_sign.encode()) 
result = pubkey.verify_final(b64decode(signature)) 
if result != 1: 
    raise Exception('Signature could not be verified') 
else: 
    return True 

如文檔建議,AWS SDK實現語言可能已經內建就像Ruby一樣。在執行此操作之前檢查它是個好主意。

所以基本上,你應該有接收服務器上SNS使用的X509。

還建議您將您的SNS主題訂閱到HTTPS端點,以便在將通知作爲安全請求發送之前驗證服務器的真實性。 SNS支持驗證列出的證書頒發機構here

+0

我沒有想過SNS,但它是一個好主意。謝謝 –

+0

正如一個好消息,如果你使用lambda作爲處理程序,你甚至不需要HTTPS部分,因爲它會在內部驗證它。當然,X509仍然需要驗證消息。 – hurturk

+0

這是很好的知道,但我想我可能別無選擇,只能使用HTTPS到EC2,因爲我想通過websockets更新客戶端。或者,還有更好的方法?我讀過,我也可以使用AWS IOT,但是這會讓人不知所措? –

相關問題