AWS账户标识符的影响

17

我正在使用亚马逊的工具构建Web应用程序。我对它们非常满意,但是我有一个安全问题。

目前,我正在使用多个EC2实例、S3、SimpleDB和SQS。为了验证对不同服务的请求,您需要包含您的访问标识(需要登录)。

例如,要从EC2实例上传文件到S3,您的EC2实例需要拥有您的访问密钥ID秘密访问密钥

这基本上意味着您的用户名和密码需要在您的实例中保存。

如果我的其中一个实例受到攻击,所有的亚马逊资产都将受到威胁。这些密钥可以用于上传/替换S3和SimpleDB数据,启动和停止EC2实例等等。

如何最小化单个受攻击主机的损失?

我首先想到的是获取每个帐户的多个标识符,以便我可以跟踪所做的更改并快速撤销“被盗”的帐户。但亚马逊不支持在一个帐户中使用多组凭据。

我的第二个想法是创建多个帐户并使用ACL控制访问。不幸的是,并非所有服务都支持授予其他帐户对您的数据的访问权限。而且,带宽使用越多,费用越低,因此让全部数据经过一个帐户是理想的。

有人处理过或者至少考虑过这个问题吗?

4个回答

5
AWS允许您使用身份和访问管理创建多个用户。这将使您能够实现您的任何场景。
我建议为每个EC2实例定义一个IAM用户,这样可以在相应的EC2实例受到威胁时撤销对特定用户(或仅其访问密钥)的访问,并使用细粒度权限限制用户可以调用哪些API以及可以访问哪些资源(例如,仅允许用户上传到特定存储桶)。

2
是的,IAM 是正确的选择。IAM 权限可以进一步细化,仅限于实例需要执行的操作(上传或读取来自特定存储桶的数据等)。 - Daniel Lopez
谢谢你的评论,Daniel。我已经更新了答案,以融入你的建议。 - BenM
2
现在有了角色,它们比IAM用户更适合解决这个问题。 - Charles Engelke

5
你可以建立一个单一的、超级安全的“认证服务器”。密钥只存在于这个服务器上,其他所有服务器都需要向它请求权限。你可以为各个服务器分配自己的密钥,并按IP地址进行锁定。这样,如果某个服务器被攻击,你只需从“认证服务器”中撤销其密钥即可。
这是可能的,因为AWS认证的工作方式。假设你的Web服务器需要上传文件到S3。首先,它将生成AWS请求,并将该请求与你的自定义服务器密钥一起发送到“认证服务器”。认证服务器将对请求进行身份验证,执行加密操作,并将已认证的字符串返回给Web服务器。然后,Web服务器可以使用此字符串实际提交请求,并将文件上传到S3。

自己编写此类身份验证服务器很可能会导致意想不到且未被注意到的安全漏洞。AWS现在(但在最初提出此问题时不是)具有管理问题风险的设施。特别是,IAM角色(由@cudds的答案描述)非常适合解决此问题。 - Charles Engelke

3

1
AWS提供“合并账单”功能,解决了您在第二个想法中的担忧。

https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=consolidated-billing

"

合并账单使您能够通过指定单一的支付帐户,为公司内多个亚马逊网络服务(AWS)帐户进行付款的功能。 您可以查看所有帐户产生的 AWS 成本的综合视图,并获取与您的付款帐户关联的每个单独 AWS 帐户的详细成本报告。 合并账单还可以降低您的总成本,因为跨所有帐户的汇总使用情况可以帮助您更快地达到更低价格的使用量阶层。

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接