16

我想使用 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 是否可以实现类似的功能?

4

3 回答 3

3

我们先做一些定义,Lambda 不是服务器,而是运行代码的服务。它不直接提供任何签名,而是您在 AWS 上为其配置的内容。

Secure Enclave 是一种实现或一种 TPM(可信平台模块),这可以通过多种方式完成,Secure Enclave 是最好的之一。对您的问题的简短回答是肯定的,只要您实现所需的代码并添加所有必需的配置、SSL 等,就可以完成。

我建议您阅读以下内容:http://ieeexplore.ieee.org/document/5703613/?reload= true

如果您想要开箱即用的 TPM,您可以使用 microsoft 项目:https ://github.com/Microsoft/TSS.MSR

于 2017-10-09T11:44:19.263 回答
3

AWS 根据安全性有不同的方法。您可以设置可以使用特定资源的内容以及使用方式。

当然,您可以执行所描述的操作。您可以识别请求、响应和使用的代码的确切版本。问题是如果您想在处理请求时签署代码。更简单的方法是在部署时计算。

对于第一种情况 - 您需要可以访问源代码的语言。与 Python 一样,您可以获取它、签名并返回它,或者存储在某个地方。

第二种情况 - 我会使用tagging

于 2017-10-07T15:13:55.130 回答
0

使用 IAM 还有另一种解决方案。您可以为您的客户预置一个对 Lambda 源代码具有读取权限的 IAM 角色。通过使用公共 lambda 端点(看起来像 的端点https://api-id.execute-api.region.amazonaws.com/STAGE) - 您可以向客户保证请求直接命中这个特定的 lambda 函数。

您的客户可用的 IAM 角色有权执行以下操作:

  • 查看所有修订版的 lambda 代码和其他详细信息
  • 阅读 API 网关配置以验证请求是否直接命中 lambda,并且不会转到其他位置。

然后,您的客户需要做的就是使用给定的 IAM 角色在他们的最后针对 lambda 设置审计。他们可以设置一个定期 cron,在更新时下载所有版本的 lambda。如果您有预审流程 - 可以很容易地针对他们的警报进行配置。

请注意,这依赖于善意运行的“AWS”以及基本假设:

  1. AWS Lambda 正在运行它配置的代码。
  2. AWS 管理 API 返回正确的响应。
  3. 警报时间是合理的。这更容易,因为您也可以下载以前的 lambda 代码版本。

所有这些都是合理的假设。

于 2021-01-19T19:33:49.050 回答