17

我正在使用亚马逊的工具来构建一个网络应用程序。我对他们很满意,但我有安全方面的顾虑。

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

例如,要将文件从 EC2 实例上传到 S3,您的 EC2 实例需要具有您的Access Key IDSecret Access Key

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

如果我的其中一个实例遭到入侵,我的所有亚马逊资产都会遭到入侵。密钥可用于上传/替换 S3 和 SimpleDB 数据,启动和停止 EC2 实例等。

如何将单个受感染主机的损害降至最低?

我的第一个想法是为每个帐户获取多个标识符,以便我可以跟踪所做的更改并快速撤消“被黑”帐户。亚马逊不支持每个账户多于一组凭证。

我的第二个想法是创建多个帐户并使用 ACL 来控制访问。不幸的是,并非所有服务都支持授予其他帐户访问您的数据的权限。此外,您使用的带宽越多,带宽就越便宜,因此所有这些都通过一个帐户进行是理想的。

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

4

4 回答 4

5

您可以做的是拥有一个超级锁定的“身份验证服务器”。密钥只存在于这台服务器上,所有其他服务器都需要请求它的许可。您可以将自己的密钥分配给各个服务器,也可以通过 IP 地址将其锁定。这样,如果服务器受到威胁,您只需从“身份验证服务器”撤销其密钥。

这是可能的,因为 AWS 身份验证的工作方式。假设您的网络服务器需要将文件上传到 S3。首先,它将生成 AWS 请求,并将该请求与您的自定义服务器密钥一起发送到“身份验证服务器”。身份验证服务器将对请求进行身份验证,执行加密魔法,并将经过身份验证的字符串返回给网络服务器。然后,网络服务器可以使用它来实际提交请求以及要上传到 S3 的文件。

于 2008-09-25T17:20:34.990 回答
5

AWS 允许您使用Identity and Access Management创建多个用户。这将允许您实施任何一种方案。

我建议为每个 EC2 实例定义一个 IAM 用户,这允许您在相应的 EC2 实例遭到破坏时撤销对特定用户(或只是他们的访问密钥)的访问权限,并使用细粒度权限来限制用户可以调用的 API以及他们可以访问哪些资源(例如只允许用户上传到特定的存储桶)。

于 2011-06-23T06:51:54.083 回答
3

此外,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 使用角色创建的临时密钥。

于 2013-06-22T05:16:09.377 回答
1

AWS 提供“综合计费”,可以解决您的疑虑。

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

“Consolidated Billing 使您能够通过指定一个支付账户来合并贵公司内多个 Amazon Web Services (AWS) 账户的付款。您可以查看所有账户产生的 AWS 成本的组合视图,并获取详细的成本报告与您的支付账户关联的每个单独的 AWS 账户。合并账单还可以降低您的总体成本,因为您所有账户的累计使用量可以帮助您更快地达到价格较低的批量级别。”

于 2010-09-07T16:40:27.603 回答