我想使用AWS Lambda代表第三方执行计算,然后向他们证明我是按预期执行的。证明将是函数体,请求和响应的加密签名摘要。理想情况下,亚马逊会使用自己的私钥对摘要进行签名,并发布其公钥以允许验证签名。这个想法类似于新的英特尔芯片通过SGX(软件保护扩展)提供的“安全区”。
现有的Lambda服务具有一些所需的成分。例如,GetFunction响应包括唯一标识函数实现的CodeSha256字段。 Amazon API Gateway允许您向Lambda服务发出HTTPS请求,这可能允许TLSNotary样式的请求 - 响应内容证明。但为了做到这一点,我认为AWS Lambda需要直接提供签名。
Microsoft Azure正在其项目Bletchley中处理受信任的软件包围区(“cryptlets”): https://github.com/Azure/azure-blockchain-projects/blob/master/bletchley/bletchley-whitepaper.md https://github.com/Azure/azure-blockchain-projects/blob/master/bletchley/CryptletsDeepDive.md
当前的AWS Lambda是否可以这样?
答案 0 :(得分:3)
AWS根据安全性采用不同的方法。您可以设置可以使用特定资源的方式,以及使用哪种方式。
当然,你可以做所描述的事情。您可以识别所使用的代码的请求,响应和确切版本。问题是,如果要在处理请求时签署代码。更简单的方法是在部署时计算。
对于第一种情况 - 您需要具有访问源的语言。 Like with Python,您可以获取,签名并将其返回,或存储在某处。
第二种情况 - 我会使用tagging。
答案 1 :(得分:3)
让我们先做一些定义,Lambda不是服务器,而是运行代码的服务。它不直接提供任何签名,而是在AWS上为其配置。
Secure Enclave是一种实现或一种TPM(可信平台模块),这可以通过多种方式完成,而Secure Enclave是最好的之一。 对您的问题的简短回答是肯定的,只要您实施所需的代码并添加所有必需的配置,SSL等就可以完成。
我建议您阅读以下内容:http://ieeexplore.ieee.org/document/5703613/?reload=true
如果您想要开箱即用TPM,可以使用微软项目:https://github.com/Microsoft/TSS.MSR
答案 2 :(得分:0)
通过使用 IAM,还有另一种解决方案。您可以为您的客户预置一个 IAM 角色,该角色具有对 Lambda 源代码的读取访问权限。通过使用公共 lambda 端点(看起来像 https://api-id.execute-api.region.amazonaws.com/STAGE
的端点) - 您可以向客户保证请求直接命中这个特定的 lambda 函数。
您的客户可用的 IAM 角色有权执行以下操作:
然后,您的客户所需要做的就是使用给定的 IAM 角色在他们的末端设置针对 lambda 的审计。他们可以设置一个定期的 cron,在更新时下载 lambda 的所有版本。如果您有预审流程 - 可以轻松地针对他们的警报进行配置。
请注意,这依赖于善意运行的“AWS”以及以下基本假设:
所有这些都是合理的假设。