2012-07-03 22 views
4

我正在为我们的用户编写AWS应用程序的早期阶段,他们将使用他们的AWS资源运行我们的研究算法。例如,我们的代码需要启动运行我们的'worker'应用的EC2实例,访问RDS数据库,并创建访问SQS队列。 AWS Java SDK示例(我们正在使用Java编写)使用AwsCredentials.properties文件来存储访问密钥ID和秘密访问密钥,这对于示例来说很好,但对于我们的用户来说显然是不可接受的,他们实际上会给我们获得他们所有的资源。代表他们运行我们的系统的干净方式是什么?我发现了AWS Identity and Access Management (IAM)这似乎是为了这个目的(我还没有得到我的头),尤其是。 Cross-account access between AWS accountsThis post使得它听起来简单明了:我们如何提供我们的AWS应用程序以访问客户的资源而不需要他们的密钥?

使用Amazon IAM服务创建一组密钥,只有拥有执行,你需要为你的脚本任务 权限。 http://aws.amazon.com/iam/

然而,其他职位(例如,Within IAM, can I restrict a group of users to access/launch/terminate only certain EC2 AMIs or instances?)建议有使用IAM与EC2在特别的限制。

任何建议将是非常有益的!

回答

1

关于RDS和EC2的关键限制是,尽管您可以限制对某些API操作的访问,但不存在资源级别限制。例如,对于IAM S3策略,您可以限制用户只能对某些存储桶执行某些操作。您可以为EC2编写一个策略,该策略规定允许用户停止实例,但不能说只能停止某些实例。

另一种选择是让他们通过Security Token Service为您提供临时凭证。另一个变体是使用新的IAM角色服务。有了这个,一个实例有一组关联的策略。您不需要提供AwsCredentials.proprties文件,因为SDK可以从元数据服务中获取凭证。

最后最后一个选项可能是合并结算。如果您使用AWS资源的原因仅仅是因为结算,那么请设置一个新帐户,并从其帐户开具帐单。这些账户是相互隔离的,所以你不能意外删除它们的实例。同样,你不能访问他们的RDS快照和类似的东西(通过mysql访问RDS实例(而不是AWS api)取决于实例的安全组)。您当然可以将其与以前的选项结合起来 - 它们可以为您提供凭据,只允许您在该独立账户中执行某些操作。

相关问题