我可以将 Amazon AWS Lambda 用作可信计算的安全飞地吗?
Posted
技术标签:
【中文标题】我可以将 Amazon AWS Lambda 用作可信计算的安全飞地吗?【英文标题】:Can I use Amazon AWS Lambda as a secure enclave for trusted computing? 【发布时间】:2017-06-18 02:27:36 【问题描述】:我想使用 AWS Lambda 代表第 3 方执行计算,然后向他们证明我是按预期进行的。证明将是函数体、请求和响应的加密签名摘要。理想情况下,亚马逊会用自己的私钥签署摘要并发布他们的公钥以允许验证签名。这个想法类似于新的英特尔芯片通过 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 是否可以实现类似的功能?
【问题讨论】:
【参考方案1】:AWS 根据安全性有不同的方法。您可以设置可以使用特定资源的内容以及使用方式。
当然,您可以执行所描述的操作。您可以识别请求、响应和使用的代码的确切版本。问题是如果您想在处理请求时签署代码。更简单的方法是在部署时计算。
对于第一种情况 - 您需要能够访问源代码的语言。 Like with Python,你可以得到它,签名并退回,或者存放在某个地方。
第二种情况 - 我会使用tagging。
【讨论】:
您的回答没有解决关键问题:我想证明执行了特定计算,在输入 Y 上使用代码 X 产生输出 Z。通常的方法是使用加密证明来自受信任的一方。在英特尔 SGX 的情况下,硬件飞地提供证明,受信方是英特尔。微软正在开发一个受信任的软件飞地,作为 Coco 的一部分在他们的虚拟机管理程序中运行。我希望亚马逊正在沿着这些方向努力。 使用 AWS,您可以设置另一个层,该层将负责签名,并以所有各方都可接受的方式提供该信息。所有这些“东西”只是另一层——由英特尔、微软或任何其他公司提供。如果您信任 PKI - 您可以签署包括该层在内的所有内容,并向您的客户提供完整信息。 或以其他方式。您无法为自己提供的只是受信任的第三方。您可以通过发送包含所有信息的日志来解决此问题。这样你就可以尝试欺骗他们,但他们总是可以检查发生了什么。【参考方案2】:让我们先做一些定义,Lambda 不是服务器,而是运行您的代码的服务。它不直接提供任何签名,而是提供您在 AWS 上为其配置的签名。
Secure Enclave 是一种实现方式或一种 TPM(可信平台模块),这可以通过多种方式完成,Secure Enclave 是最好的一种。 对您的问题的简短回答是肯定的,只要您实现所需的代码并添加所有必需的配置、SSL 等即可。
我建议您阅读以下内容:http://ieeexplore.ieee.org/document/5703613/?reload=true
如果您想要开箱即用的 TPM,您可以使用 microsoft project:https://github.com/Microsoft/TSS.MSR
【讨论】:
【参考方案3】:使用 IAM 还有另一种解决方案。您可以为您的客户预置一个对 Lambda 源代码具有读取权限的 IAM 角色。通过使用公共 lambda 端点(看起来像 https://api-id.execute-api.region.amazonaws.com/STAGE
的端点),您可以向客户保证请求直接针对这个特定的 lambda 函数。
您的客户可用的 IAM 角色有权执行以下操作:
查看所有修订版的 lambda 代码和其他详细信息 读取 API 网关配置以验证请求是否直接命中 lambda,并且不会转到其他位置。然后,您的客户需要做的就是使用给定的 IAM 角色在他们的最后针对 lambda 设置审计。他们可以设置一个定期 cron,在更新时下载所有版本的 lambda。如果您有预审流程 - 可以很容易地针对他们的警报进行配置。
请注意,这依赖于“AWS”的善意运行以及以下基本假设:
-
AWS Lambda 正在运行它配置的代码。
AWS 管理 API 返回正确的响应。
发出警报的时间是合理的。这更容易,因为您也可以下载以前的 lambda 代码版本。
所有这些都是合理的假设。
【讨论】:
以上是关于我可以将 Amazon AWS Lambda 用作可信计算的安全飞地吗?的主要内容,如果未能解决你的问题,请参考以下文章
将 Spring boot/cloud 与 Amazon AWS lambda 一起使用不会注入值