我正在使用亚马逊的工具来构建一个Web应用程序.我对他们很满意,但我有安全问题.
现在,我正在使用多个EC2实例,S3,SimpleDB和SQS.为了验证对不同服务的请求,您需要包含访问标识符(需要登录).
例如,要从EC2实例将文件上载到S3,您的EC2实例需要具有您的访问密钥ID和您的秘密访问密钥.
这基本上意味着您的用户名和密码需要在您的实例中.
如果我的某个实例遭到入侵,我的所有亚马逊资产都将受到损害.密钥可用于上传/替换S3和SimpleDB数据,启动和停止EC2实例等.
如何最大限度地减少单个受感染主机的损坏?
我的第一个想法是为每个帐户获取多个标识符,以便我可以跟踪所做的更改并快速撤消"黑客"帐户.亚马逊每个帐户不支持多套凭据.
我的第二个想法是创建多个帐户并使用ACL来控制访问.遗憾的是,并非所有服务都支持授予其他帐户访问您的数据的权限.加上你使用的带宽越便宜,所以拥有一个帐户是理想的.
有没人处理过,或者至少考虑过这个问题?
您可以做的是拥有一个超级锁定的"身份验证服务器".密钥只存在于这一台服务器上,所有其他服务器都需要请求其权限.您可以将自己的密钥分配给各种服务器,也可以通过IP地址将其锁定.这样,如果服务器受到攻击,您只需从"身份验证服务器"中撤消其密钥.
由于AWS身份验证的工作方式,这是可能的.假设您的网络服务器需要将文件上传到S3.首先,它将生成AWS请求,并将该请求与您的自定义服务器密钥一起发送到"身份验证服务器".身份验证服务器将对请求进行身份验证,执行加密魔术,并将经过身份验证的字符串返回给Web服务器.然后,网络服务器可以使用它来实际提交请求以及要上传到S3的文件.
AWS允许您使用身份和访问管理创建多个用户.这将允许您实现任一场景.
我建议为每个EC2实例定义一个IAM用户,如果相应的EC2实例遭到破坏,这允许您撤销对特定用户(或只是他们的访问密钥)的访问权限,并且还使用细粒度权限来限制用户可以调用的API以及他们可以访问哪些资源(例如,只允许用户上传到特定的存储桶).