将EC2用户数据shell脚本存储在专用S3存储桶中是否安全?

AJB*_*AJB 20 bash shell amazon-s3 amazon-ec2 user-data

我在AWS上有一个EC2 ASG,我有兴趣存储用于实例化S3存储桶中任何给定实例的shell脚本,并将其下载并在实例化时运行,但即使我使用它也感觉有点摇摇晃晃a IAM Instance Role,通过HTTPS传输,并使用KMS using 在S3存储桶中静止时加密脚本本身S3 Server Side Encryption(因为该KMS方法抛出了"未知"错误).

安装程序

User-Data田野里

User Data在创建Launch Configuration我希望我的ASG使用时,我在字段中输入以下内容:

#!/bin/bash

apt-get update
apt-get -y install python-pip
apt-get -y install awscli
cd /home/ubuntu
aws s3 cp s3://super-secret-bucket/Instance-Init.sh . --region us-east-1
chmod +x Instance-Init.sh
. Instance-Init.sh
shred -u -z -n 27 Instance-Init.sh
Run Code Online (Sandbox Code Playgroud)

以上做了以下内容:

  • 更新包列表
  • 安装Python(需要运行aws-cli)
  • 安装 aws-cli
  • /home/ubuntu用户目录的更改
  • 使用aws-cli从中下载Instance-Init.sh文件S3.由于IAM Role分配给我的实例,我的AWS信誉会被自动发现aws-cli.该IAM Role还赋予我的实例需要解密文件的权限.
  • 使其可执行
  • 运行脚本
  • 完成后删除脚本.

Instance-Init.sh脚本

脚本本身将执行诸如设置env变量和docker run我需要在我的实例上部署的容器之类的东西.有点喜欢:

#!/bin/bash

export MONGO_USER='MyMongoUserName'
export MONGO_PASS='Top-Secret-Dont-Tell-Anyone'

docker login -u <username> -p <password> -e <email>
docker run - e MONGO_USER=${MONGO_USER} -e MONGO_PASS=${MONGO_PASS} --name MyContainerName quay.io/myQuayNameSpace/MyAppName:latest
Run Code Online (Sandbox Code Playgroud)


非常便利

这创建了一种非常方便的方式来更新User-Data脚本,而无需在Launch Config每次需要进行微小更改时创建新脚本.它可以很好地将env变量从代码库中移除到狭窄,可控制的空间(Instance-Init.sh脚本本身).

但这一切都感觉有点不安全.将我的主数据库信誉放入S3中​​的文件的想法至少令人不安.

问题

  1. 这是一种常见的做法还是我在这里做了一个坏主意?
  2. 文件是否在新实例上下载和存储(尽管是短暂的)这一事实构成了一个漏洞吗?
  3. 是否有更好的方法以更安全的方式删除文件?
  4. 文件在运行后是否被删除甚至是否重要?考虑到秘密被转移到envvars,删除Instance-Init.sh文件几乎是多余的.
  5. 在我刚开始的操作中,有什么东西是我缺失的吗?

在此先感谢您的帮助.

L0j*_*j1k 6

你所描述的几乎正是我们用来从我们的注册表实例化Docker容器(我们现在使用v2自托管/私有,s3支持的docker-registry而不是Quay)到生产中.FWIW,我有同样的"感觉摇摇晃晃"的感觉,你在第一次踏上这条道路时会有所描述,但是经过近一年的努力 - 并且与将这些敏感的配置数据存储在仓库或烘焙到image - 我确信这是处理这些数据的更好方法之一.现在,我们正在考虑使用Hashicorp的新Vault软件用于部署配置机密以替换此"共享"加密的机密shell脚本容器(比如快五倍).我们认为Vault将等同于将加密外包给开源社区(它所属的地方),但是用于配置存储.

换句话说,我们已经使用了大约一年的非常类似的情况,但是我们现在正在考虑使用外部开源项目(Hashicorp的Vault)来替换我们自己开发的方法.祝好运!

  • 对.那是票.谢谢@ L0j1k,这正是我正在寻找的答案.它只是*感觉*错了,是吗?无论如何,很高兴知道我没有冒险进入完全未知的领域.Vault看起来像是一个被淘汰的`etcd`,非常非常酷.我喜欢`Dynamic Secrets`概念.现在去读他们的网站.干杯. (2认同)
  • 这是一种完全合法和普遍的做法!我认为将"IAM角色"权限严格限制是一个好主意,即使执行完毕,我仍然会继续破坏脚本.我看到有些人不遗余力地在SQS队列中生成一条消息,然后在S3中触发一个签名的URL,然后他们可以下载作为引导的一部分,但这似乎不太可靠.我唯一建议的用户数据脚本更改是将pip和awscli安装在AMI中,我认为awscli的pip安装比apt-get更新. (2认同)