在IAM中,我可以限制一组用户仅访问/启动/终止某些EC2 AMI或实例吗?

时间:2012-03-22 19:54:14

标签: amazon-web-services amazon-ec2 ami amazon-iam

标题是什么。

在主AWS账户中,我有几个个人账户,即AWS Identity and Access Management (IAM)个用户。我想将某些IAM用户分配到群组,并阻止他们终止某些Amazon EC2 instances,取消注册某些Amazon Machine Images (AMIs)等。

我不介意他们是否正在玩自己的东西,但我不想让他们触摸我的东西。

这可能吗?

1 个答案:

答案 0 :(得分:29)

更新

AWS刚刚宣布Resource-Level Permissions for Amazon EC2 and Amazon RDS解决了EC2和RDS中IAM支持的长期缺陷(与其他AWS服务相比,请参阅下面的原始答案以获取详细信息/背景信息):

  

今天,我们通过引入Amazon EC2Amazon RDS的资源级权限,使IAM更加强大。 [...]

     

在EC2方面,您现在可以构建和使用IAM策略进行控制   访问EC2实例,EBS卷,映像和弹性IP   地址。 [...]

     

以下是您可以做的一些事情:

     
      
  • 允许用户在较大的多用户EC2环境中对有限的资源进行操作。
  •   
  • 为"开发"设置不同的权限和"测试"资源。
  •   
  • 控制哪些用户可以终止哪些实例。
  •   
  • 在对特定资源执行操作时,需要其他安全措施,例如MFA身份验证。
  •   

这解决了过多的安全问题,并且还有很多新用例。

此外, EC2政策声明可以包括对EC2资源上的标记的引用,这允许使用相同的标记模型和模式来获取权限和计费报告。最后,还有一个扩展的条件标签集[...],包括ec2:Region,ec2:Owner和ec2:InstanceType ,详见Condition Keys for Amazon EC2

解决方案

此处有Example 3: Allow users to stop and start only particular instances的变体,用于手头的用例,允许用户启动和停止[并终止]仅包含标记" department = dev&的实例#34;

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:StopInstances", 
        "ec2:StartInstances",
        "ec2:TeminateInstances"
      ],
      "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/department": "dev"
        }
      }
    }
   ]
}

买者

对资源级别权限的支持仅限于指定资源上的以下一组操作,这不包括用例的部分内容(例如取消注册AMI ) - 对基础的信心对于这个复杂且影响深远的功能显然足够高,虽然宣布他们计划在2013年剩余时间内添加对其他API的支持(AWS没有&#t;通常发布任何路线图):

  
      
  • 实例 - 重启,启动,停止,终止。
  •   
  • EBS卷 - 附加,删除,分离。
  •   

原始答案

我担心这不可能是你想做的事情(以及其他许多事情,包括我自己)。

问题

您希望限制对特定服务资源的访问权限,而不是操作 - 而AWS Identity and Access Management (IAM)原则上支持,而不是每个AWS产品/服务提供基于资源的限制;遗憾的是Amazon EC2就是其中之一,甚至可以作为这种差异的一个例子,请参阅Integrating with Other AWS Products

  

下表总结了您是否可以授予IAM权限   控制对服务的操作,资源或两者的访问。对于   例如,您可以使用IAM来控制哪些Amazon EC2操作用户   可以访问,但您无法使用IAM来控制用户'进入   AMI,卷,实例等 [强调我的]

(部分)解决方法

根据其他帐户的需求,可能仍然能够至少限制他们执行那些被视为具有破坏性的操作的能力 - 您可以通过AWS Policy Generator探索可用的操作,例如:

  

默认情况下,您可以终止启动的所有实例。如果你想   防止意外终止实例,您可以启用   实例的终止保护。

也就是说,一旦您启用了终止保护,任何未经许可使用ec2:ModifyInstanceAttribute的人都无法终止这些实例。

显然,分别受限制的帐户不再能够为这些自己的资源提供便利。

此外,这不会阻止他们运行花哨的 Cluster Compute Eight Extra Large Instance 左右,反过来会产生相应的费用;)

替代方法

根据您的设置/环境,您可能需要查看 Consolidated Billing ,这实际上提供了一种方法来收集另一个账户下的一个或多个AWS账户,这是为其他人。

虽然这主要是一种会计功能,但它也可用于分离关注的领域 - 例如,促进单独的开发和生产帐户分别实现独立操作非常普遍, IAM权利等。

介绍性博客文章New AWS Feature: Consolidated Billing提供了一个很好的概述,以下是AWS Consolidated Billing Guide关于您的明显用例的相关主题:

  

付款帐户需要为关联帐户的所有费用付费。   但是,每个关联的帐户在其他帐户中完全独立   方式(使用AWS Premium注册服务,访问资源)   支持等。)付费帐户所有者无法访问所属的数据   到链接的帐户所有者(例如,他们在Amazon S3中的文件)。的每个   帐户所有者使用自己的AWS凭据来访问其资源   (例如,他们自己的AWS秘密访问密钥)。 [强调我的]

显然,此功能针对的是大客户,但根据您的情况,您可能会提出解决方案,根据需要分离您的AWS账户和资源。