16

标题说什么。

在主 AWS 账户中,我有几个个人账户,即AWS Identity and Access Management (IAM)用户。我想将某些 IAM 用户分配给组,并防止他们终止某些Amazon EC2 实例、取消注册某些Amazon 系统映像 (AMI)等。

我不介意他们是否在玩自己的东西,但我不希望他们碰我的东西。

那可能吗?

4

1 回答 1

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"
        }
      }
    }
   ]
}

警告

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

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

原始答案

恐怕这不可能按照您想要的方式进行(以及许多其他人,包括我自己)。

问题

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

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

(部分)解决方法

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

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

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

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

显然,分别受限制的帐户将无法再为这些对自己资源的调用提供便利。

此外,这不会阻止他们运行一个花哨的集群计算 8 个超大型实例左右,从而产生相应的成本;)

替代方法

根据您的设置/环境,您可能希望改为查看整合账单,它本质上提供了一种将一个或多个 AWS 账户收集到另一个账户下的方法,该账户为其他账户使用的资源付费。

虽然这主要是一个会计功能,但它也可以用来区分关注的领域——例如,促进单独的开发和生产账户以实现各自独立操作是很常见的,尤其是在 IAM 权利等方面。

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

支付账户将支付链接账户的所有费用。 但是,每个链接账户在其他方面都是完全独立的(注册服务、访问资源、使用 AWS 高级支持等)。支付账户所有者无法访问属于关联账户所有者的数据(例如,他们在 Amazon S3 中的文件)。每个账户所有者使用他们自己的 AWS 凭证来访问他们的资源(例如,他们自己的 AWS 秘密访问密钥)。 [强调我的]

显然,此功能针对较大的客户,但根据您的场景,您可能能够提出一个解决方案来根据需要分离您的 AWS 账户和资源。

于 2012-03-24T18:09:14.090 回答