在身份和访问管理(IAM)中,我可以限制一组用户仅访问/启动/终止特定的EC2 AMI或实例吗?

16
1个回答

29

更新

AWS刚刚宣布Amazon EC2和Amazon RDS的资源级权限,以解决IAM在EC2和RDS中支持方面的长期短板(与其他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身份和访问管理(IAM)原则上支持两者,但并非每个AWS产品/服务都提供基于资源的限制; 不幸的是,Amazon EC2就是其中之一,甚至作为这种差异的示例,参见与其他AWS产品集成

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

(部分)解决方法

根据其他账户的需求,您仍然可以限制其执行那些被认为是破坏性的操作的能力——您可以通过AWS策略生成器探索可用的操作,例如:
- 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高级支持等)。付费账户所有者无法访问属于关联账户所有者的数据(例如,他们在Amazon S3中的文件)。每个账户所有者使用自己的AWS凭证来访问其资源(例如,他们自己的AWS Secret Access Key)。显然,此功能针对较大的客户,但根据您的情况,您可能能够想出解决方案,以根据需要分离您的AWS账户和资源。

1
继续使用“合并账单”解决方案的想法,想要保持系统管理员控制权的人可以保留所有账户的所有权(为每个用户创建一个账户),并在每个账户中使用IAM授予个人用户所需的权限。这样,作为系统管理员,您仍然可以看到他们何时运行机器(否则他们会在您不知道的情况下产生巨额账单,直到月底才知道)。将此方法与内置于AWS中的一些“警报”功能相结合,或使用EC2 API跨所有账户检查正在运行的内容。 - dmohr
1
@dmohr - 很好的观点;对于较大的用户群体可能有些极端,但根据您的需求它可能仍然足够扩展,并且截至今天,这也是获得某种审计跟踪的唯一选择(有关此内容,请参见Logs for actions on amazon s3 / other AWS services);如果您只关心运行实例,则还可以查看新的Amazon CloudWatch - Alarm Actions,请参见我的相关答案了解详情。 - Steffen Opel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接