我使用亚马逊的工具来构建Web应用程序。 我很高兴与他们,但我有一个安全问题。
现在,我使用多个EC2实例,S3,SimpleDB的和SQS。 为了验证请求到不同的服务,您包括您访问标识符 (需要登录)。
例如,从EC2实例文件上传到S3,您的EC2实例需要有您的访问密钥ID和您的访问密钥 。
这基本上意味着你的用户名和密码,需要在您的实例。
如果我的实例中的一个被攻破,我所有的亚马逊的资产会受到影响。 这些密钥可用于上载/替换S3和SimpleDB的数据,启动和停止EC2实例等
我怎样才能尽量减少单个受损主机的损害?
我首先想到的是让每个帐户多个标识符,所以我可以跟踪所做的更改,并迅速撤销了“黑客”的帐户。 亚马逊不支持一组以上的每个帐户的凭据。
我的第二个想法是创建多个帐户,并使用ACL的控制访问。 不幸的是,并非所有的服务支持授予其他帐户访问您的数据。 以上的带宽越便宜越您使用,所以有这一切都要经过一个帐户是理想的。
有没有人处理,或者至少想过这个问题?
你可以做的是有一个单一的,超锁定“认证服务器”。 该密钥只存在这一个服务器上,而所有其他的服务器将需要问它的许可。 你可以指定自己的钥匙,各种服务器,并通过IP地址锁定它为好。 这样,如果一台服务器被攻破,您只需撤消了“认证服务器”的关键。
这是可能的,因为AWS认证的工作方式。 假设你的Web服务器需要将文件上传到S3。 首先,它会生成AWS的要求,并与您的自定义服务器密钥到“认证服务器”一起发送该请求。 认证服务器将验证请求,做加密神奇的东西,并返回认证字符串返回到Web服务器。 然后Web服务器可以使用它来实际上上传到S3文件一起提交申请。
AWS允许你创建多个用户身份和访问管理 。 这将允许你实现任何你的场景。
我建议限定每个EC2实例的IAM用户,这可以让你如果相应的EC2实例损害撤销访问特定用户(或只是他们的访问密钥),还可以使用细粒度的权限来限制哪些API,用户可以调用他们可以访问哪些资源(例如,只允许用户上传到特定的桶)。
此外,AWS IAM角色让您可将权限分配给EC2实例,而不必放在实例键。 看到博客文章http://aws.typepad.com/aws/2012/06/iam-roles-for-ec2-instances-simplified-secure-access-to-aws-service-apis-from-ec2.html大多数的SDK利用由角色创建的临时密钥。
AWS提供了“合并结算”,这解决了第二个想法你的关心。
https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=consolidated-billing
“合并结算,您可以合并多个Amazon Web Services的支付(AWS)通过指定一个付费账户在公司内部账户,你可以看到所有帐户发生的AWS费用的组合视图,以及获得详细的成本报告每个单独的AWS账户与付费帐户相关联。合并结算也可以降低总体费用,因为所有帐户的卷起的使用可以帮助你更快地到达价格较低的容积层“。