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

Flo*_*rei 16 amazon-ec2 amazon-web-services amazon-iam amazon-ami

标题说的是什么.

在主AWS账户中,我有几个个人账户,即AWS身份和访问管理(IAM)用户.我想将某些IAM用户分配给组,并阻止他们终止某些Amazon EC2实例,取消注册某些Amazon Machine Images(AMI)等.

我不介意他们是否正在玩自己的东西,但我不希望他们触摸我的东西.

那可能吗?

Ste*_*pel 29

更新

AWS刚刚宣布了Amazon EC2和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,有关详细信息,请参阅Amazon EC2的条件密钥.

下面是示例3的变体:允许用户停止并仅启动手头用例的特定实例,这允许用户仅启动和停止[并终止]具有"department = dev"标记的实例:

{
   "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"
        }
      }
    }
   ]
}
Run Code Online (Sandbox Code Playgroud)

警告

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

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

原始答案

我担心这不可能像你想做的那样(以及许多其他人,包括我自己).

问题

您希望限制对特定服务资源的访问而不是其操作 - 虽然AWS身份和访问管理(IAM)原则上支持这两者,但并非每个AWS产品/服务都提供基于资源的限制; 遗憾的是,Amazon EC2就是其中之一,甚至可以作为这种差异的一个例子,请参阅与其他AWS产品集成:

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

(部分)解决方法

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

  • ec2:DeregisterImage - 当用户/组被拒绝时效果明显
  • ec2:ModifyInstanceAttribute- 当用户/组被拒绝时,这将有助于通过为实例启用终止保护:

默认情况下,您可以终止启动的任何实例.如果要防止意外意外终止实例,可以为实例启用终止保护.

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

显然,受限制的帐户将无法再为这些自己的资源提供便利.

此外,这不会阻止他们运行花哨的Cluster Compute Eight Extra Large Instance左右,依次产生相应的成本;)

替代方法

根据您的设置/环境,您可能希望查看Consolidated Billing,这实际上提供了一种方法来收集另一个账户下的一个或多个AWS账户,这是为其他人使用的资源付费.

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

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

付款帐户将根据关联帐户的所有费用进行结算. 但是,每个链接帐户在其他方面完全独立(注册服务,访问资源,使用AWS Premium Support等).付费帐户所有者无法访问属于链接帐户所有者的数据(例如,他们在Amazon S3中的文件).每个帐户所有者使用他们自己的AWS凭证来访问他们的资源(例如,他们自己的AWS秘密访问密钥). [强调我的]

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