我正处于为我们的用户编写 AWS 应用程序的早期阶段,该应用程序将使用他们的 AWS 资源运行我们的研究算法。例如,我们的代码需要启动 EC2 实例运行我们的“worker”应用程序,访问 RDS 数据库,并创建访问 SQS 队列。 AWS Java SDK 示例(我们用 Java 编写)使用 AwsCredentials.properties 文件来存储访问 key ID 和 secret 访问 key ,这对于示例来说很好,但显然不能为我们的用户所接受,他们本质上会给我们访问他们的所有资源。代表他们运行我们的系统的干净方法是什么?我发现 AWS Identity and Access Management (IAM) 似乎是为了这个目的(我还没有弄清楚),尤其是。 Cross-account access between AWS accounts 。 This post 听起来很简单:
但是,其他帖子(例如 Within IAM, can I restrict a group of users to access/launch/terminate only certain EC2 AMIs or instances? )表明将 IAM 与 EC2 结合使用存在限制。
任何建议都会非常有帮助!
最佳答案
RDS 和 EC2 的主要限制是,虽然您可以限制对某些 API 操作的访问,但没有资源级别限制。例如,使用 IAM S3 策略,您可以限制用户只能对某些存储桶执行某些操作。您可以为 EC2 编写一项策略,说明允许用户停止实例,但不能说明您只能停止某些实例。
另一种选择是让他们通过 Security Token Service 为您提供临时凭证。另一个变体是使用新的 IAM 角色服务。有了这个,一个实例就有了一组与之关联的策略。您不需要提供 AwsCredentials.proprties 文件,因为 SDK 可以从元数据服务中获取凭证。
最后一个选项可能是合并计费。如果您使用他们的 AWS 资源的原因仅仅是因为计费,那么设置一个从他们的账户中计费的新账户。帐户彼此隔离,因此您不能例如意外删除它们的实例。同样,您无法访问他们的 RDS 快照和类似内容(通过 mysql(而不是 AWS api)访问 RDS 实例将取决于实例的安全组)。您当然可以将其与之前的选项结合使用 - 它们可以为您提供仅允许您在该隔离帐户中执行某些操作的凭据。
关于amazon-web-services - 我们如何为我们的 AWS 应用程序提供对客户资源的访问,而无需他们的 key ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11304055/