验证API调用是从AWS Lambda(或其他服务器)进行的

时间:2017-06-11 06:16:18

标签: amazon-web-services amazon-ec2 lambda

有没有办法可以检查是否有预期的lambda函数调用,或者你可以将它视为另一个服务器。

用例是:我想发出一个websocket事件,以便在我的EC2状态发生变化时通知我的网络应用程序。 (建议更好的方法,如果有的话)我的Web套接字服务器将是一个EC2实例。所以我想知道,是否有某种方法允许调用此特定API仅来自有效的AWS Lambda函数?

目前我在想也许我可以使用共享秘密...但是因为它永远不会过期,想知道它是否存在安全隐患?

更新

想到了一个想法,是否可以使用像RSA这样的非对称加密?

等等,RSA不适合这种数据加密吗?我看了它的签名密钥?

1 个答案:

答案 0 :(得分: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的证书颁发机构。