我想使用 AWS CodeDeploy 自动在我的应用程序上部署新代码。我正在使用 AWS 运行我的应用程序。我想要做的是:
- 在 jenkins 中构建应用程序(也可以在 AWS 上运行)
- 将编译后的应用程序连同一些将由 CodeDeploy 钩子自动设置的环境变量一起发送到 S3(AfterInstall)
- CodeDeploy 将负责其余步骤
我想知道的是,AWS 是否有一种做法,即在 S3 上加密这些环境变量(它们位于文本文件中),并在实例内部解密它们?如果没有,您是否有任何关于如何实现我想要的(在 S3 上时关于这些环境变量的一些安全性)的指示?
PS 将这些环境变量上传到 S3 并在每次部署时进行设置的原因是它们往往会发生变化。我不想将它们嵌入到图像中。此外,放弃环境变量也不是一种选择。
答案1
将数据放入 Amazon S3 时,有两种方法可以加密数据:
- 客户端加密,或
- 服务器端加密。
客户端加密
亚马逊没有任何内置的客户端加密机制。您必须自己动手:使用您最喜欢的工具加密 Jenkins 中的数据,然后上传。从 S3 下载对象时,在下载对象后解密对象。
一种方法是使用7z
AES256 加密来压缩和加密档案。另一种方法是使用 OpenSSL。
服务器端加密
亚马逊确实有内置的服务器端加密机制。
如果您使用 AWS CLI 将文件上传到 S3,则可以使用命令--server-side-encryption
行参数在服务器上加密文件。下载对象时,它们将自动解密。
但请注意,这并不能防止除您之外的任何人通过 S3 API 下载对象。如果有人使用有效的 AWS 凭证下载该文件,则该文件将对他们开放。
它能防止有人通过非 API 方式访问对象,比如直接数据中心访问。
最后说明
如果您希望除了您之外的任何人都无法读取这些文件,那么您需要客户端加密。