我们如何为AWS应用程序提供访问客户资源的权限,而无需他们的密钥?

时间:2012-07-03 03:25:33

标签: amazon-web-services

我正处于为用户编写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让听起来很简单:

  

使用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 个答案:

答案 0 :(得分:1)

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

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

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