6

我们的团队正在使用 AWS Lambda 函数和 API Gateway 来促进与欧洲开放银行 API 的连接。(PSD2)。

我们的 Lambda 是用 NodeJS 编写的。

PSD2 需要 Mutual TLS,这很好,我们已经正确实施了一切并在沙盒环境中工作。

示例请求如下所示:

{
  hostname: '[bank hostname]',
  path: '[bank api endpoint]',
  method: 'GET',
  headers: {
    accept: 'application/json',
    signature: 'XXX',
    date: 'XXX',
    digest: 'XXX',
    'x-request-id': 'XXX',
    'tpp-signature-certificate': '[PATH_TO_CERTIFICATE]',
    authorization: 'Bearer [accessToken]',
  },
  cert: fs.readFileSync('/var/task/certs/cert.crt'), // Buffer
  key: fs.readFileSync('/var/task/certs/private.key'), // Buffer
} 

我们目前遇到的问题是我们不确定在哪里安全地存储我们的证书。目前,我们只是将它们存储在代码库中的资产文件夹中,这并不理想,出于显而易见的原因,我们希望将它们从代码库中移出。

我们一直在研究 AWS ACM。但是,尚不清楚我们将如何检索证书的路径(在上传它们之后)以便在上面的请求中使用它。

所以我的问题是我们如何使用 AWS 安全地存储我们的证书,以便我们可以在 HTTPS 请求中使用它们?

4

2 回答 2

3

您无法从 ACM 检索证书,实际上这些证书仅附加到 AWS 资源,例如 CloudFront、ELB 和 API 网关。

要检索内容,有几个解决方案。

第一种是将其存储在凭证/机密存储中,AWS 在机密管理器服务中提供此功能。此外,您可以将SecureString存储在系统管理器参数存储中。

或者,您可以使用第三方解决方案,例如HashiCorp Vault

使用这种方法,如果您需要文件存在于磁盘上,则需要将输出存储在 tmp 文件存储中。

如果这些方法对您不起作用,您可以使用AWS EFS。最近添加了一项支持,以允许 Lambda 将 NFS 挂载附加到共享存储。

于 2020-07-13T15:15:25.993 回答
1

我认为最终您正在寻找像AWS KMSCloudHSM这样的解决方案,它可以让您安全地存储您的私钥并执行加密功能,而不是为了“外部使用”而泄露密钥。这是最安全的方式,因为即使您也看不到密钥(尽管 CloudHSM 实际上允许上传/下载密钥)。

由于Node.js TLS 模块基于 OpenSSL,而 CloudHSM 带有现成的 openssl 引擎,您可以将其用于 Mutual TLS。选项privateKeyEngine,privateKeyIdentifierpublicKeyEngineofpublicKeyIdentifiertls.createSecureContext用于此目的。

对于 AWS KMS(这是一种更具成本效益的解决方案),有一个用 Rust 编写的开源 openssl 引擎

话虽如此,我不确定您是否能够在 Lambda 中使用自定义 openssl 引擎,或者 CloudHSM 引擎是否包含在 Lambda 的 Node.js 环境中(这将是非常合乎逻辑的)。因此,您还可以选择将双向 TLS 连接“卸载”到在 Lambda 外部运行的“微服务”。我们采用这种方式并使用安全存储的私钥实现了一个非常简单的代理“代理”mTLS 调用。

于 2020-07-14T06:13:22.790 回答