服务
关于
CloudProse博客

2016年6月15日,星期三

无服务器框架 在管理AWS API网关,AWS Lambda以及帮助连接所有事件和流方面非常出色。它使创建和管理复杂的基础结构变得轻松而直接。在Trek10上,我们看到了无服务器模式带来了空前的兴趣和流量。但是,我们与之交谈的几乎每个潜在客户都有一个共同的问题: 我们如何保护诸如RSA证书,API密钥和客户端机密之类的敏感信息?

有几种解决方法:

  • Just share plaintext secrets in your _meta folder and commit it to your private repos. This is okay, but then you still have plaintext secrets rolling around lord knows how many developers’ machines.
  • Keep _meta out of your repo, and instead use the S3 meta sync plugin. This works, but the user experience is painful, especially if using CI and multiple developers. Should I update or resync today? Should I not? I dunno.
  • 使用静态加密的S3文件夹,并在函数运行时读取它。这可能会导致相当多的延迟,然后您的配置与您的应用完全分开。忘记配置或弄乱配置也很容易(而且很可能)。
  • Commit the _meta folder, but 所有 secrets and sensitive data are encrypted and protected via some mechanism and tooling. By far the most complicated to setup and tool.

前三个选项可以工作,但是它们在实际工作流程或安全性方面均存在风险。最后一个选项,在技术上最具挑战性,即使设置一个简单的应用程序来保护一个或两个秘密,也可能花费数小时或数天的时间来设置。

由于我们在Trek10上每天处理多个项目,因此我们需要技术上合理,安全且易于使用的人员。所以我们建立了 无服务器的秘密 .

无服务器的秘密

无服务器的秘密 插件可以在Serverless Framework应用程序中为您无缝管理密码的加密,运行时解密和缓存。它具有多提供商支持,包括原始AWS Key管理服务(KMS),基于文件的KMS和符合credstash的解密器。

It solves the security and workflow problems by letting _meta securely live inside of your git repo, 所有 owing true version control to maintain your configuration, which is good for developers. However, the secrets, instead of looking like superSecretTextHere, looks something like kms::arn:aws:kms:us-west-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab::exyeE4AdmEH2vbXvXS49/SG05O8PrVovmKISeYorw.

为了进一步提高安全性,您可以对其进行设置,以便只有某些开发人员才能对机密进行加密,甚至可以进一步进行加密,以便只有特定的功能或一组功能才有权解密机密。潜在的攻击媒介受到极大限制。

每个秘密都会在运行时解密,这要归功于 Lambda容器重用 以及一些由Serverless Secrets进行的智能缓存,它只会在每个给定容器的第一次运行时发生,而在其生命周期内不会再发生。对于冷容器启动时间,您确实要付出约1秒的小性能损失,但此后将损失零性能。

无服务器的秘密 今天旋转,让我们知道您的想法。我们也会处理您的任何公关或问题!

作者
 贾里德·崔特(Jared Short Trek)
贾里德·肖特(Jared Short)