在 jenkins 或 S3 上加密并在 EC2 实例上解密

在 jenkins 或 S3 上加密并在 EC2 实例上解密

我想使用 AWS CodeDeploy 自动在我的应用程序上部署新代码。我正在使用 AWS 运行我的应用程序。我想要做的是:

  1. 在 jenkins 中构建应用程序(也可以在 AWS 上运行)
  2. 将编译后的应用程序连同一些将由 CodeDeploy 钩子自动设置的环境变量一起发送到 S3(AfterInstall)
  3. CodeDeploy 将负责其余步骤

我想知道的是,AWS 是否有一种做法,即在 S3 上加密这些环境变量(它们位于文本文件中),并在实例内部解密它们?如果没有,您是否有任何关于如何实现我想要的(在 S3 上时关于这些环境变量的一些安全性)的指示?

PS 将这些环境变量上传到 S3 并在每次部署时进行设置的原因是它们往往会发生变化。我不想将它们嵌入到图像中。此外,放弃环境变量也不是一种选择。

答案1

将数据放入 Amazon S3 时,有两种方法可以加密数据:

  1. 客户端加密,或
  2. 服务器端加密。

客户端加密

亚马逊没有任何内置的客户端加密机制。您必须自己动手:使用您最喜欢的工具加密 Jenkins 中的数据,然后上传。从 S3 下载对象时,在下载对象后解密对象。

一种方法是使用7zAES256 加密来压缩和加密档案。另一种方法是使用 OpenSSL。

服务器端加密

亚马逊确实有内置的服务器端加密机制。

如果您使用 AWS CLI 将文件上传到 S3,则可以使用命令--server-side-encryption行参数在服务器上加密文件。下载对象时,它们将自动解密。

但请注意,这并不能防止除您之外的任何人通过 S3 API 下载对象。如果有人使用有效的 AWS 凭证下载该文件,则该文件将对他们开放。

它能防止有人通过非 API 方式访问对象,比如直接数据中心访问。

最后说明

如果您希望除了您之外的任何人都无法读取这些文件,那么您需要客户端加密。

相关内容